CData ConnectとTwilioを接続し、コールログを取得してみた

# CData ConnectとTwilioを接続し、コールログを取得してみた

この記事は[CData Software Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cdatasoftware)の20日目です。[Twilio Advent Calendar 2021 - Twilioを使うためのコツ、TIPSなど、Twilioのことなら何でも共有しよう！](https://qiita.com/advent-calendar/2021/twilio)のカレンダー2にも同時に投稿しようとしたら怒られてしまいましたw

## CData Connectとは

[CData Connect](https://www.cdata.com/jp/connect/)はSaaS/クラウドのデータに接続し、アプリケーションに連携できる製品です。250種類以上のデータソースに対応しており、私が所属する[Twilio](https://www.twilio.com/ja/)のデータにもアクセスできます。

今回の記事ではこのCData Connectを使ってTwilioと連携してみました。

## 前提条件

- [CData Connect - トライアル利用の申し込み](https://www.cdata.com/jp/connect/trial/)
- [Twilio アカウント](https://www.twilio.com/blog/how-to-create-twilio-account-jp)
- REST APIや、OData、MySQL、SQL Serverに接続できるアプリケーション（データ可視化アプリケーションがお勧め）


## Twilioアカウントに接続

CData Connectアカウントの取得後、CData Connectに接続すると対応するソースの一覧が表示されます。この一覧からTwilioを選択します。

![cdata-connect-data-sources.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/463a62b6-30fe-30e4-b6ba-a0440b2849e3.png)


次にTwilio認証情報を入力する画面が表示されます。この画面には`Account Sid`および`Auth Token`を入力します。

![cdata-twilio-account-info.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/cebee6ac-0ff8-2e2d-4846-a611f9dc939e.png)


取得方法については下記で説明されています。（記事はAuthトークンの取得方法ですが、Account Sidも同じ画面で取得できます。

[Authトークンとその変更方法](https://support.twilio.com/hc/en-us/articles/1260805884930-Auth%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%A8%E3%81%9D%E3%81%AE%E5%A4%89%E6%9B%B4%E6%96%B9%E6%B3%95)

取得した情報を入力し`Save Changes`ボタンをクリックします。

どんなデータが取得できるかをみてましょう。`Data Explorer`タブをクリックし、`Twilio1`を選択します。左側のナビゲーションに取得できるリソースの一覧が表示されます。

![data-explorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/23ca55cb-e68e-d74b-da26-8db4d699380c.png)

この一覧から項目をドラッグし、右上のペインにドロップするとSQLクエリが表示されます。

![twilio-call-log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/f6479c5b-ab7a-9613-a4da-d2e3a4c71f8f.png)


Twilioのコールログには[Call Resource](https://www.twilio.com/docs/voice/api/call-resource#) APIを用いてアクセスでき、着信元や発信先などプライバシーに関わる情報も含まれています。そのままアプリケーションに渡すのは良くなさそうです。

## 出力するデータを定義

不必要なデータをアプリケーションに渡さないように絞っていきましょう。`ODATA`画面を開き、`Add Tables...`ボタンをクリックします。

Databaseから`Twilio1`を選択し、

![odata-source-select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/7da9279e-619e-af3e-9598-ab8f9761f42c.png)

`[CData].[Twilio].[Calls]`にチェックを入れます。

![odata-twilio-select-table.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/08c2063d-ba9f-2ae8-00e7-9f59d442fa47.png)

今回は情報の取得だけが目的なので`GET`のみを指定し、不要な列のチェックを外していきます。

![odata-twilio-call-columns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/1a29bbe6-6a84-804a-ebbb-13043a87a6bc.png)

## アプリケーション用のアカウントを作成し、権限を付与

CData Connectに初期状態でアクセスしているのは`admin`ユーザーなのでアプリケーションからの利用に適していません。そのため、レポート用アカウントを作成します。

トップナビゲーションから`USERS`を選択し、ユーザー一覧画面から`+Add`ボタンをクリックします。

![users-add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/cab44e28-3333-2115-6d62-64deaace7d2f.png)

ダイアログではアプリケーションで使用するユーザーを登録します。

![users-new-user.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/cc073ddb-cd70-cc6c-347e-f7730772c54c.png)


一覧画面にユーザーが追加されたことを確認します。ここでも`Authtoken`が表示されますが、この値はアプリケーションからCData Connectに接続する際に利用します。

![users-list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/eadbdc8a-a5fa-5eed-6386-d104196239a5.png)

`DATA MODEL`画面に戻り、`Connected Sources`から`Twilio1`をダブルクリックします。
続けて`Privileges`タブを表示し先ほど作成したアカウントに`SELECT`権限を追加しデータの読み取りができるように設定しました。

![Privileges.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/6325c04c-4ae6-1841-0698-d3763adaf6ba.png)


これで設定は完了です。

## Postmanで接続テスト

`API`画面を開くと先ほど設定したテーブルが`Tables`に表示されています。項目をクリックするとこのテーブルのエンドポイントが確認できます。このURLと先ほど作成したユーザーのAuthTokenを用いて接続確認ができます。
![Screen Shot 2021-12-20 at 16.11.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/34f03299-5981-20c7-0979-9d88b88c4d03.png)


今回は[Postman](https://www.postman.com/)を使ってみました。

Postmanを開き、URLを指定します。リクエストヘッダーに`x-cdata-authtoken`というKeyを追加し、先ほどの`Authtoken`をValueに設定します。

![postman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/7e9c4aa4-6cbc-7476-f385-278df65f9488.png)

`Send`ボタンをクリックするとコールログがJSON形式で返ってきます。とっても簡単

![postman-result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/ec94d983-2742-9649-35d3-0e3a8e029223.png)


## ここから先はご自由に

これでアプリケーションでTwilioのコールログを使用する準備が整いました。同じことをTwilio APIだけでも実現可能ですが、CData Connectを中間に入れ込むメリットは次のような点だと感じました。

1. CData Connectを中間に配置することで複数のデータソースを利用する場合、それぞれへの接続方法をアプリケーション実装者が理解しなくても良い。CData Connectにさえ接続できれば良い
2. それぞれのデータソースへの認証情報を共有しなくて良いので気持ち安全
3. [Tableau](https://www.tableau.com/ja-jp)や[Microsoft Power BI](https://powerbi.microsoft.com/ja-jp/)、[Reveal](https://www.revealbi.io/ja/app)など、BIアプリケーションで利用する場合に「どのデータを表示すべきか」を管理できるので見せてはいけない情報は隠せる

[Reveal](https://www.revealbi.io/ja/app)で可視化してみた一例はこんな感じです。

![Screen Shot 2021-12-20 at 12.16.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176280/6ed96dcd-83b7-86f4-ad9c-c83e7fefa965.png)


設定も簡単なのでデータアクセス基盤をCData Connectで構築するとアプリケーションの開発生産性が上がるんじゃないかな？