Amazon Connect コンタクト属性を使った条件分岐

2022.05.12

はじめに

弊社ブログで休業日やオペレーション時間の判定による条件分岐を紹介していますが、 コンタクト属性を使った条件分岐も可能です。Amazon Connectのコンタクト属性を使ったフローの条件分岐をやってみます。

コンタクト属性とは

まずはじめにコンタクト属性とは、問い合わせに関する一時的な情報を保存し、コンタクトフロー内で利用することができるキーと値のペアです。顧客の電話番号やキューメトリクス、AWSサービス(Amazon LexやAWS Lambda)の戻り値、ユーザー定義による任意の値などが設定できます。

やってみる

コンタクト属性のユースケースとして、コンタクトセンターの状況に応じてンタクトフロー内の処理を手動で切り替えたい場合、コンタクトフローのブロック配置を編集すると操作の手間や変更に伴うコンタクトフローのテストの手間が発生します。コンタクト属性の設定による分岐するフローを事前に作成しておくことでコンタクト属性値の変更だけで切り替えることができるコンタクトフローを作成して動作確認してみます。

コンタクトフロー図

↓は作成したコンタクトフローをエクスポート(json)したものです。お手元の環境で検証する場合にご利用ください。作業キューの設定ブロック、キューの転送ブロックは環境に合わせて設定してください。

