Voice Gateway からの発着信詳細記録レポート・イベント

IBM® Voice Gateway は、発着信詳細記録 (CDR) イベントを生成できます。このイベントには、単一の通話に関する要約情報が含まれます。 これらのイベントは、Voice Gateway からの HTTP POST 要求として、イベントを保管するSplunk HTTP Event Collector (HEC) または REST サーバーに統合しやすい形式で送信されます。 バージョン 1.0.0.5d 以降では、CDR イベントを直接 IBM Cloudant にパブリッシュするよう Voice Gateway を構成することもできます。

発着信詳細記録イベントをパブリッシュするための Voice Gateway の構成

  1. 例えば noSQL データベースなどに、イベントを保管できるよう Splunk HTTP Event Collector (HEC) または REST サーバーをセットアップします。 『CDR イベントを IBM Cloudant データベースにパブリッシュするための Voice Gateway の構成』を参照してください (このいずれかを使用してイベントを保管する場合)。
  2. Voice Gateway 構成で、REST サーバー URL および許可資格情報を指定し、発着信詳細記録 (CDR) イベント・インデックス値を設定することで、発着信詳細記録イベントを有効にします。

    • シングル・テナント環境: 構成に以下の環境変数を設定します。

      REPORTING_URL=http://myresteventserver.ibm.com/
      REPORTING_USERNAME=myRestAdmin
      REPORTING_PASSWORD=myRestTokenOrPassword
      REPORTING_CDR_EVENT_INDEX=cdr
      
    • マルチテナント JSON 構成: マルチテナント JSON 構成ファイルで、発着信詳細記録イベントを有効にする各テナントに、以下のプロパティーを含む reporting オブジェクトを構成します。 同じオブジェクト内で、transcription イベントや Watson Assistant turn イベントなどの他のタイプのイベントに対するインデックスを構成できます。

      ...
      "reporting": {
       "url": "http://myresteventserver.ibm.com/",
       "username": "myRestAdmin",
       "password": "myRestTokenOrPassword",
       "cdrEventInd": "cdr"
      }
      ...
      

    CDR イベント・インデックス値が、すべての発着信詳細記録イベントで index 値として含まれるため、それらのイベントを取り込む REST サーバーは、イベントのタイプを識別できます。 インデックス・フィールドは Splunk HEC には必須ですが、これらのイベントを処理するために独自の REST サーバーを作成するユーザーにも役立ちます。

CDR イベントを IBM Cloudant データベースにパブリッシュするための Voice Gateway の構成

データベースにパブリッシュするよう Voice Gateway を構成する前に、IBM® Cloudant® for IBM Cloud をセットアップしてください。

CDR イベントを IBM Cloudant データベースにパブリッシュするため、構成に以下の環境変数を設定します。 構成に IBM Cloudant 構成変数を追加することによって、IBM Cloudant および別のレポート・サービスの両方を同時に使用できます。 IBM Cloudant に対する認証を、REPORTING_CDR_CLOUDANT_APIKEY 変数を追加することによって API 鍵で行うように構成するか、または、REPORTING_CDR_CLOUDANT_USERNAMEREPORTING_CDR_CLOUDANT_PASSWORD を追加することによってユーザー名とパスワードで行うように構成することができます。

以下の例は、CDR イベントを IBM Cloudant にパブリッシュするための構成を示しています。

認証用の API 鍵の使用

IBM Cloudant 資格情報のユーザー名とパスワードの組み合わせを使用する代わりに、認証に API 鍵を使用することができます。 IBM Cloudant に対するサービス資格情報を検索または生成し、その後で、URL および API 鍵の値を Voice Gateway レポート・イベント構成にコピーできます。 API 鍵について詳しくは、IBM Cloudant: API keys を参照してください。

以下の API 鍵認証の例は Cloudant に対して機能します。 CouchDB への認証に API 鍵を使用することはできません。

CDR イベントを CouchDB にパブリッシュするための Voice Gateway の構成

CouchDB をセットアップするには、リポジトリーを複製し、Github にある指示に従います。 CouchDB を使用する場合は、認証のために API 鍵を使用することはできません。

