Amazon ConnectとTwilioの連携
はじめに
こんにちは、中村です。
コンタクトセンター内で電話の後に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に関するキャンペーンを行なっています。