cm-flow-branch
{
    "modules": [
        {
            "id": "b11f64f4-2603-42aa-acb8-7a879947f5ad",
            "type": "SetLoggingBehavior",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "ce8a7c05-cf45-421d-a265-731e66d49d67"
                }
            ],
            "parameters": [
                {
                    "name": "LoggingBehavior",
                    "value": "Enable"
                }
            ],
            "metadata": {
                "position": {
                    "x": 160,
                    "y": 18
                }
            }
        },
        {
            "id": "ce8a7c05-cf45-421d-a265-731e66d49d67",
            "type": "SetVoice",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "a7e1f222-4d1d-4bd7-9633-ab8417f710bc"
                }
            ],
            "parameters": [
                {
                    "name": "GlobalVoice",
                    "value": "Takumi"
                },
                {
                    "name": "GlobalEngine",
                    "value": "Neural"
                },
                {
                    "name": "SpeakingStyle",
                    "value": "None"
                }
            ],
            "metadata": {
                "position": {
                    "x": 160,
                    "y": 214
                },
                "overrideConsoleVoice": true,
                "defaultVoice": "None"
            }
        },
        {
            "id": "f41f8e1a-21ae-45ec-8877-d8c8201b4404",
            "type": "PlayPrompt",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "69c22b24-4b0d-4314-86c6-5732ea9e3c32"
                },
                {
                    "condition": "Error",
                    "transition": "a90b44ff-9f30-4b2b-af43-9e4396eb0d88"
                }
            ],
            "parameters": [
                {
                    "name": "Text",
                    "value": "お繋ぎします。",
                    "namespace": null
                },
                {
                    "name": "TextToSpeechType",
                    "value": "text"
                }
            ],
            "metadata": {
                "position": {
                    "x": 1123,
                    "y": 40
                },
                "useDynamic": false
            }
        },
        {
            "id": "69c22b24-4b0d-4314-86c6-5732ea9e3c32",
            "type": "Transfer",
            "branches": [
                {
                    "condition": "AtCapacity",
                    "transition": "a90b44ff-9f30-4b2b-af43-9e4396eb0d88"
                },
                {
                    "condition": "Error",
                    "transition": "a90b44ff-9f30-4b2b-af43-9e4396eb0d88"
                }
            ],
            "parameters": [],
            "metadata": {
                "position": {
                    "x": 1362,
                    "y": 43
                },
                "useDynamic": false,
                "queue": null
            },
            "target": "Queue"
        },
        {
            "id": "a7e1f222-4d1d-4bd7-9633-ab8417f710bc",
            "type": "SetQueue",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "8157f943-b09e-490b-b8cb-b98c00ea972a"
                },
                {
                    "condition": "Error",
                    "transition": "22efd44f-a436-4bef-a846-10d7335c4a19"
                }
            ],
            "parameters": [
                {
                    "name": "Queue",
                    "value": "",
                    "namespace": null,
                    "resourceName": ""
                }
            ],
            "metadata": {
                "position": {
                    "x": 157,
                    "y": 400
                },
                "useDynamic": false,
                "queue": {
                    "id": "",
                    "text": ""
                }
            }
        },
        {
            "id": "8157f943-b09e-490b-b8cb-b98c00ea972a",
            "type": "PlayPrompt",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "0efcc922-45b2-41e3-b73c-a3f51a0648cb"
                },
                {
                    "condition": "Error",
                    "transition": "22efd44f-a436-4bef-a846-10d7335c4a19"
                }
            ],
            "parameters": [
                {
                    "name": "Text",
                    "value": "お電話ありがとうございます。",
                    "namespace": null
                },
                {
                    "name": "TextToSpeechType",
                    "value": "text"
                }
            ],
            "metadata": {
                "position": {
                    "x": 401,
                    "y": 219
                },
                "useDynamic": false
            }
        },
        {
            "id": "0efcc922-45b2-41e3-b73c-a3f51a0648cb",
            "type": "SetAttributes",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "907129bd-67e1-4e1c-8cd5-0f809cfc625b"
                },
                {
                    "condition": "Error",
                    "transition": "22efd44f-a436-4bef-a846-10d7335c4a19"
                }
            ],
            "parameters": [
                {
                    "name": "Attribute",
                    "value": "0",
                    "key": "Callback",
                    "namespace": null
                }
            ],
            "metadata": {
                "position": {
                    "x": 642,
                    "y": 218
                },
                "dynamicParams": []
            }
        },
        {
            "id": "22efd44f-a436-4bef-a846-10d7335c4a19",
            "type": "Disconnect",
            "branches": [],
            "parameters": [],
            "metadata": {
                "position": {
                    "x": 883,
                    "y": 644
                }
            }
        },
        {
            "id": "907129bd-67e1-4e1c-8cd5-0f809cfc625b",
            "type": "CheckAttribute",
            "branches": [
                {
                    "condition": "Evaluate",
                    "conditionType": "Equals",
                    "conditionValue": "0",
                    "transition": "f41f8e1a-21ae-45ec-8877-d8c8201b4404"
                },
                {
                    "condition": "NoMatch",
                    "transition": "5999128f-11b1-49b4-9975-2a4a1afb07de"
                }
            ],
            "parameters": [
                {
                    "name": "Attribute",
                    "value": "Callback"
                },
                {
                    "name": "Namespace",
                    "value": "User Defined"
                }
            ],
            "metadata": {
                "position": {
                    "x": 881,
                    "y": 219
                },
                "conditionMetadata": [
                    {
                        "operator": {
                            "name": "等しい",
                            "value": "Equals",
                            "shortDisplay": "="
                        },
                        "value": "0",
                        "id": "a9794609-2df0-4551-b190-79c85d7b57e5"
                    }
                ]
            }
        },
        {
            "id": "c7574558-038b-495f-905a-2cf817dbeefa",
            "type": "CreateCallback",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "46d05458-f2da-4fa6-ac07-e2aa03e6fd0c"
                },
                {
                    "condition": "Error",
                    "transition": "46d05458-f2da-4fa6-ac07-e2aa03e6fd0c"
                }
            ],
            "parameters": [
                {
                    "name": "Queue",
                    "value": "",
                    "namespace": null,
                    "resourceName": ""
                },
                {
                    "name": "InitialDelaySeconds",
                    "value": 99
                },
                {
                    "name": "RetryDelaySeconds",
                    "value": 600
                },
                {
                    "name": "MaxRetryAttempts",
                    "value": 1
                }
            ],
            "metadata": {
                "position": {
                    "x": 1360,
                    "y": 445
                },
                "useDynamic": false,
                "queue": {
                    "id": "",
                    "text": ""
                }
            }
        },
        {
            "id": "5999128f-11b1-49b4-9975-2a4a1afb07de",
            "type": "PlayPrompt",
            "branches": [
                {
                    "condition": "Success",
                    "transition": "c7574558-038b-495f-905a-2cf817dbeefa"
                },
                {
                    "condition": "Error",
                    "transition": "46d05458-f2da-4fa6-ac07-e2aa03e6fd0c"
                }
            ],
            "parameters": [
                {
                    "name": "Text",
                    "value": "後ほどお電話差し上げます。",
                    "namespace": null
                },
                {
                    "name": "TextToSpeechType",
                    "value": "text"
                }
            ],
            "metadata": {
                "position": {
                    "x": 1122,
                    "y": 444
                },
                "useDynamic": false
            }
        },
        {
            "id": "46d05458-f2da-4fa6-ac07-e2aa03e6fd0c",
            "type": "Disconnect",
            "branches": [],
            "parameters": [],
            "metadata": {
                "position": {
                    "x": 1600,
                    "y": 638
                }
            }
        },
        {
            "id": "a90b44ff-9f30-4b2b-af43-9e4396eb0d88",
            "type": "Disconnect",
            "branches": [],
            "parameters": [],
            "metadata": {
                "position": {
                    "x": 1603,
                    "y": 224
                }
            }
        }
    ],
    "version": "1",
    "start": "b11f64f4-2603-42aa-acb8-7a879947f5ad",
    "metadata": {
        "entryPointPosition": {
            "x": 15,
            "y": 15
        },
        "snapToGrid": false,
        "name": "cm-flow-Branch",
        "description": null,
        "type": "contactFlow",
        "status": "published",
        "hash": "becd13de7310923e7cfbeff9008a6be3f5d146da46bd9c0e6f5b3bc8cb13509e"
    },
    "type": "contactFlow"
}

