Amazon Connect 問い合わせフローでShopifyから設定したプロファイル情報を参照する

2021.12.30

いわさです。

先日、Amazon ConnectとShopifyの顧客情報をCustomer Profilesを使うことで連携することが出来ました。

Connectの問い合わせフローではCustomer Profilesの一部を参照することが出来るようなので、Shopifyから連携した情報を使ってみました。

Shopifyで登録した顧客情報

前回の記事相当の連携設定が既に済んでいる状態を前提にこの記事は確認をしています。
Shopifyに顧客情報を登録します。

Connectのエージェントアプリケーションで確認してみると、登録した電話番号・メールアドレス・住所情報などが自動で連携されていますね。
やはり便利です。

本日はこの情報を問い合せフローでも利用してみます。

問い合わせフロー

統合 -> Customer Profiles ブロックを使って顧客プロファイルを取得することが出来ます。

Eメールアドレスか電話番号のどちらかをキーに顧客プロファイルとの紐付けを行う必要があります。
まずは試しに手動でEメールアドレスを指定しました。
実際には着信電話番号で入力するケースが多いのかなと想像していますが。

問い合わせフローを構築します。
今回はデバッグで細かい挙動を確認したかったので、SINさんの以下の記事を参考にさせて頂き、フローログを有効化しています。

ログを確認すると以下のようにResultDataProfileIdが設定されています。

{
    "ContactId": "1e217ae2-a1f3-43bf-acce-53460354d094",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "GetCustomerProfile",
    "Timestamp": "2021-12-29T09:09:16.888Z",
    "ResultData": {
        "ProfileId": "dbf629b59a40434bb36e648d8aea49fe"
    },
    "Parameters": {
        "ProfileRequestData": "EmailAddress=iwasa.takahito+shopify2@example.com",
        "ProfileResponseData": [
            "FirstName=true",
            "LastName=true"
        ]
    }
}

このProfileIdを元に顧客プロファイルを検索してみましょう。

[cloudshell-user@ip-10-0-24-196 ~]$ aws customer-profiles search-profiles --domain-name amazon-connect-iwasa --key-name _profileId --values dbf629b59a40434bb36e648d8aea49fe
{
    "Items": [
        {
            "ProfileId": "dbf629b59a40434bb36e648d8aea49fe",
            "AdditionalInformation": "メモ1",
            "FirstName": "hoge",
            "LastName": "iwasa",
            "PhoneNumber": "+8150xxxxxxx1",
            "EmailAddress": "iwasa.takahito+shopify2@example.com",
            "Address": {
                "Address1": "北区 北24条西 1",
                "City": "札幌市",
                "Province": "Hokkaidō",
                "Country": "Japan",
                "PostalCode": "001-0000"
            },
            "Attributes": {
                "ShopifyCustomerId": "5651886800943"
            }
        }
    ]
}

Shopifyで登録した顧客プロファイルですね。良さそう。

ちなみに、検索キーが不正だったり、一致しなかった場合はエラーとなり、当然顧客プロファイルは取得出来ません。
以下は失敗時のイベントログです。

{
    "Results": "Exception Was Thrown While Search Profile",
    "ContactId": "9781c589-e5de-4939-b972-761325292e0e",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "GetCustomerProfile",
    "Timestamp": "2021-12-29T08:58:31.391Z",
    "Parameters": {
        "ProfileRequestData": "PhoneNumber=",
        "ProfileResponseData": [
            "FirstName=true",
            "LastName=true"
        ]
    }
}

取得した顧客プロファイルを使ってみる

取得してどうするんだ?というところですが、後続のブロックで使用出来るようになります。
以下のように「コンタクト属性を確認する」ブロックでCustomerを指定することが出来るので試しに都道府県がHokkaidōかどうかを判定してみましょう。

実行し、ログを確認します。

{
    "Results": "false",
    "ContactId": "04595b56-ae75-4b95-88c3-9696dc193968",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "CheckAttribute",
    "Timestamp": "2021-12-29T09:24:50.099Z",
    "Parameters": {
        "Value": "",
        "SecondValue": "Hokkaidō",
        "ComparisonMethod": "Equals"
    }
}

失敗していますね! 比較対象の値が取得出来ていないですが、先程のCustomer Profilesブロックのレスポンスフィールドで取得するフィールドを指定する必要があるようです。

{
    "ContactId": "04595b56-ae75-4b95-88c3-9696dc193968",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "GetCustomerProfile",
    "Timestamp": "2021-12-29T09:24:49.640Z",
    "ResultData": {
        "ProfileId": "dbf629b59a40434bb36e648d8aea49fe"
    },
    "Parameters": {
        "ProfileRequestData": "EmailAddress=iwasa.takahito+shopify2@example.com",
        "ProfileResponseData": [
            "FirstName=true",
            "LastName=true"
        ]
    }
}

姓と名のみ取得していましたね。
都道府県も含めてみましょう。

{
    "ContactId": "a11f2cff-3682-4293-9900-a146b4c22ba2",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "GetCustomerProfile",
    "Timestamp": "2021-12-29T09:28:44.575Z",
    "ResultData": {
        "ProfileId": "dbf629b59a40434bb36e648d8aea49fe"
    },
    "Parameters": {
        "ProfileRequestData": "EmailAddress=iwasa.takahito+shopify2@example.com",
        "ProfileResponseData": [
            "FirstName=true",
            "LastName=true",
            "EmailAddress=true",
            "PhoneNumber=true",
            "AccountNumber=true",
            "Address1=true",
            "Address2=true",
            "Address3=true",
            "Address4=true",
            "City=true",
            "Country=true",
            "County=true",
            "PostalCode=true",
            "Province=true",
            "State=true"
        ]
    }
}

レスポンスフィールドを追加した状態でコンタクト情報をもう一度確認してみましょう。

{
    "Results": "true",
    "ContactId": "a11f2cff-3682-4293-9900-a146b4c22ba2",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/3616090c-26fa-404e-acbd-d1346c4c9e54/contact-flow/3c2e5314-72dd-4a82-abed-7406dc935b37",
    "ContactFlowName": "HogeFlow",
    "ContactFlowModuleType": "CheckAttribute",
    "Timestamp": "2021-12-29T09:28:44.946Z",
    "Parameters": {
        "Value": "Hokkaidō",
        "SecondValue": "Hokkaidō",
        "ComparisonMethod": "Equals"
    }
}

取得出来るようになりました!
結果もtrueになっていますね。

当然ですが、コンタクト属性を確認する前に取得ブロックが存在しない以下のような構成の場合だと、顧客プロファイルへのアクセスは出来ませんでした。

さいごに

本日はConnectの問い合わせフロー内で、Shopifyから連携した顧客プロファイルを参照してみました。
取得出来る情報は基本情報になりますが、国や住所などでパーソナライズされたキューへ転送するなどが考えられます。
基本情報以外の属性にも簡単にアクセス出来ると、もっと対応レベル毎のキューに転送先を分けるなど様々な使い方が考えられそうですね。