この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは、中村です。
コンタクトセンター内で電話の後にSMSを送信したいケースがあるかと思います。コンタクトフロー内でLambdaの統合対応することができますが、Twilioへのリクエストを待とうとすると問題が発生します。というのも、コンタクトフローでLambdaを統合する場合、最大8秒の制限があります。そのためSQSへメッセージを送信します。SQSのメッセージをトリガーに別のLambdaを起動して、Twilioへリクエストを送信する形になります。
このような形で作成していきます。
Amazon ConnectとTwilioの連携
Lambda、SQSのリソースをCloudformationを使って作成します。Amazon Connectへの設定は手動で行う必要があります。(LambdaのソースはS3にパブリック公開してあります。)
まずはTwilioへSign upし、自分の電話番号を検証します。トライアル中は、検証した番号にのみ送信が可能です。 画面に沿って適切なものを選択します。(利用する言語やTwilioのどの機能を利用するか等)プロジェクトが作成されたらまずは、Twilioの電話番号を取得します。取得を完了したら、電話番号・Account Sid・Auth Tokenをメモしておいてください。
それではCloudformationを流していきます。先ほどメモした3つをパラメータとして入力します。
---
AWSTemplateFormatVersion: 2010-09-09
Description: Amazon Connect - Integrate with Twilio
Parameters:
TwilioPhoneNumber:
Type: String
Description: Twilio Phone Number
TwilioAccountSid:
Type: String
Description: Twilio Account Sid
TwilioAuthToken:
Type: String
Description: Twilio Auth Token
NoEcho: true
Resources:
# SQS
SMSQueue:
Type: AWS::SQS::Queue
# send SQS message
sendSQSLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: send_sqs_lambda_role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
- arn:aws:iam::aws:policy/AmazonSQSFullAccess
sendSQSLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: sendSQSMessage
Description: Amazon ConnectからSQSへメッセージを送信します。
Handler: index.handler
MemorySize: 128
Runtime: nodejs8.10
Role: !Sub arn:aws:iam::${AWS::AccountId}:role/send_sqs_lambda_role
Timeout: 8
Environment:
Variables:
SEND_NUMBER: !Ref TwilioPhoneNumber
SID: !Ref TwilioAccountSid
TOKEN: !Ref TwilioAuthToken
Code:
S3Bucket: sample-lambda-code-for-blog
S3Key: sendSQSMessage.zip
# send SMS
sendSMSLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: send_sms_lambda_role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
sendSMSLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: sendSMS
Description: Twilioを使ってSMS送信する
Handler: index.handler
MemorySize: 128
Runtime: nodejs8.10
Role: !Sub arn:aws:iam::${AWS::AccountId}:role/send_sms_lambda_role
Timeout: 20
Environment:
Variables:
QUEUE_URL: !Ref SMSQueue
Code:
S3Bucket: sample-lambda-code-for-blog
S3Key: sendSMS.zip
sendSMSPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt sendSMSLambda.Arn
Action: lambda:InvokeFunction
Principal: sqs.amazonaws.com
DependsOn: sendSMSLambda
リソースの作成が完了したら、Amazon Connectの設定をしていきます。インスタンスでAWS Lambdaを追加します。
最後に問い合わせフローでSMS送信するフローを作成し保存して発行します。Lambdaのパラメータは、電話番号とメッセージを検索するキーとしています。
それでは電話してみましょう。電話が切れるとTwilio経由でSMSが送信されます。
まとめ
個人的にSMS送信する場合はこのパターンがいいのかなと思っています。どなたかのお役に立てれば幸いです。
弊社では、Amazon Connectに関するキャンペーンを行なっています。