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 の構成
- CDR イベントを IBM Cloudant データベースにパブリッシュするための Voice Gateway の構成
- CDR イベントを CouchDB にパブリッシュするための Voice Gateway の構成
- 発着信詳細記録イベントのフォーマット
- 発着信詳細記録イベントへのカスタム値の注入
発着信詳細記録イベントをパブリッシュするための Voice Gateway の構成
- 例えば noSQL データベースなどに、イベントを保管できるよう Splunk HTTP Event Collector (HEC) または REST サーバーをセットアップします。 『CDR イベントを IBM Cloudant データベースにパブリッシュするための Voice Gateway の構成』を参照してください (このいずれかを使用してイベントを保管する場合)。
-
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_USERNAME
と REPORTING_CDR_CLOUDANT_PASSWORD
を追加することによってユーザー名とパスワードで行うように構成することができます。
以下の例は、CDR イベントを IBM Cloudant にパブリッシュするための構成を示しています。
-
シングル・テナント環境: 構成に以下の環境変数を設定します。
REPORTING_CDR_CLOUDANT_URL =http://mycdrcloudant.ibm.com/ REPORTING_CDR_CLOUDANT_APIKEY=a1b2c3d3fgh1jk1mn0 REPORTING_CDR_CLOUDANT_USERNAME=myCloudantUsername REPORTING_CDR_CLOUDANT_PASSWORD=myCloudantPassword REPORTING_CDR_CLOUDANT_DB_NAME=myCloudantDB REPORTING_CDR_CLOUDANT_EVENT_INDEX=cdr
IBM Cloudant に対して、デフォルト以外のアカウント構成を使用する場合、追加の環境変数の組み込みが必要になる場合があります。 『レポート・イベント構成』で
REPORTING_CDR_CLOUDANT_URL
およびREPORTING_CDR_CLOUDANT_ACCOUNT
を参照してください。 -
マルチテナント JSON 構成の使用: マルチテナント JSON 構成ファイルで、発着信詳細記録イベントを有効にする各テナントに、以下のプロパティーを含む
reporting
オブジェクトを構成します。 IBM Cloudant に対して、デフォルト以外のアカウント構成を使用する場合、追加の環境変数の組み込みが必要になる場合があります。 『reporting
オブジェクトのプロパティー』でcdrCloudant
を参照してください。... "reporting": { "cdrCloudant": { "url": "http://mycdrcloudant.ibm.com/", "username": "myCloudantUsername", "password": "myCloudantPassword", "apiKey": "myApiKey", "dbName": "myCloudantDB", "eventInd": "cdr" } } ...
認証用の API 鍵の使用
IBM Cloudant 資格情報のユーザー名とパスワードの組み合わせを使用する代わりに、認証に API 鍵を使用することができます。 IBM Cloudant に対するサービス資格情報を検索または生成し、その後で、URL および API 鍵の値を Voice Gateway レポート・イベント構成にコピーできます。 API 鍵について詳しくは、IBM Cloudant: API keys を参照してください。
以下の API 鍵認証の例は Cloudant に対して機能します。 CouchDB への認証に API 鍵を使用することはできません。
-
シングル・テナント環境: 構成に以下の環境変数を設定します。
REPORTING_CDR_CLOUDANT_URL=http://mycdrcloudant.ibm.com/ REPORTING_CDR_CLOUDANT_APIKEY=a1b2c3d3fgh1jk1mn0 REPORTING_CDR_CLOUDANT_DB_NAME=myCloudantDB REPORTING_CDR_CLOUDANT_EVENT_INDEX=cdr
-
マルチテナント JSON 構成:
username
とpassword
の代わりに、url
とapikey
の構成変数を構成する必要があります。... "reporting": { "cdrCloudant": { "url": "http://mycdrcloudant.ibm.com/", "apikey": "a1b2c3d3fgh1jk1mn0", "dbName": "myCloudantDB", "eventInd": "cdr" } } ...
CDR イベントを CouchDB にパブリッシュするための Voice Gateway の構成
CouchDB をセットアップするには、リポジトリーを複製し、Github にある指示に従います。 CouchDB を使用する場合は、認証のために API 鍵を使用することはできません。
CDR イベントを IBM Cloudant データベースにパブリッシュするため、構成に以下の環境変数を設定します。 構成に IBM Cloudant 構成変数を追加することによって、IBM Cloudant および別のレポート・サービスの両方を同時に使用できます。
以下の例は、CDR イベントを CouchDB にパブリッシュするための構成を示しています。
-
シングル・テナント環境: 構成に以下の環境変数を設定します。
REPORTING_CDR_CLOUDANT_URL="http://<svc-couchdb>:5984/" REPORTING_CDR_CLOUDANT_USERNAME=myCouchDBUsername REPORTING_CDR_CLOUDANT_PASSWORD=myCouchDBPassword REPORTING_CDR_CLOUDANT_DB_NAME=myCouchDB REPORTING_CDR_CLOUDANT_EVENT_INDEX=cdr
-
マルチテナント JSON 構成の使用: マルチテナント JSON 構成ファイルで、発着信詳細記録イベントを有効にする各テナントに、以下のプロパティーを含む
reporting
オブジェクトを構成します。 IBM Cloudant に対して、デフォルト以外のアカウント構成を使用する場合、追加の環境変数の組み込みが必要になる場合があります。 『reporting
オブジェクトのプロパティー』でcdrCloudant
を参照してください。
...
"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": {
...
}
}
}
イベント・メタデータ
すべてのレポート・イベントは、以下のメタデータから開始します。
キー | 説明 |
---|---|
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 オブジェクトには、以下のキーが含まれます。
キー | 説明 |
---|---|
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 |
会話が終了した理由。以下のいずれかです。
|
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 オブジェクトには、以下のキーが含まれています。
キー | 説明 |
---|---|
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
オブジェクトには、通話中にログに記録された警告が含まれます。これらの警告は、発行された順番にリストされます。 以下の条件の警告が含まれます。
- 発話が信頼度スコアのしきい値によって除外されたときのメッセージ。
- Text to Speech のアンダーフロー。これは、テキストから音声への合成が Voice Gateway のストリーミング速度に追いつかず、音声がスキップされる場合があるときに発生します。
- 高いパケット損失率、高い平均ジッターなど、RTP ネットワーク警告 (RTCP が有効化されている場合)。
"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"
}
]
各警告のオブジェクトには、以下のキーが含まれます。
キー | 説明 |
---|---|
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"
}
}
各ストリームのオブジェクトには、以下のキーが含まれます。
キー | 説明 |
---|---|
maxJitter |
通話中の最大ジッター。 バージョン 1.0.0.5 以降。 |
averageJitter |
通話時間に対して計算される平均ジッター。 バージョン 1.0.0.5 以降。 |
packetsLost |
通話中に失われたパケットの推定数。 バージョン 1.0.0.5 以降。 |
totalPackets |
通話中に送信されたパケットの推定総数。 バージョン 1.0.0.5 以降。 |
canonicalName |
ストリームの送信側の固有 ID (通常は |
toolName |
ストリームの発信元のアプリケーションまたはツールの名前。 Voice Gateway の場合、デフォルトは「IBM Voice Gateway/<バージョン>」です。 バージョン 1.0.0.5 以降。 |
発着信詳細記録イベントへのカスタム値の注入
vgwActAddCustomCDRData
を Watson Assistant ダイアログまたは SOE に含めることにより、カスタム・データを発着信詳細記録に追加することができます。 通話中に発生しているさまざまなアクティビティーに関連したデータを記録できます。 これには、特定のタスクの完了を識別する方法が含まれます。
{
"command": "vgwActAddCustomCDRData",
"parameters": {
"key1": "value1",
"key2": "value2"
}
}
CDR レポートを生成しているときに、カスタム・データが customCDRData
フィールドに含まれます。 例えば、以下の CDR レポートでは、key1
と key2
が customCDRData
フィールドに追加されます。
{
"time": 1434567892,
"host": "vgw123.ibm.com",
"source": "18881112222",
"sourcetype": "e164",
"index": "cdr",
"event": {
...
"customCDRData" : {
"key1": "value1",
"key2": "value2"
},
"conversations": [
{
"id": "1234",
...
}
]
}
}
CDR データのマージ
通話中、vgwActAddCustomCDRData
アクションが複数回アクティブにされると、データが customCDRData
フィールドにマージされます。
最初の通話で、key1
と key2
の値が定義されます。
{
"command": "vgwActAddCustomCDRData",
"parameters": {
"key1": "value1",
"key2": "value2"
}
}
2 番目の通話で、key1
と key3
の値が定義されます。
{
"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": ""
}
}