CDR イベントを IBM Cloudant データベースにパブリッシュするため、構成に以下の環境変数を設定します。 構成に IBM Cloudant 構成変数を追加することによって、IBM Cloudant および別のレポート・サービスの両方を同時に使用できます。

以下の例は、CDR イベントを CouchDB にパブリッシュするための構成を示しています。

...
"reporting": {
  "convCloudant": {
    "url": "http://<svc-couchdb>:5984/",
    "username": "myCouchDBUsername",
    "password": "myCouchDBPassword",
    "dbName": "myCouchDB",
    "eventInd": "cdr"
  }
}
...

発着信詳細記録イベントのフォーマット

発着信詳細記録 (CDR) イベントには、単一の通話に関する要約情報が含まれます。 イベントのフォーマットは、Splunk HTTP Event Controller JSON フォーマットに基づきます。

{
"time": 1434567892,
"host": "vgw123.ibm.com",
"source": "18595552498",
"sourcetype": "e164",
"index": "cdr",
"event": {
  "version": "1.0",
  "sipCallID": "b742193386876548a69fe1420c33998b@0.0.0.0",
  "globalSessionID": "b742193386876548a69fe1420c33998b@0.0.0.0",
  "initTime": 1520877996309,
  "startTime": 1520877998461,
  "stopTime": 1520878020781,
  "setupTime": 2152,
  "callLength": 22320,
  "sipToURI": "sip:+18445555174@169.46.147.46",
  "sipFromURI": "sip:+18595553171@vgwdemo.pstn.twilio.com",
  "maxSTTTransaction": 1212,
  "endReason": "failed",
  "failureDetails": "details on why call failed",
  "failureOccurred": true,
  "echoDetected": false,
  "transferTarget": "sip or tel URI",
  "conversations": [
    {
      "id": "1233",
      ...
    }
  ],
  "warnings": [
    {
      ...
    }
   ],
  "rtpNetworkSummary": {
     ...
  }
}
}

イベント・メタデータ

すべてのレポート・イベントは、以下のメタデータから開始します。

表 1. イベント・メタデータのキー
キー 説明
time イベントの時刻。 デフォルト形式は、エポックタイム (形式 <sec>.<ms>) です。
host イベントを生成した Voice Gateway インスタンスのホスト名。
source イベントを生成した Voice Gateway テナントを表します。 通常、この値は、呼び出された電話番号に設定されます。
sourcetype ソース・タイプ。電話番号の場合は e164、Watson Assistant ワークスペースの場合は conversationID、SIP URI の場合は sipURI と定義されています。
index レポート・イベント・インデックスの構成環境変数で定義されたイベントのインデックス。
event CDR イベント、Watson Assistant turn イベント、または transcription イベント。

発着信詳細記録イベント・オブジェクト

発着信詳細記録イベントの event JSON オブジェクトには、以下のキーが含まれます。

表 2. 発着信詳細記録イベント・オブジェクト内のキー
キー 説明
version イベント・フォーマットのバージョン。
sipCallID その通話に関連した SIP INVITE からプルされた SIP コール ID。
globalSessionID このキーの値は、Voice Gateway の構成方法によって異なります。 デフォルトでは、この値は sipCallID の値と同一です。 CUSTOM_SIP_SESSION_HEADER 環境変数または customSIPSessionHeader JSON プロパティーが構成されている場合、これがその ID にマップされます。 セッションが SIPREC セッションの場合、このフィールドは SIPREC メタデータ内の gcid フィールドと同一です。 セッションが SIPREC セッションで、CUSTOM_SIPREC_SESSION_FIELD 環境変数または customSIPRECSessionField JSON プロパティーが構成されている場合、これがそのフィールドにマップされます。
customSIPInviteHeader カスタム SIP INVITE ヘッダーの値。 この値を設定するには、ヘッダー・フィールドが CUSTOM_SIP_INVITE_HEADER 環境変数で定義されている必要があり、また INVITE 要求に指定ヘッダーが含まれている必要があります。 バージョン 1.0.0.4c 以降。
customSIPInviteHeaders カスタム SIP INVITE ヘッダー群の値。 この値を設定するには、ヘッダー・フィールド群が CUSTOM_SIP_INVITE_HEADERS 環境変数で定義されている必要があり、INVITE 要求は指定されたヘッダー群を含んでいる必要があります。 バージョン 1.0.1 以降。
initTime 通話を開始するための初期 SIP INVITE 要求を受け取った時刻 (日付/時刻 UTC フォーマット)。 バージョン 1.0.0.5 以降。
startTime エポック後の通話の開始時刻 (ミリ秒)。
stopTime エポック後の通話の停止時刻 (ミリ秒)。
setupTime 通話のセットアップにかかった時間 (ミリ秒)。 具体的には、このキーは、最初の SIP INVITE 要求を受け取った時刻から最後の SIP ACK 要求を受け取った時刻までの時間を示します。
callLength 通話の長さ (ミリ秒)。
sipFromURI 最初の SIP INVITE From フィールドからの SIP URI。
sipToURI 最初の SIP INVITE To フィールドからの SIP URI。
endReason 会話が終了した理由。以下のいずれかです。
  • Watson Assistant から転送が開始された: convTransfer
  • Watson Assistant が通話を終了した: convHangup
  • 発信者がハングアップした: callerHangup
  • 通話が失敗した: failed
