14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者】AWS Connect を使ってみる (Connect + Lambda + DynamoDB + SNS)

Posted at

目的

  • AWS connectについて仕事上の相談があり、勉強(知ったかぶり)のため、基本動作を確認することにした。
  • AWS connect単体ではさびしいので、少しだけ他のサービス(Lambda/DynamoDB/SNS)と連携させて検証することにした。

AWS Connectとは(自分の理解)

  • 電話番号、着信時の処理(自動応答、オペレータ転送等)機能がSaaSとして提供され、自由に設計、構築できるサービス。

やったこと

以下を実現する。

  • DynamoDBに名簿(電話番号と名前のリスト)を用意しておく。
  • ユーザがConnectが用意する電話番号に電話をかける。
  • Connectで、ユーザの発信者番号を取得し、Lambdaを呼び出し、DynamoDBを検索する。電話番号が存在したら、それに紐づく名前を取得する。
  • DynamoDBから取得した名前を使って、「xxさんですね」と応答する。
  • 発信者に対し、SMS(お礼のメッセージ)を送信する。

構成図

kousei.png

手順

  • DynamoDB(名簿)の用意
    • 以下の感じで、電話番号(PhoneNumber)と名前(Name)の表を用意する。
    • PhoneNumberをプライマリーキーとする。

DynamoDB.png

  • Connectの設定
    • 電話番号を取得する。
    • 問い合わせフローを作成し、電話番号と紐づける。
    • 問い合わせフローは以下の感じ。日本語モードにして、「電話してくれてありがとう」と音声出力して、Lambdaを呼び出して、NameがDynamoDBにあれば、名前を「トーマスさんですね」と音声出力して終わり。

toiawase.png

  • 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でショートメッセージを送信する

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?