Amazon Connect から Lambda 関数を呼び出す

記事タイトルとURLをコピーする

こんにちは。技術1課の柳田です。最近乾燥してきたためか手を洗う際の水に触れるだけでも静電気を感じるようになってきました。 今回は Amazon Connect から Lambda を呼び出す際の活用例や設定についてご紹介します。

Amazon Connect とは?

クラウドベースのコンタクトセンターを提供できるサービスです。 https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/what-is-amazon-connect.html

Amazon Connect は、クラウドベースのサポートセンターソリューションです。Amazon Connect を使えば、規模を問わず、カスタマーサポートセンターの設定と管理、および信頼性の高い顧客エンゲージメントの提供が容易になります。ほんの数ステップでサポートセンターを設定し、どこからでもエージェントをすぐに追加して、顧客対応をすぐに開始できます。

コンタクトセンターソリューションサービスの Amazon Connect と Lambda を連携して、 以下図のように外部サービス(データベースやCRMなど)との連携ができるようになります。

例えば、以下のようなことが Lambda と連携することで可能となります。

  • ユーザ認証
  • 顧客属性に応じた分岐処理(例:新規顧客・既存顧客で分岐)

Amazon Connect から Lambda 関数を呼び出す

ここからは、接続元電話番号によって読み上げるメッセージを変えるコールフローを例に挙げつつ、Amazon Connect から Lambda 関数を呼び出す際に必要となる設定について押さえていきます。 以降の手順は、Amazon Connect にて電話番号取得と問い合わせフローの紐づけが完了している前提で進めています。紐づけが完了していない方は、こちらをご確認ください。

1. Lambda 関数作成

まず、Lambda 関数を作成します。(test-connect-lambda という名前で作成しました。) 今回は、以下サンプルコードを使います。電話番号部分はご自身の電話番号に置き換えて使ってください。


def lambda_handler(event, context):
   phone_number = '0123456789'
   user_name = 'ゲスト'
   
   # 日本の国番号 +81 を 0 に変換
   source_phone_number = event['Details']['ContactData']['CustomerEndpoint']['Address'].replace('+81', '0')
   
   if source_phone_number == phone_number:
       user_name = 'タナカ'
   
   result = {
       'Name' : user_name
   }
   return result

2. Amazon Connect に Lambda 関数を紐づける

Connect インスタンスから「問い合わせフロー」を選択します。

問い合わせフロー内の「AWS Lambda」から 1. で作成したLambda 関数を選択し、「+ Lambda 関数の追加」を押下します。

追加した関数が表示されていれば、Amazon Connect への Lambda 関数紐づけは完了です。

3. 問い合わせフロー作成

以下問い合わせフローで今回は動作確認をします。 CloudWatch Logs へのログ出力・Lambda 関数呼び出し・プロンプト再生ができるように作成したフローです。 プロンプト再生をする場合は、音声設定が必要ですのでご注意ください。音声設定をしないと、プロンプトの再生が無音になってしまいます。

「Lambda 関数を呼び出す」ブロックに呼び出したい Lambda 関数を設定します。

3-1. Lambda に引数を渡す場合

今回の例では、Lambda 関数に引数を渡しませんが、 Lambda 関数に引数を渡す場合は、「関数入力パラメータ」で値を指定します。 値の渡し方は、属性を使用するテキストの使用の2種類があります。 属性がある場合は属性を使用するを使用して、属性がない場合はテキストの使用を使います。

  • 宛先キー:設定したキー名でLambdaで値を受け取ります。
  • タイプ:プルダウンから属性のタイプを選択します。属性の詳細ついては、こちらでご確認ください。
  • 属性:問い合わせフロー内で定義された属性名を設定します。

Lambda 関数には以下のような JSON リクエストが渡されるので、宛先キーを指定して引数で渡された値を受け取ります。


{
    "Details": {
        "ContactData": {
            "Attributes": {},
            "Channel": "VOICE",
            "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
            "CustomerEndpoint": {
                "Address": "+1234567890",
                "Type": "TELEPHONE_NUMBER"
            },
            "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
            "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK",
            "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX",
            "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXX",
            "Queue": "QueueName",
            "SystemEndpoint": {
                "Address": "+1234567890",
                "Type": "TELEPHONE_NUMBER"
            }
        },
        "Parameters": {
            "sentAttributeKey": "sentAttributeValue"
        }
    },
    "Name": "ContactFlowEvent"
}
  • ContactData:問い合わせフロー固有のデータ(接続元電話番号や問い合わせフローのIDなど)
  • Attributes:問い合わせフローで定義したユーザー属性(定義していない場合は空になります)
  • Parameters:「Lambda 関数を呼び出す」ブロックで設定した引数

3-2. Lambda から戻り値を受ける場合

Lambda 関数から、サンプルコードに記載したようにキーと値のペアで Amazon Connect に戻り値を返却します。 Lambda 関数の戻り値は外部属性になるため、Amazon Connect 内で参照する際は$.External.[Lambdaで設定したキー名]となります。 今回の例では、Lambda 関数から Name というキーでユーザ名を返しているので、「プロンプトの再生」ブロックで以下図のように $.External.Name で参照しています。

4. 動作確認

ここまでの設定ができていれば、Lambda 関数に設定した電話番号から Amazon Connect に電話をすると、ユーザ名が読み上げられます。(電話番号が合致しない場合はユーザ名はゲスト)

注意点

Lambda 関数からの戻り値を外部属性として参照していましたが、外部属性だと再度 Lambda 関数を呼び出すと前回の戻り値が上書きされるため、 後々も Lambda 関数からの戻り値を参照する場合は、ユーザ定義属性として設定する必要があります。 https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-lambda-functions.html#process-function-response

それぞれの参照方法は以下です。その他の参照方法はこちらをご確認ください。

  • ユーザー定義属性:$.Attributes.[宛先キー]
  • 外部属性:$.External.[宛先キー]

おわりに

今回の例では Lambda 内で処理が完結していますが、Lambda から データベースを参照したり、外部API を呼び出すと更にできることが増えます。

Amazon Connect って他にどんなことができるの?と興味が湧いた方は、 当社の Amazon Connect インテグレーションの資料も是非ご覧くださいませ。