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

2018.06.06

この記事は公開されてから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の試し方