3-2.コンタクト属性

レガシーなテレフォニーシステムにおいて 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

コンタクト属性の利用例

  • “顧客の電話番号”を元に顧客データベースを検索し、得られた情報(firstname, lastname, membershipLevel など)をコンタクト属性に追加する
    • コンタクト属性”firstname, lastname” をプロンプト内で再生する(名前の読み上げ)
    • コンタクト属性”membershipLevel”に応じてコンタクトのプライオリティを設定する
    • 優先ルーティング
    • 迷惑電話おことわり
  • 通話終了時に、コンタクト属性に agent 名を追加し、Post Call Survey に活用する
  • 問い合わせフローの中の各分岐点でフラグやタイムスタンプをコンタクト属性に追加する
    • 顧客が IVR のどの段階で離脱したのか、各段階にどれくらいの時間を費やしたのかを分析できる(経路分析)

コンタクト属性の種類

コンタクト属性にはいくつかの種類があります。 システム属性と JSON Path の一覧はこちらです。

システム属性

これは Amazon Connect において事前定義されているコンタクト属性です。このうちの多くは、Amazon Connect が各コンタクトにおいてデフォルトで値をセットします。また、これらの属性の大部分は参照専用ですが、一部は値をセットすることが可能です。

エージェント属性

エージェントのユーザー名やエージェント ARN に関するコンタクト属性です。エージェント属性は次のタイプの問い合わせフローで利用可能です。

  • Agent whisper
  • Customer whisper
  • Agent hold
  • Customer hold
  • Outbound whisper
  • Transfer to agent

以下のタイプの問い合わせフローで使うことはできません。

  • Customer queue
  • Transfer to queue
  • Inbound contact flow

キュー属性

キューに関する属性です(待ち呼の数や受付可のエージェントの数)。 ”Data Dip” に使うことはあまりないかもしれませんが、コンタクトを適切にルーティングする際に参照すべき属性です(例えば、待ち呼数が一定以上であればコールバックをご案内する、など)。

テレフォニーコールメタデータ属性

テレフォニーキャリアから取得できる、あるいは関連するメタデータです。国や番号によって、取得できるメタデータは異なります。

メディアストリーム属性

Kinesis Video Streams(KVS) を使ったライブメディアストリーミングに関する属性です。

Amazon Lex のコンタクト属性

Amazon Lex Bot に関する属性です。

Lambda コンタクト属性

問い合わせフローから呼び出した 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 を介して参照することもできます。これによって、以下のようなことを実現することができます。

  • カスタム CCP 上に顧客データベースから取得した顧客名や会員クラスを表示する
  • バンキング用の IVR などで本人認証した結果(成功/失敗)をカスタム CCP 上に表示する

また、ユーザー定義属性は CTR に記録されるので、事後の分析などに活用することもできます(前述の経路分析など)。

Apple BusinessChat 属性

Apple BusinessChat 連携を行う場合に使える属性です。

Customer Profile 属性

Amazon Connect の Customer Profile を使う場合に利用する属性です。

Lambda 関数の中でコンタクト属性を取得する方法

“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 関数を呼び出す”ブロックで引数をセットすることも可能です。 Invoke Lambda の引数

ここでセットした引数は"Parameters": {}に格納されます。

このようにして JSON フォーマットのデータとして渡されたコンタクト属性は、以下のように Lambda 関数内で参照することができます(以下のコード例は Node.JS の場合です)。

var zipcode = event['Details']['Parameters']['zipcode'];


Amazon Connect Administrator Guide にはここで解説した内容も含め、Amazon Connect に関する様々な解説やベストプラクティスが紹介されています。内容も随時更新されていますので、定期的に確認することをお勧めします。

次のセクションでは、いよいよ Data Dip に関するハンズオンを実施します。ここで学習した内容を踏まえて、動作を確認していきましょう。