Amazon Connect の留守番電話を Slack に通知する最小構成を作ってみた

西山です。

 

Amazon Connect で電話を受け付けている場合、営業時間外や休日は留守番電話にしたい、というニーズはよくあると思います。お客さんが用件を吹き込んでくれたら、その内容を担当者に通知して、翌営業日に折り返す。コールセンターに限らず、保守用の問い合わせ窓口や代表電話でもありがちなパターンではないでしょうか。

 

ギークフィードでも保守用の電話番号を Amazon Connect で運用していますが、常時 CCP にログインして待ち受けているわけではないので、同じような仕組みが必要でした。電話がかかってきたら IVR で用件を話してもらい、その内容を Slack に通知するという運用です。

 

今回は、この「留守番電話 → 通知」を最小構成で実現する方法を紹介します。

 

【追記】本当の最小構成はこちらでした。
 

 

以前の構成

 

以前この仕組みを作ったときは、けっこう大掛かりな構成になっていました。

 

  1. コンタクトフローで Kinesis Video Streams(KVS)にメディアストリーミングを開始
  2. 通話終了イベントをトリガーに Lambda を実行
  3. Lambda が KVS からメディアストリームデータを取得して WAV に変換
  4. WAV ファイルを音声認識にかけて文字起こし
  5. 文字起こし結果を Slack に通知

 

動いてはいましたが、KVS のストリーム管理、Lambda 内での WAV 変換処理、音声認識 API の呼び出しと、まあまあな作業量になります。特に KVS からのデータ取得と WAV への変換は地味にハマりポイントも多く、メンテナンスコストもそれなりにかかっていました。また、エージェントに接続しない通話はそもそも録音ができなかったので、WAV変換したものをS3に別途保管するといった処理も必要になっていました。

 

その後、Amazon Connect のアップデートによって状況が変わりました。コンタクトフロー中の通話でも録音が可能になり、さらにその録音を Contact Lens で分析できるようになっています。

 

これを使えば、もっとシンプルにできるのでは?ということで、今回作り直してみました。

 

今回の最小構成

 

今回の構成はこうなりました。

 


 

Amazon Connect のコンタクトフロー内で録音を有効にしておき、通話が切断されたタイミングで EventBridge がイベントを受け取ります。EventBridge の API Destination から Slack Webhook に直接通知する、という流れです。

 

ポイントは Lambda を一切使っていないことです。コードを書かずに、AWS のマネージドサービスの連携だけで完結しています。また、この構成の良いところはAmazon Connect以外のコストがほぼ0円になるところです。

 

通知には Amazon Connect のコンタクト詳細画面への URL を含めているので、Slack の通知からワンクリックで録音の再生や Contact Lens による文字起こし結果を確認できます。

 

設定手順

 

作成するリソースは以下の通りです。

 

リソース 用途
EventBridge Rule Connect の切断イベントを検知
EventBridge Connection Slack Webhook への認証情報
EventBridge API Destination Slack Webhook への送信先
IAM Role EventBridge が API Destination を呼び出すためのロール

 

コンタクトフローの設定

 

コンタクトフローでは、発信者に用件を話してもらう前に「記録と分析の動作を設定」ブロックを配置します。

 


 

このブロックで設定するのは以下の 2 点です。

 

1つ目は通話録音です。「通話録音」セクションでエージェントおよび顧客の録音を有効にします。今回はエージェントが介在しない IVR のみのフローですが、IVR 中の録音を残すにはこの設定が必要です。

 

2つ目は Contact Lens の分析です。「分析」セクションで Contact Lens による音声分析を有効にし、言語を日本語に設定します。これを有効にしておくと、録音に対して自動的に文字起こしが実行されます。コンタクト詳細画面から文字起こし結果を確認できるようになるので、録音を再生しなくても用件の概要を把握できます。

 



 

この設定の後に「プロンプトの再生」で用件を話してもらうよう案内し、「顧客の入力を保存する」等で発話を待ち、その後切断する流れです。

 

EventBridge ルールの作成

 

Amazon Connect はコンタクトの状態が変化するたびに EventBridge にイベントを送信しています。今回はこの中から DISCONNECTED(切断)イベントだけを拾います。

 

イベントパターンは以下のように設定します。

 

 

instanceArn で対象の Connect インスタンスを、channel で音声通話に、tags.aws:connect:systemEndpoint で特定の電話番号に絞り込んでいます。複数の電話番号を運用している場合でも、留守番電話対象の番号だけに通知を限定できます。

 


 

API Destination と Connection の設定

 

EventBridge から Slack に直接 HTTP リクエストを送るために、API Destination を使います。

 

まず Connection を作成します。Slack の Incoming Webhook は URL 自体にトークンが含まれているため、Connection の認証タイプには API Key を選択し、ダミーの値を設定しておきます。

 


 

次に API Destination を作成し、Slack Webhook の URL をエンドポイントに指定します。HTTP メソッドは POST です。

 


 

Input Transformer の設定

 

EventBridge ルールのターゲット設定で Input Transformer を使い、Slack に送るメッセージを整形します。

 

Input Path:

 

{"contactId": "$.detail.contactId"}

 

Input Template:

 

{"text": "通話が終了しました\nhttps://your-instance.my.connect.aws/contact-trace-records/details/<contactId>"}

 

これで、切断イベントから contactId を抽出して、コンタクト詳細画面への URL を組み立てた通知メッセージが Slack に飛びます。

 


 

動作確認

 

実際に電話をかけて用件を話し、切断すると Slack にこんな通知が届きます。

 


 

通知内の URL をクリックすると、Amazon Connect のコンタクト詳細画面に遷移します。ここで録音の再生と、Contact Lens による文字起こし結果を確認できます。

 


 

以前の構成では Lambda 内で WAV 変換と音声認識をやっていたわけですが、今は Amazon Connect 側で録音も文字起こしも完結しているので、通知だけ飛ばせば十分というわけです。

 

まとめ

 

以前は KVS + Lambda + 音声認識 API を組み合わせて頑張っていた留守番電話通知ですが、今は EventBridge と API Destination だけで実現できるようになりました。Lambda なし、コードの記述なしです。

 

Amazon Connect は頻繁にアップデートが行われており、以前は大掛かりな仕組みが必要だったことがサクッとできるようになっていたりします。昔作った仕組みがそのまま動いているとなかなか見直す機会がないですが、たまに振り返ってみると「こんなに簡単になってたのか」と驚くことがあります。

 

留守番電話の通知を検討している方は、ぜひこの最小構成から試してみてください。

 

西山(@ippei2480)でした。

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