Amazon Connect での通話後に応対履歴を作成する

このガイドでは、Amazon Connect, EventBridge, Lambda と MiiTel Incoming Webhook を接続して応対履歴を作成する方法を紹介します。

全体の処理の流れ

全体の処理の流れ

完成イメージ。名前は"Amazon Connect"で固定される。

名前は"Amazon Connect"で固定される

🚧

下記の点にご注意ください

このガイドでは、不在着信や留守電の場合は応対履歴を作成しません。通話を行った場合のみ応対履歴を作成します。

実装ガイド

大まかな流れは下記です。

  1. MiiTel Admin で Incoming Webhook 用にユーザーを作成する
  2. Amazon Connect で録音を設定する
  3. Amazon Connect で顧客の電話番号をタグとして設定する
  4. Incoming Webhook を実行する Lambda のコードをデプロイする
  5. Event Bridge で通話終了時に Lambda を呼び出す設定をする

事前準備

下記の準備が完了している前提で進めます。

  • Amazon Connect で発着信ができること
  • Incoming Webhook の URL を発行済みであること

1. MiiTel Admin で Incoming Webhook 用にユーザーを作成する

Amazon Connect から Incoming Webhook で応対履歴を作成する際、 MiiTel ユーザーを指定する必要があります。ここでは特定のユーザーを指定して応対履歴を作成します。"Amazon Connect" という名前のユーザーを作成し、応対履歴の作成時に指定することで応対履歴のページで表示する際のための区別をします。

MiiTel Admin からユーザーを作成します。

名前には、"Amazon Connect" を入力します。

"利用可能サービス" 内の "Incoming Webhook の利用" で :white-check-mark: を入れます。

他の設定は変更しないで保存します。

保存が完了したら、"ユーザー ID を確認" から閲覧できる ID を控えます。

2. Amazon Connect で録音ができるようにする

Amazon Connect で録音するには、データストレージでの通話設定の有効化と、コンタクトフロー内での記録と分析の操作の設定が必要になります。

Amazon Connect インスタンスを選択後、データストレージから保存先のバケットを指定します。下記の画像のように、保存先バケットの情報が表示されるので、バケット名 を控えておきます。

コンタクトフローに 記録と分析の動作を設定 のブロックを追加します。通話記録をオンにします。

発信のコンタクトフローと、着信のコンタクトフローの両方で上記の設定をしてください。

エントリ直後に録音を有効化している

エントリ直後に録音を有効化している

ここまで設定が終わったら、通話が録音されて S3 に音声ファイルが保存されることを確認します。

うまくいかない場合は、 AWS の最新のドキュメントをご確認ください。

3. Amazon Connect で顧客の電話番号をタグとして設定する

そのままコンタクトフローをさらに編集します。

録音する前に、コンタクトのタグのブロックを追加します。

"コンタクトのタグ "ブロックを追加している

"コンタクトのタグ "ブロックを追加している

設定内容は、下記の画像のように "customerNumber" というタグキーに 顧客の電話番号 がマッピングされるようにします。

"コンタクトのタグ" 設定の詳細

"コンタクトのタグ" 設定の詳細

4. Incoming Webhook を実行する Lambda のコードをデプロイする

Lambda 関数を作成し、サンプルコードをそのまま貼り付けます。今回は手動で作成していますが、Terraform やServerless Framework、AWS CDK などをご利用いただいても問題ありません。

レイヤー設定

requests モジュールを利用したいので、コード -> レイヤー設定からレイヤーを追加します。

ARNで有志の公開しているレイヤーを追加します。arnには、arn:aws:lambda:ap-northeast-1:770693421928:layer:Klayers-p312-requests:2を指定します。

タイムアウト設定

一般設定 -> 編集を選択します。

音声ファイルのダウンロード処理に時間がかかるため、タイムアウト値は余裕を持って 5 分にしておきます。

ロール設定

設定 -> アクセス権限 から実行ロールのポリシーを編集します。

ロールには、下記のポリシーをアタッチします。

  • AmazonConnectReadOnlyAccess
  • AmazonS3ReadOnlyAccess
  • 下記のカスタムポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": "*"
        }
    ]
}

環境変数設定

設定 -> 環境変数から下記の環境変数をセットします。

WEBHOOK_URL ... 事前準備で作成した Incoming Webhook のURL

USER_ID ... 1 で控えておいたユーザー ID

S3_BUCKET ... 2 で控えておいたバケット名

INSTANCE_NAME ... Amazon Connect インスタンスのインスタンス名

5. EventBridge で通話終了時に Lambda を呼び出す設定をする

EventBridgeから ルールを作成します。

ルールタイプで、"イベントパターンを持つルール"を選択します。

イベントパターンには、カスタムパターンを選択し、通話の切断を示す "DISCONNECTED"を指定します (下記の通り)

また、インスタンスが複数立ち上がっている時の場合も考慮して、instanceArn も指定します。

{
  "source": ["aws.connect"],
  "detail-type": ["Amazon Connect Contact Event"],
  "detail": {
    "eventType": ["DISCONNECTED"],
    "instanceArn": ["{Amazon Connect インスタンスのARN}"]
  }
}

ターゲットで、先ほど作成した Lambda 関数を指定して完了です。

通話をして応対履歴が作成されていれば成功です。

うまくいかない場合

フォーラム からご質問ください!