failureDetails 通話が切断される原因になった障害の詳細。 endReason キーが failed に設定されている場合にのみ含まれます。
failureOccurred 通話が継続、切断、または転送されたかどうかに関係なく、通話中にエラー、警告、またはその他の障害が発生したかどうかを示します。 値は true または false です。 バージョン 1.0.0.4 以降。
transferTarget 通話中転送の宛先に関連付けられている SIP URI または tel URI。 通話が転送されるか失敗した場合にのみ含まれます。
echoDetected 通話中にエコーが検出されたかどうかを示します。 値は true または false です。 バージョン 1.0.0.4c 以降。
numberOfBargeins 通話中に発生したすべてのバージインの数。
conversations 通話内で使用された会話の配列。 『Watson Assistant 詳細』を参照してください。 V1.0.0.1c 以降。
warnings 通話中にログに記録された特定警告の配列。 警告の詳細を参照してください。 V1.0.0.5 以降。
rtpNetworkSummary 通話からの RTP データ配信統計のサマリー。 RTCP が有効化されている場合に限り含まれます。 RTP ネットワーク・サマリーの詳細を参照してください。 V1.0.0.5 以降。
sttProvidersUsed 複数のサービス・プロバイダーに対して構成される場合、通話中に使用された Speech to Text サービス・プロバイダーを使用された順にリストした配列。 V1.0.0.6 以降。
conversationProvidersUsed 複数のサービス・プロバイダーに対して構成される場合、通話中に使用された Watson Assistant サービス・プロバイダーを使用された順にリストした配列。 V1.0.0.6 以降。
ttsProvidersUsed 複数のサービス・プロバイダーに対して構成される場合、通話中に使用された Text to Speech サービス・プロバイダーを使用された順にリストした配列。 Text to Speech キャッシュのみが使用された場合、このフィールドは空として返される場合があります。 V1.0.0.6 以降。
maxConvTransaction この通話に関連したすべての Watson Assistant 要求から計算された最大往復遅延 (ミリ秒)。
maxTTSTransaction テキスト発話が Text to Speech サービスに送信されてから Voice Gateway が合成音声の最初のパケットを受信するまでの最大時間 (ミリ秒単位)。 この通話に関連したすべての Text to Speech 要求から計算されます。
maxSTTTransaction ユーザーの音声で無音を検出してから、Speech to Text からの最終結果を受信するまでの最大待ち時間 (ミリ秒)。 この値は、この通話に関連するすべての Speech to Text 認識結果から計算されます。 バージョン 1.0.0.8 以降。
outboundcall 通話がアウトバウンド・コールであるかどうかを示します。 値は true または false です。 バージョン 1.0.2.0 以降。

Watson Assistant 詳細

conversations オブジェクトには、通話中に使用されたすべての Watson Assistant セッションが含まれます。

