レガシーなテレフォニーシステムにおいて Data Dip を行なおうとすると、外部システムから取得した情報をUser-to-User Information(UUI) や SIP ヘッダーなどに格納する必要がありました。そして、これを実行するにはテレフォニーのプロトコルに関する高度な知識が要求されるため、事実上限られた技術者にしか扱えないものになっていました。 しかし、Amazon Connect ではコンタクト属性という、扱いやすい Key-Value ペアのデータとして外部システムから取得した情報をコンタクトに付加することができます。これを実行するために、テレフォニーに関する特殊な知識は必要ありません。つまり、Amazon Connect では Data Dip を活用した高度なルーティングを容易に実現することが可能となります。
Amazon Connect では、顧客とのインタラクション(電話やチャットなど)をコンタクトと呼びます。そして、コンタクト属性とはそれぞれのコンタクトが持つ固有のデータです。コンタクト属性は例えば以下のようなデータを持つことができます。
key | value |
---|---|
Customer Number | 顧客の電話番号 |
Channel | VOICE or CHAT or TASK |
firstname | 陽一郎 |
lastname | 坂田 |
membershipLevel | VIP |
コンタクト属性にはいくつかの種類があります。 システム属性と JSON Path の一覧はこちらです。
これは Amazon Connect において事前定義されているコンタクト属性です。このうちの多くは、Amazon Connect が各コンタクトにおいてデフォルトで値をセットします。また、これらの属性の大部分は参照専用ですが、一部は値をセットすることが可能です。
エージェントのユーザー名やエージェント ARN に関するコンタクト属性です。エージェント属性は次のタイプの問い合わせフローで利用可能です。
以下のタイプの問い合わせフローで使うことはできません。
キューに関する属性です(待ち呼の数や受付可のエージェントの数)。 ”Data Dip” に使うことはあまりないかもしれませんが、コンタクトを適切にルーティングする際に参照すべき属性です(例えば、待ち呼数が一定以上であればコールバックをご案内する、など)。
テレフォニーキャリアから取得できる、あるいは関連するメタデータです。国や番号によって、取得できるメタデータは異なります。
Kinesis Video Streams(KVS) を使ったライブメディアストリーミングに関する属性です。
Amazon Lex Bot に関する属性です。
問い合わせフローから呼び出した Lambda 関数が返す Key-Value ペアです。Amazon Connect の問い合わせフローから外部システムを参照するには Lambda 関数を介する必要があるため、この Lambda 属性は Data Dip を行う上での要点です。 Lambda コンタクト属性は、問い合わせフローの中では外部属性として参照します。JSONPath で外部属性を参照する場合、以下のように記述します。
$.External.attributeName
ここで、attributeName は呼び出した Lambda 関数が返す Key-Value ペアの Key 名です。例えば、顧客データベースを参照する Lambda 関数が顧客の名前を custName という Key 名で返す時、これをプロンプトの再生ブロックを使って読み上げる場合は $.External.custName
として参照します。
外部属性は最後に実行した Lambda 関数からの戻り値を格納していることに注意してください。つまり、問い合わせフローの中で複数のLambda 関数を実行し、その戻り値を永続的に活用する場合、”Lambda 関数を呼び出す”ブロックの直後に外部属性に格納された戻り値をユーザー定義属性に格納しておく必要があります。 また、外部属性はCTR(コンタクト追跡レコード)には記録されないことにも注意してください。CTR に戻り値を記録して後で活用するためにはやはり、ユーザー定義属性に値を格納しておく必要があります。
Amazon Connect において、皆さんが任意で定義できる Key-Value ペアです。ユーザー定義属性を使うためには”コンタクト属性の定義”ブロックを利用します。このブロックを使って、上記のように Lambda 関数からの戻り値(外部属性)を任意の名前のユーザー定義属性に格納することができます。また、このブロックの中で任意の文字列をユーザー定義属性にセットすることもできます。セットされたユーザー定義属性は問い合わせフローの中で任意のタイミングで参照することが可能です。また、エージェント着信時に、Streams API を介して参照することもできます。これによって、以下のようなことを実現することができます。
また、ユーザー定義属性は CTR に記録されるので、事後の分析などに活用することもできます(前述の経路分析など)。
Apple BusinessChat 連携を行う場合に使える属性です。
Amazon Connect の Customer Profile を使う場合に利用する属性です。
“Lambda 関数を呼び出す”ブロックで Lambda 関数から返された戻り値を参照するには、上述のように外部属性( $.External.attributeName )を使います。では、Lambda 関数の中で Amazon Connect が持っているコンタクト属性を参照するには、つまり顧客の電話番号や顧客の入力値を Lambda 関数の中から参照するにはどうすればよいでしょうか?
問い合わせフローの中でそれぞれのコンタクトに紐づけられたコンタクト属性は、以下のようなJSONフォーマットのデータとして呼び出された Lambda 関数に渡されます。
{
"Name": "ContactFlowEvent",
"Details": {
"ContactData": {
"Attributes": {},
"Channel": "VOICE",
"ContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe",
"CustomerEndpoint": {
"Address": "+11234567890",
"Type": "TELEPHONE_NUMBER"
},
"InitialContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe",
"InitiationMethod": "API",
"InstanceARN": "arn:aws:connect:us-east-1:123456789012:instance/9308c2a1-9bc6-4cea-8290-6c0b4a6d38fa",
"MediaStreams": {
"Customer": {
"Audio": {
"StartFragmentNumber": "91343852333181432392682062622220590765191907586",
"StartTimestamp": "1565781909613",
"StreamARN": "arn:aws:kinesisvideo:us-east-1:123456789012:stream/connect-contact-a3d73b84-ce0e-479a-a9dc-5637c9d30ac9/1565272947806"
}
}
},
"PreviousContactId": "5ca32fbd-8f92-46af-92a5-6b0f970f0efe",
"Queue": null,
"SystemEndpoint": {
"Address": "+11234567890",
"Type": "TELEPHONE_NUMBER"
}
},
"Parameters": {}
}
}
ここで、"Attributes": {}
には”コンタクト属性の設定”ブロックでセットしたユーザー定義属性が格納されます。ユーザー定義属性が何もセットされていない場合、ここはブランクになります。ユーザー定義属性がある場合、例えば以下のようになります。
{
"Details": {
"ContactData": {
"Attributes": {
"name": "Yoichiro Sakata"
},
"Channel": "VOICE",
"ContactId": "d3707ce6-7079-458c-8568-ea2bd9e4464f",
"CustomerEndpoint": {
"Address": "+819011111111",
"Type": "TELEPHONE_NUMBER"
},
"CustomerId": null,
"Description": null,
"InitialContactId": "d3707ce6-7079-458c-8568-ea2bd9e4464f",
"InitiationMethod": "INBOUND",
"InstanceARN": "arn:aws:connect:ap-northeast-1:199563261989:instance/ed34fc41-e0d1-4363-946b-9b5d61fda7f6",
"LanguageCode": "en-US",
"MediaStreams": {
"Customer": {
"Audio": null
}
},
"PreviousContactId": "d3707ce6-7079-458c-8568-ea2bd9e4464f",
"Queue": null,
"References": {},
"SystemEndpoint": {
"Address": "+81120104079",
"Type": "TELEPHONE_NUMBER"
}
},
"Parameters": {
"zipcode": "1000001"
}
},
"Name": "ContactFlowEvent"
}
ここで、"name": "Yoichiro Sakata"
は”コンタクト属性の設定”ブロックで以下のようにセットされたユーザー定義属性です。
また、”Lambda 関数を呼び出す”ブロックで引数をセットすることも可能です。
ここでセットした引数は"Parameters": {}
に格納されます。
このようにして JSON フォーマットのデータとして渡されたコンタクト属性は、以下のように Lambda 関数内で参照することができます(以下のコード例は Node.JS の場合です)。
var zipcode = event['Details']['Parameters']['zipcode'];
Amazon Connect Administrator Guide にはここで解説した内容も含め、Amazon Connect に関する様々な解説やベストプラクティスが紹介されています。内容も随時更新されていますので、定期的に確認することをお勧めします。
次のセクションでは、いよいよ Data Dip に関するハンズオンを実施します。ここで学習した内容を踏まえて、動作を確認していきましょう。