ポイントはコンタクトフロー図内の赤枠の部分です。コンタクト属性の設定 ブロックで設定したコンタクト属性を コンタクト属性の確認 ブロックで分岐するように設定します。

赤枠ありコンタクトフロー図

コンタクト属性の設定 ブロックでは、以下の通り設定します。

  • 宛先タイプ:ユーザー定義
  • 宛先属性:Callback ※ $. を除く任意の値でOK
  • テキストの使用 値:0 ※ $. を除く任意の値でOK

コンタクト属性の設定ブロック

次に、コンタクト属性の確認 ブロックでは、以下の通り設定します。

  • 確認する属性
    • 宛先タイプ:ユーザー定義
    • 属性:Callback
  • チェックする条件
    • 等しい
    • 0

コンタクト属性の確認

この状態でコンタクトフローに紐付けた電話番号に電話するとコンタクト属性の確認ブロックでは、属性値が等しくなる為、通常フローで処理されます。

通常フロー図

コンタクト属性値を替えてみます。 先程設定したコンタクト属性の設定 ブロックを以下の通り設定します。

  • 宛先タイプ:ユーザー定義
  • 宛先属性:Callback
  • テキストの使用 値:1

コンタクト属性値の変更

この状態で電話するとコンタクト属性の確認ブロックでは、属性値が等しくない為、一致なし に分岐されて処理されます。

切替フロー図

終わりに

今回は、ユーザー定義による任意の値且つ手動による分岐のフローを確認してみました。ご案内した切替手法以外にも、例えばキューの待ち人数(タイプ:キューメトリクス、属性:キューに保存されたコンタクト)をコンタクト属性に設定した動的な分岐も可能です。コンタクト属性を活用したより良いコンタクトフローを実装しましょう。