Amazon Connect で直通電話②
こんにちは。米須です。
今回は Amazon Connect と連携するための Lambda と DynamoDB の部分を見ていきたいと思います。
概要
Amazon Connect と Lambda、DynamoDB の関係はこんな感じです。

DynamoDB での設定
では、DynamoDB から見ていきましょう。
「AmazonConnectUser」というテーブルを作成し、下記のように項目と値をセットしました。

前回説明したAmazon Connect 側の設定 Step⑦において、「エージェント別」を選択しているので、「LoginName」には Amazon Connect のログイン名を設定しています。
項目名 | 設定している値 | 主キー |
TantoNo | 電話をかけてきた人に入力してもらう担当者番号 | 〇 |
LoginName | Amazon Connect のログイン名 |
「Amazon Connect のログイン名」というのは、Amazon Connect のユーザ管理画面に表示される「ログイン名」の事です。

Lambda での設定
Python 3.8 を使用し、「AmazonConnectTest」という関数を作成しました。

ソースは下記のとおりです。この後、ポイントとなる点を説明していきたいと思います。
from __future__ import print_function
import boto3
import json
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
# ①担当者番号を取得
print("event:")
print(event)
tanto_no=event['Details']['Parameters'].get('Extension',"Not Available")
print("tanto_no:")
print(tanto_no)
# ②DynamoDB から Amazon Connect のログイン名を取得
table = dynamodb.Table('AmazonConnectUser')
try:
response = table.get_item(
Key={
'TantoNo': tanto_no
}
)
except ClientError as e:
print(e.response['Error']['Message'])
return {
"Success":"False",
"Reason":e.response['Error']['Message']
}
else:
#item = response['Item']
print("GetItem succeeded:")
print(json.dumps(response))
if "Item" in response:
print("Success!")
print("LoginName:")
print(response["Item"]["LoginName"])
# ③取得した値を Amazon Connect に渡す
return {
"Success":"True",
"FallBackQueue":response["Item"]["LoginName"]
}
else:
print("Error!")
return {
"Success":"False",
"Reason":"No Records Found"
}
ユーザが入力した担当者番号を取得する
ユーザが入力した「担当者番号」は「event」という引数にて lambda_handler 関数に渡ってきます。まずは「event」という引数に何が入っているか見てみましょう。(ソースの「① 担当者番号を取得」部分)
Lambda では print 関数を使うと CloudWatch のロググループに出力できるので、「event」の値を出力してみました。このログを出力した際は、担当者番号として「030001」を入力しました。(見やすいよう整形しています)

前回説明したAmazon Connect 側の設定 Step⑤にて「宛先キー」を「Extension」と設定していたので、赤枠部分の Parameters のところに「Extension」の値として入力した担当者番号(030001)が設定されています。
入力した「担当者番号」がどのようにセットされているか分かったので、下記のコードで値を取得します。
tanto_no=event['Details’]['Parameters’].get('Extension’,"Not Available")
DynamoDB から Amazon Connect のログイン名を取得
次は、先程取得した「担当者番号」を利用して DynamoDB から Amazon Connect のログイン名を取得します。(ソースの「② DynamoDB から Amazon Connect のログイン名を取得」部分)
DynamoDB では主キーである「TantoNo」に担当者番号の値が設定されているので、先ほど取得した「tanto_no」をキーにレコードを取得し、「response」という変数にセットします。
response = table.get_item(
Key={'TantoNo’: tanto_no}
)
「response」にはレコード全体が入っているので、ここから Amazon Connect のログイン名を下記のようにして取得します。(Amazon Connect のログイン名は DynamoDB にて「LoginName」として定義されているので、下記コードでも「LoginName」を指定しています)
response[“Item"][“LoginName"]
取得した値を Amazon Connect の次のフローに渡す
ここまでの手順により DynamoDB から Amazon Connect のログイン名を取得できました。後は戻り値にセットして Amazon Connect の次のフローに値を渡します。(ソースの「③取得した値を Amazon Connect に渡す」部分)
前回説明したAmazon Connect 側の設定 Step⑦にて「属性」を「FallBackQueue」と設定したので、return 部分でも「FallBackQueue」として設定しています。
return {
“Success":"True",
“FallBackQueue":response[“Item"][“LoginName"]
}
(本当のところを言うと、あまりちゃんと考えず他の資料を真似して作ってしまったで「Extension」や「FallBackQueue」という名前になっています。。。皆さんはもっと分かりやすい名前を設定しましょう(^^;)

Amazon Connect に Lambda 関数を紐づける
Amazon Conenct の問い合わせフローの画面を見ると、Lambda に関する設定項目があります。ここで、作成した Lambda 関数を選択し「+Add Lambda Function」を押すと下記のリストに追加され、前回説明したAmazon Connect 側の設定 Step⑤の 「AWS Lambda 関数を呼び出す」にて Lambda 関数が設定できるようになります。

これで設定は完了です。
思った通りに動作するか確認してみましょう!
今回説明した Amazon Connect と Lambda 関数に関する設定については、下記ドキュメントにも記載されていますので、良かったらこちらも見てみてください。
[AWS ドキュメント]
AWS Lambda 関数を呼び出す
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-lambda-functions.html#function-parsing
さいごに
いかがだったでしょうか。
Lambda、DynamoDB、Amazon Connect と3つのサービスを連携しなければいけないので、プログラミングに慣れていない方には少し難しい内容だったかと思います。でも、このあたりの作り方を理解出来れば、Amazon Connect を使って時様々なフローが作れるようになるので、ぜひ試してみてください。