通話ログを外部データソースに保存

このチュートリアルでは、データを理解するために、通話ログを外部データソースに保存する方法について説明します。通話ログを保存できる場所はたくさんあります(googleシート、excelなど)。この例では、Tableauのデータソースとして使用できるJSONリストにコールログを保存します。

前提条件

始める前に、Vonage Developerアカウントが必要です。Vonage Developerアカウントをお持ちでない場合は、こちらをご利用ください。 ガイド をクリックしてアカウントを作成します。

Accountを取得したら、以下のガイドに従って以下のことを行う必要があります:

この例では、Subscribeを Reports API.

認証

アプリケーションを作成し、Reports APIにサブスクライブした後、Vonage Business Communicationsの認証情報を使用してログインする必要があります。アプリケーションの APIリクエストガイド をご覧ください。

次に、この関数に /token APIを使用してアクセストークンを生成します。

def get_token():
  url = "https://api.vonage.com/token"
  payload = 'grant_type=password&username={}&password={}&client_id={}&client_secret={}'.format(USERNAME, PASSWORD, CLIENT_ID, SECRET)
  headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
  }

  response = requests.request("POST", url, headers=headers, data = payload)
  return response.json()

この関数を実行するには、以下を渡す必要がある:

  • USERNAME - Vonage Business Communicationsのユーザー名。必ず @vbc.prod をユーザー名に追加する。 firstname.lastname@vbc.prod.
  • PASSWORD - Vonage Business Communicationsのパスワード。
  • CLIENT_ID - Vonage Developer アプリケーションのクライアント ID。
  • SECRET - Vonage Developerアプリケーションの秘密。

この関数を実行すると、次のような応答が表示されるはずだ:

{
  "access_token": "abc123-xxxxx-xxxxx",
  "expires_in": 9999,
  "refresh_token": "def456-xxxx-xxxx",
  "scope": "default",
  "token_type": "Bearer"
}

コールログAPI

次のステップは、コールログapiからコールのリストを引き出すことである。この関数を使用して、開始日と終了日を指定して通話一覧を返すことができる。page_sizeパラメータを使ってリクエストした件数よりも多くの結果がある場合、この関数は他のページも取得します。

results = []
def get_reports(token, account_id, start_date, end_date, order="asc", page_size=10, page=1):
 url = "https://api.vonage.com/t/vbc.prod/reports/v1/accounts/{}/call-logs?start:gte={}&start:lte={}&page_size={}&page={}&order={}".format(account_id, start_date, end_date, page_size, page, order)
 headers = {
   'Accept': 'application/json',
   'Authorization': 'Bearer {}'.format(token),
 }

 response = requests.request("GET", url, headers=headers).json()
 if "_embedded" in response:
   results.extend(response["_embedded"]["call_logs"])

 if page < response["total_page"]:
   page = page + 1
   get_reports(token, account_id, start_date, end_date, page_size=page_size, page=page)

 return results

次に、関数に渡す開始日と終了日を作成する必要がある。開始日は過去の1日前、終了日は現在の午前0時1分前とする。

import datetime
from datetime import timedelta
today = datetime.datetime.now()
today_str = today.strftime('%Y-%m-%d 00:00:00')

yesterday = today - timedelta(days = 1)
yesterday_str = yesterday.strftime('%Y-%m-%d 23:59:59')

access_token = get_token()["access_token"]
reports = get_reports(access_token,account_id={YOUR_ACCOUNT_ID}, start_date=today_str, end_date=yesterday_str)

次に get_reports() 関数を使用して、その2つの日付の間のコールのリストを返す。次に、これらのログのリストを含むJSONファイルを作成する必要がある。

import json

def write_json(data, filename='data.json'):
    with open(filename,'w') as f:
        return json.dump(data, f)

def read_json(filename='data.json'):
  try:
    with open(filename) as json_file:
      return  json.load(json_file)
  except IOError:
    return []

data = read_json()
data.extend(reports)
write_json(data)

ここでは、JSONファイルを読み書きする関数を2つ作成する。次に、JSONファイルを読み込みます。ファイルが存在しない場合は、空のリスト([]).次に、コールログをJSONファイルに追加する必要があります。 extend() 関数を使用する。最後に、このリストをJSONファイルにロードする必要がある。この関数を実行する日ごとに、最新のコールログをJSONファイルに追加する。

CRONジョブ

最後のステップは スクリプト CRONジョブを使って毎日。こうすることで、これらの関数を手動で実行する必要がなくなる。CRONとは、スクリプトを決まった日時や間隔で定期的に実行する方法です。 ローカルでCRONジョブを作成するには、最初に crontab -e OSX/Linuxベースのシステムで。

Windowsマシンの場合:

  • 管理者などの特権アカウントでログオンする。
  • スタート」→「コントロールパネル」→「システムとセキュリティ」→「管理ツール」→「タスクスケジューラ」を選択。
  • 右のパネルで「基本タスクの作成」をクリックする。

CRONジョブは次のようになる:

* 0 * * * get_call_logs.py >/dev/null 2>&1

これは毎日真夜中に実行される。独自のCRONジョブを作成するには、以下をチェックしてください。 https://crontab-generator.org/.

Tableauにインポートする

この例では、Tableauを使用してコールログデータからダッシュボードを生成します。以下のようになります:

まず、Tableauで Connect To Data 以下 To a fileクリック JSON file 次に、通話ログを含むJSONファイルを見つける。オプションでいくつかの列を選択できます。次に Sheet 1 をクリックしてデータを表示します。

次に Sheet 1 そして Folders セクションを右クリックし End パラメータを設定し Change Data Type への Date.

をドラッグします。 End パラメータをColumnsセクションに追加する。次に End パラメータを Day. をドラッグします。 Count パラメーターを Measured Names セクションを行セクションに移動する。すると、日ごとのコール数の折れ線グラフが表示されるはずだ。

CRONジョブが毎日実行されると、Tableauダッシュボードが新しいコールログで更新されます。Tableau用のデータソースを最初に追加した場所と同じ場所にJSONを保存することを忘れないでください。

結論

この例では、指定された日のコールログのリストを返す関数を作成する方法を見てきました。このデータをTableuのようなダッシュボードにプッシュすることで、コールトラフィックを分析することができます。私たちのダッシュボードは毎日のコール数しか表示しませんが、インバウンド/アウトバウンドコール数、1日あたりの平均コスト、平均通話時間などを表示するようにカスタマイズすることができます。