{
"time": 1434567892,
"host": "vgw123.ibm.com",
"source": "18885553333",
"sourcetype": "e164",
"index": "cdr",
"event": {
  "version": "1.0",
  "sipCallID": "b742193386876548a69fe1420c33998b@0.0.0.0",
  "globalSessionID": "b742193386876548a69fe1420c33998b@0.0.0.0",
  "initTime": 1520877996309,
  "startTime": 1520877998461,
  "stopTime": 1520878020781,
  "setupTime": 2152,
  "callLength": 22320,
  "sipToURI": "sip:+18445555174@169.46.147.46",
  "sipFromURI": "sip:+18595553171@vgwdemo.pstn.twilio.com",
  "numberOfBargeins": 0,
  "maxConvTransaction": 1447,
  "maxTTSTransaction": 616,
  "endReason": "failed",
  "failureDetails": "details on why call failed",
  "failureOccurred": true,
  "echoDetected": false,
  "transferTarget": "sip or tel URI",
  "customCDRData" :  {
    "key1": "value1",
    "key2": "value2"
  },
  "conversations": [
    {
      "id": "1233",
      ...
    }
  ],
  "warnings": [
    {
      ...
    }
   ],
  "rtpNetworkSummary": {
     ...
  }
}
}

通話で使用された各会話の JSON オブジェクトには、以下のキーが含まれています。

表 3. 会話の詳細のキー
キー 説明
id Watson Assistant ID。生成された会話 ID 番号です。
workspaceID 使用された Watson Assistant ダイアログの ワークスペース ID。
assistantID Watson Assistant ID。 アシスタント ID は Watson Assistant バージョン 2 API でのみ使用されます。 バージョン 1.0.1 以降。
startTime エポック後の会話の開始時刻 (ミリ秒)。
stopTime エポック後の会話の停止時刻 (ミリ秒)。
maxConvTransaction この会話に関連したすべての Watson Assistant 要求から計算された最大往復遅延 (ミリ秒)。
maxTTSTransaction テキスト発話が Text to Speech サービスに送信されてから Voice Gateway が合成音声の最初のパケットを受信するまでの最大時間 (ミリ秒単位)。 この会話に関連したすべての Text to Speech 要求から計算されます。
numberOfBargeins 会話中に発生したすべてのバージインの数。
numberOfTurns 会話中に行われた Watson Assistant トランザクションの総数。
制限: この値には最初の Watson Assistant ターンは含まれないため、合計数は実際の合計より 1 つ少ない数になります。
numberOfTTSTransactions Text to Speech トランザクションの総数。 バージョン 1.0.0.3 以降。
numberOfCachedTTSEntries Text to Speech のキャッシュから再生された発話の総数。 バージョン 1.0.0.3 以降。
lastIntent 会話中に処理された最後のインテント。
allIntents 会話中に処理されたすべての固有インテント・ストリングの配列。
customCDRData カスタム・キーおよびカスタム値のリスト。 バージョン 1.0.0.8 以降。

警告の詳細

warnings オブジェクトには、通話中にログに記録された警告が含まれます。これらの警告は、発行された順番にリストされます。 以下の条件の警告が含まれます。

"warnings": [
 {
   "timestamp": "2018-02-08T13:03:01Z",
   "message": "CWSMR0032W: A Watson Speech to Text final utterance has a confidence score of 0.1, which does not meet the confidence score threshold of 0.2. The utterance will be ignored.",
   "id": "CWSMR0032W"
 },
 {
   "timestamp": "2018-02-08T13:10:01Z",
    "message": "CWSMR0031W: The synthesis stream from the Watson Text To Speech service can't keep up with the playback rate to the caller, so audio might skip. transaction ID=a1b2c3d4e5",
    "id": "CWSMR0031W"
 }
]

各警告のオブジェクトには、以下のキーが含まれます。

表 4. ネットワーク警告詳細のキー
キー 説明
timestamp 警告が生成された日時。 バージョン 1.0.0.5 以降。
message ログに記録された警告メッセージのテキスト。 バージョン 1.0.0.5 以降。
id メッセージの固有 ID。 メッセージのリストについては、Voice Gateway システム・メッセージを参照してください。 バージョン 1.0.0.5 以降。

RTP ネットワーク・サマリーの詳細

