1 はじめに
Amazon Connect(以下、Connect)を使用して、会社の固定電話にかかってきた電話をLEXを使って個人に転送して、LEXで個人を認識できない場合は録音メッセージを残してメールで連絡する仕組みを作ってみました。
(会社の固定電話からAmazon Connectへの転送はPBXで設定)
2 ユーザシナリオ
ユーザシナリオは以下の通りです。
Connect)お電話ありがとうございます。こちらは〇〇株式会社です。
Connect)お話になりたい担当者の名前を浅野、佐々木、田中のようにおっしゃってください。
<登録済の担当者の場合>
User)佐々木さん
Connect)佐々木におつなぎします。
Connect)※個人電話への転送
<登録されていない担当者の場合>
User)中田さん
Connect)認識できませんでした。電話を転送させていただきます。
Connect)留守録にメッセージを残していただければ折り返しご連絡させていただきます。
Connect)20秒以内にメッセージをお話しください。
User)※メッセージを録音
Connect)メッセージをお預かりしました。電話をお切りください。
Connect)※S3に通話録音が作成されたらML(Mailing List)へメールで連絡
##3 構成イメージ
全体の構成は以下のようなイメージです。
##4 問合せフロー
今回の仕組みでは、2つの問合せフローが使用されています。
1つ目のフローで、代表電話にかかってきた電話をLEXを使って個人に転送して、2つ目のフローでLEXで個人を認識できない場合の録音メッセージを残す仕組みを実装しています。
①1つ目の問合せフロー
②2つ目の問合せフロー
##5 LEX設定
LEXは日本語対応していないので、担当者の名前をローマ字で intents に担当者の名前を登録します。
作成したLEXはConnectの問合せフローから呼び出します。
##6 Lambda設定
ConnectからS3に通話録音のファイル(Wavファイル)が保存されたタイミングで、Lambdaを起動するように設定します。
今回のLambdaはPython3.6で作成してます。SNSのトピック、メッセージ、件名を設定します。
import boto3
import datetime
now = datetime.datetime.today()
sns = boto3.client('sns')
TOPIC_ARN = u'arn:aws:sns:ap-northeast-1:999999999999:xxxxxxxxSendMail'
msg = u'〇〇株式会社の代表電話に通話が録音されました。録音内容を確認してください。\nAmazonS3/connect-xxxxx/connect/xxxxx/CallRecordings'
subject = u'〇〇株式会社の代表電話に通話が録音されました'
def lambda_handler(event, context):
request = {
'TopicArn': TOPIC_ARN,
'Message': msg,
'Subject': subject
}
response = sns.publish(**request)
return 'Successfully mail processed records'
##7 SNS設定
トピックを作成し、サブスクリプションで代表電話のMLにメールを送信する設定を実施します。
##8 最後に
今回は、Connectと日本語対応していないLEXを組み合わせて担当者への電話転送する機能、および担当者に転送できない場合の留守録機能を実装しました。
通話録音のファイル(Wavファイル)をGoogle Speech APIなどを用いてテキスト化してメールに添付してあげればわざわざ留守録内容を聞かなくても良くなりますが、そこまでの実装は今後実施していく予定です。
##9 参考にさせていただいたリンク
https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-message/
https://qiita.com/ai-2723/items/dab1df52eda4d57f7539