[Amazon Connect] 問い合わせフローの中でLambda関数を実行する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

Amazon Connectでは、問い合わせフローの中でAWS Lambda(以下Lambda)関数を実行することができます。これによって、Amazon Connectでは、他のAWSサービスや外部サービスとの連携が可能になっています。

今回は、このLambda関数の実行要領について確認してみました。

2 問い合わせフローからLambda関数を呼び出す手順

問い合わせフローからLambda関数を呼び出す手順は、以下のとおりです。

  • トリガーの定義
  • 「AWS Lambda関数を呼び出す」ブロックの設定
  • Lambdaでのビジネスロジック作成
  • 「問い合わせ属性を確認する」ブロックによるフローの分岐(戻り値を使用する場合)

(1) トリガーの定義

Amazon ConnectからLambdaを呼び出すには、トリガー(パーミッション)を追加する必要があります。 残念ながら、現在(2018年6月時点)、他のAWSサービスのようにAWSコンソールのDesignerでは、トリガーの追加に、Amazon Connectが無いため、ここからGUIで追加することはできません。

AWS CLIでトリガー(パーミッション)を追加するコマンドは以下のとおりです。

$ aws lambda add-permission --function-name function:FUNCTION_NAME \
 --statement-id 1 --principal connect.amazonaws.com  \
 --action lambda:InvokeFunction --source-account ACCOUNT \
 --source-arn CONNECT_ARN 
  • CONNECT_ARN: Amazon Connect インスタンスのarn
  • FUNCTION_NAME: Lambdaの関数名
  • ACCOUNT: Lambda関数の AWS アカウントID

実際に追加しているようすです。Lambdaファンクションの名前は、ConnectToLambdaSampleで、シドニーで作業しています。(一部のマスクや改行など編集しています)

$ aws lambda add-permission --function-name function:ConnectToLambdaSample
 --statement-id 1 --principal connect.amazonaws.com  
 --action lambda:InvokeFunction --source-account xxxxxxxxxxxx 
 --source-arn arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx --region ap-southeast-2
{
    "Statement": "{
        \"Sid\" : \"1\",
        \"Effect\" : \"Allow\",
        \"Principal\" : {
           \"Service\" : \"connect.amazonaws.com\"
        },
        \"Action\" : \"lambda : InvokeFunction\",
        \"Resource\" : \"arn : aws : lambda : ap-southeast-2 : xxxxxxxxxxxx : function : ConnectToLambdaSample\",
        \"Condition\" : {
            \"StringEquals\" : {
                \"AWS : SourceAccount\" : \"xxxxxxxxxxxx\"
            },
        \"ArnLike\" : {
            \"AWS : SourceArn\" : \"arn : aws : connect : ap-southeast-2 : xxxxxxxxxxxx : instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx\"
       }
     }
   }"
}

(2) 「AWS Lambda関数を呼び出す」ブロックの設定

問い合わせフローでは、AWS Lambda関数を呼び出すブロックを追加します。

オプション設定の関数のARNで、呼び出すLambda関数のarnを設定します。

(3) Lambdaでのビジネスロジック作成

Lambda関数では、問い合わせフローから送られてきたJSONを解析し、ビジネスロジックを作成します。

問い合わせフローから送られてくるJSONは、次のような内容になっています。

{
    "Details": {
        "ContactData": {
            "Attributes": {},
            "Channel": "VOICE",
            "ContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "CustomerEndpoint": {
                "Address": "+819012345678",
                "Type": "TELEPHONE_NUMBER"
            },
            "InitialContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "InitiationMethod": "INBOUND",
            "InstanceARN": "arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx",
            "PreviousContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "Queue": null,
            "SystemEndpoint": {
                "Address": "+819012345678",
                "Type": "TELEPHONE_NUMBER"
            }
        },
        "Parameters": {}
    },
    "Name": "ContactFlowEvent"
}
  • ContactData: 問い合わせごとにAmazon Connectから常に渡されるデータ(一部はオプション)
  • Attributes: 問い合わせフローで「連絡先属性の設定」ブロックなどで設定された値(保存された属性がない場合、このマップは空白になることがあります)
  • Parameters: 「AWS Lambda関数を呼び出す」で定義されたパラメーター

逆にLambdaからは、{string:string}形式のJSONを返すことができます。

下記のコードでは、{"Name":"Taro"} を返しています。

(4) 「問い合わせ属性を確認する」ブロックによるフローの分岐(戻り値を使用する場合)

Lambdaから返された値で、問い合わせフローを分岐するには、問い合わせ属性を確認するブロックを使用します。

問い合わせ属性を確認するブロックのオプションでは、Lambdaから返された値の比較判断が設定できます。

3 設定してみた

下記のような問い合わせフローを設定してみました。

Lambdaの戻り値に応じて分岐した後のプロンプトは、下記のように設定されています。

これによって、顧客の電話口には、Lambdaの戻り値に応じて、「Taroが返されました」若しくは、「Taro以外が返されました」と流れます。

4 最後に

今回は、問い合わせフローからのLambda関数の呼び出しを確認してみました。ロジックを組み込むことで一気にフローの自由度が広がります。また、Lambdaで外部のサービスとの連携が自由にできます。

いろいろ試してみたいと思います。

5 参考リンク


Amazon Connect 簡単に使えるクラウド型コンタクトセンター
Amazon Connect Administrator Guide
Amazon Connectのデータストリーミング機能でAgent Event StreamsをKinesis Streamに送る
[Amazon Connect] プロンプトのテキスト読み上げにSSMLが使用可能です
[Amazon Connect] 問い合せフローのログを保存する
Amazon Connectのコールバック機能の使い方
[Amazon Connect] キューに入った時のメッセージや保留音を変更する
Amazon Connectでコンタクトフロー上で設定した値を画面上に表示する方法
Amazon ConnectのCCP(Contact Control Pannel)から発信、転送する方法
Amazon Connectのデータストリーミング機能でコンタクト履歴情報をKinesis Firehose経由でS3に保存する
[Lex] Amazon Connectを使用して Amazon Lex を電話で使用してみる
Amazon ConnectをZendesk Support上で使用してみる
Amazon ConnectのACD機能について
Amazon Connectの通話録音機能について
Amazon Connect Outbound ContactのPreview版を試してみる
Amazon Connect Streamsで各種EventをSubscribeする
Amazon Connect Streamsの初期セットアップ手順
(レポート)BAP202 : Amazon Connectでクラウドベースのコンタクトセンター向けにパーソナライズされた顧客体験を届ける #reinvent
Amazon Connectのユーザー管理機能について
Amazon Connect CTI Adapter for SalesforceでScreen Popupを試してみる
Amazon ConnectをSalesforce Service Cloud上で使用してみる
Amazon Connectを使って電話からEC2を再起動する
コールセンターサービス Amazon Connect で日本語TTSメッセージを再生する
[アップデート] コールセンターサービス Amazon Connect が諸々アップデート
AWSのコールセンターサービス Amazon Connectの試し方