目的
- AWS connectについて仕事上の相談があり、勉強(知ったかぶり)のため、基本動作を確認することにした。
- AWS connect単体ではさびしいので、少しだけ他のサービス(Lambda/DynamoDB/SNS)と連携させて検証することにした。
AWS Connectとは(自分の理解)
- 電話番号、着信時の処理(自動応答、オペレータ転送等)機能がSaaSとして提供され、自由に設計、構築できるサービス。
やったこと
以下を実現する。
- DynamoDBに名簿(電話番号と名前のリスト)を用意しておく。
- ユーザがConnectが用意する電話番号に電話をかける。
- Connectで、ユーザの発信者番号を取得し、Lambdaを呼び出し、DynamoDBを検索する。電話番号が存在したら、それに紐づく名前を取得する。
- DynamoDBから取得した名前を使って、「xxさんですね」と応答する。
- 発信者に対し、SMS(お礼のメッセージ)を送信する。
構成図
手順
- DynamoDB(名簿)の用意
- 以下の感じで、電話番号(PhoneNumber)と名前(Name)の表を用意する。
- PhoneNumberをプライマリーキーとする。
- Connectの設定
- 電話番号を取得する。
- 問い合わせフローを作成し、電話番号と紐づける。
- 電話番号の取得や問い合わせフローの作成は以下のクラメソブログを参照。 【東京リージョン】Amazon Connectでコンタクトセンター構築はじめの一歩
- 問い合わせフローは以下の感じ。日本語モードにして、「電話してくれてありがとう」と音声出力して、Lambdaを呼び出して、NameがDynamoDBにあれば、名前を「トーマスさんですね」と音声出力して終わり。
- Lambdaコード(python)の作成
- connectから発信者番号をもらって、DynamoDBを検索して、Nameを返すLambdaを作成する。
- Lambdaには適切な権限(DynamDB等にアクセス可能な権限)を付与する。
- Lambdaにはトリガーの設定(Connectからの呼び出しを許可する設定)をCLIで行う(2019/4時点でCLIでの設定が必要)。ConnectからのLambda呼び出しについては以下のクラメソブログを参照。【Amazon Connect】 問い合わせフローの中でLambda関数を実行する
mksamba-connect-to-lambda
import json
import boto3
from boto3.dynamodb.conditions import Key
def lambda_handler(event, context):
#受け取ったJSONを確認
eventdata = json.dumps(event)
print(eventdata)
#電話番号を抜き取り
InputPhoneNumber = event["Details"]["ContactData"]["CustomerEndpoint"]["Address"]
print(InputPhoneNumber)
#dynamodbにアクセス
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("mksamba-connect-userdb")
#connectからもらった電話番号がDBにあるか検索
querydata = table.query(
KeyConditionExpression = Key("PhoneNumber").eq(InputPhoneNumber)
)
print(querydata)
#なければunknownを返す
if querydata["Count"] == 0:
username = "unknown"
#あれば電話番号に紐づく名前を返す
else:
username = querydata["Items"][0]["Name"]
print(username)
#相手の電話にSMSを送る
sns = boto3.client("sns")
sendmessage = "Thank you for calling."
sns.publish(
PhoneNumber = InputPhoneNumber,
Message = sendmessage
)
resultdic = {"Name":username}
return resultdic
所感
- Connectの初歩的な設定は分かったので、音声認識/合成等、別の機能も触っていきたい。
その他参考にした記事
[Amazon Connect | Lambda関数からデータを返す方法]
(https://hacknote.jp/archives/50307/)
PythonでSESでemailを、SNSのSMSでショートメッセージを送信する