AWS Step Functionsを使ってAmazon Connectによるユーザーへの自動架電を行う
はじめに
AWS Step Functionsを使ってAmazon Connectによるユーザーへの自動架電を行う方法をまとめました。
Amazon Connectによる自動架電は、以下のようなユースケースでの利用が考えられます。
- システム障害発生時に運用担当者へ自動でアラート通知を行いたい
- 予約の確認やリマインダーを自動化して業務を効率化したい
- 新商品やキャンペーンの告知を顧客リストに自動架電で行いたい
AWS LambdaとAmazon SNSを組み合わせてAmazon Connectによる自動架電を行う方法については、以下の記事が参考になります。この記事では、Amazon SNSをトリガーにしてAWS Lambda経由でアウトバウンドコールを行っています。
今回は、Step Functions ステートマシンを起点に、Amazon Connectによる自動架電の方法をまとめました。
AWS LambdaではなくAWS Step Functionsを利用することで、以下のようなメリットがあります。
- ワークフローをグラフィカルなインターフェースで定義できる
- 複雑なロジックをコーディングせずに実装できる
- 並行処理や条件分岐、エラー処理などを簡単に実装できる
Step Functions ステートマシンを起点にしますが、Step Functions ステートマシンを呼び出すAWSサービスは、以下の通り多くあります。
- AWS Lambda
- Amazon API Gateway
- Amazon EventBridge
- AWS CodePipeline
- AWS IoT ルールエンジン
- AWS Step Functions
Amazon EventBridge の一機能である Amazon EventBridge Pipes でも、ターゲットをStep Functionsに設定することが可能です。
ソースは以下が選択できます。
- Amazon DynamoDB Streams
- Amazon Kinesis Data Streams
- Amazon MQ broker
- Amazon MSK stream
- Amazon SQS queue
- Apache Kafka Streams
以上のように、様々なAWSサービスからStep Functionsを呼び出すことができます。
前提条件
- Connectインスタンスは作成済み。電話番号も取得済み
Step Functions ステートマシンを作成
AWS Step Functions ステートマシンを作成します。
フローには、StartOutboundVoiceContact
のみを挿入します。
[設定]タブのAPI パラメータ
に以下の値を記載します。[入力]や[出力]、[エラー処理]タブはデフォルトのままです。
{ "InstanceId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "ContactFlowId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "SourcePhoneNumber": "+8150xxxxxxxx", "DestinationPhoneNumber.$": "$.DestinationPhoneNumber", "Attributes.$": "$.Attributes" }
- InstanceId
- インスタンスID
- ContactFlowId
- コンタクトフローID
- SourcePhoneNumber
- Connectインスタンスで取得した電話番号
- DestinationPhoneNumber
- 発信先電話番号
- Attributes
- Connectフロー内におけるユーザーが定義するコンタクト属性
インスタンスIDとコンタクフローIDは、今回アウトバウンドコールで利用するConnectフローから確認できます。Connectフローは後述します。
arn:aws:connect:リージョン名:アカウントID:instance/インスタンスID/contact-flow/コンタクトフローID
APIの詳細は以下をご参照ください。
DestinationPhoneNumber
とAttributes
の値は、ステートマシンの実行時に渡します。
[作成]をクリックすると、自動生成されるIAMロールを確認できます。
connect:StartOutboundVoiceContact
アクションを実行するには、手動でIAMポリシーを作成する必要があります。
Step Functions では、最適化された統合の IAM ポリシーを自動生成できますが、AWS SDK 統合は自動生成できません。
https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/service-integration-iam-templates.html
ステートマシン作成後、自動作成されたIAMロールを確認すると、x-Rayのポリシーのみが適用されていました
以下のIAMポリシーを作成し、IAMロールに追加しました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "connect:StartOutboundVoiceContact", "Resource": "arn:aws:connect:ap-northeast-1:540835513398:instance/*/contact/*" } ] }
IAMポリシーでは、インスタンスIDを指定することもできます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "connect:StartOutboundVoiceContact", "Resource": "arn:aws:connect:ap-northeast-1:540835513398:instance/インスタンスID/contact/*" } ] }
ただし、contact配下は、*
にする必要があります。ここでの contact は、通話やチャット、タスク詳細を含むコンタクトリソースを表します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "connect:StartOutboundVoiceContact", "Resource": "arn:aws:connect:ap-northeast-1:540835513398:instance/インスタンスID/contact/コンタクトフローID" } ] }
*
にしない場合、ステートマシン実行時エラーになります。
Connectフロー
アウトバウンドコールで利用するフローは以下です。
1つめの[プロンプトの再生]では、ユーザー定義済みのキー名Message
を設定します。
2つめの[プロンプトの再生]では、ユーザー定義済みのキー名CompanyName
を設定します。
会社名は、$.Attributes.CompanyName、ですね。
これでフローは作成完了です。
テスト
ステートマシン実行時の入力値を入れて、実行します。
DestinationPhoneNumber
とAttributes
をステートマシンに渡します。
{ "DestinationPhoneNumber": "+8190xxxxxxxx", "Attributes": { "Message": "こんにちわ", "CompanyName": "クラスメソッド" } }
DestinationPhoneNumber
の番号に対して架電され、1つめの[プロンプトの再生]では、こんにちわ
、2つめの[プロンプトの再生]では、会社名は、クラスメソッド、ですね
というメッセージがアナウンスされました。
ステートマシンは、電話に発信した時点で成功となり終了します。
ちなみに、受け手側は30秒ほど放置する(受信しない)と、切電されました。
ステートマシンに渡すDestinationPhoneNumber
とAttributes
の値を変えると、アウトバウンドコール対象者やメッセージを変えることができます。
最後に
AWS Step FunctionsからAmazon Connectを使ってユーザーへ自動架電する方法をまとめました。
様々なAWSサービスからStep Functionsを呼び出せるため、ステートマシンに渡す値によって、動的にアウトバウンドコール対象者やメッセージを変えることができます。
本記事を参考に、ユースケースに合わせてアーキテクチャを検討してみてください。