RTCP が有効化されている場合、各 rtpNetworkSummary オブジェクト内の inboundStream オブジェクトでインバウンド・ストリームの統計が提供され、outboundStream オブジェクトでアウトバウンド・ストリームの統計が提供されます。

"rtpNetworkSummary": {
  "inboundStream": {
      "maxJitter": 5,
      "averageJitter": 1,
      "packetsLost": 0,
      "totalPackets": 1000,
      "canonicalName": "user@example.com",
      "toolName": "User SIP Phone"
   },
  "outboundStream": {
      "maxJitter": 5,
      "averageJitter": 1,
      "packetsLost": 0,
      "totalPackets": 2000,
      "canonicalName": "voice.gateway@127.0.0.1",
      "toolName": "IBM Voice Gateway/1.0.0.5"
   }
}

各ストリームのオブジェクトには、以下のキーが含まれます。

表 5. RTP ネットワーク・サマリー詳細のキー
キー 説明
maxJitter 通話中の最大ジッター。 バージョン 1.0.0.5 以降。
averageJitter 通話時間に対して計算される平均ジッター。 バージョン 1.0.0.5 以降。
packetsLost 通話中に失われたパケットの推定数。 バージョン 1.0.0.5 以降。
totalPackets 通話中に送信されたパケットの推定総数。 バージョン 1.0.0.5 以降。
canonicalName ストリームの送信側の固有 ID (通常は @ 形式)。 バージョン 1.0.0.5 以降。
toolName ストリームの発信元のアプリケーションまたはツールの名前。 Voice Gateway の場合、デフォルトは「IBM Voice Gateway/<バージョン>」です。 バージョン 1.0.0.5 以降。

発着信詳細記録イベントへのカスタム値の注入

vgwActAddCustomCDRData を Watson Assistant ダイアログまたは SOE に含めることにより、カスタム・データを発着信詳細記録に追加することができます。 通話中に発生しているさまざまなアクティビティーに関連したデータを記録できます。 これには、特定のタスクの完了を識別する方法が含まれます。

{
  "command": "vgwActAddCustomCDRData",
  "parameters": {
    "key1": "value1",
    "key2": "value2"
  }
}

CDR レポートを生成しているときに、カスタム・データが customCDRData フィールドに含まれます。 例えば、以下の CDR レポートでは、key1key2customCDRData フィールドに追加されます。

{
"time": 1434567892,
"host": "vgw123.ibm.com",
"source": "18881112222",
"sourcetype": "e164",
"index": "cdr",
"event": {
  ...
  "customCDRData" :  {
    "key1": "value1",
    "key2": "value2"
  },
  "conversations": [
    {
      "id": "1234",
      ...
    }
  ]
}
}

CDR データのマージ

通話中、vgwActAddCustomCDRData アクションが複数回アクティブにされると、データが customCDRData フィールドにマージされます。

最初の通話で、key1key2 の値が定義されます。

{
  "command": "vgwActAddCustomCDRData",
  "parameters": {
    "key1": "value1",
    "key2": "value2"
  }
}

2 番目の通話で、key1key3 の値が定義されます。

{
  "command": "vgwActAddCustomCDRData",
  "parameters": {
    "key1": "value11",
    "key3": "value3"
  }
}

以下のコード例は、これらの通話の後、カスタム CDR データが customCDRData フィールドでどのようにマージされるかを示しています。ここで、key1 の値 value11 は、2 番目の通話からのものです。

{
"time": 1434567892,
"host": "vgw123.ibm.com",
"source": "18595552498",
"sourcetype": "e164",
"index": "cdr",
"event": {
  ...
  "customCDRData" :  {
    "key1": "value11",
    "key2": "value2",
    "key3": "value3"
  },
  "conversations": [
    {
      "id": "1233",
      ...
    }
  ]
}
}

カスタム CDR データの削除

CDR カスタム・データを削除するために、SOE は、"" にキーを設定して vgwActAddCustomCDRData アクションを発行します。

以下の例は、key1 フィールドをカスタム CDR データから削除するために、key1 値をブランク "" で上書きすることを示しています。

{
  "command": "vgwActAddCustomCDRData",
  "parameters": {
    "key1": ""
  }
}