AWS Step Functionsを使ってAmazon Connectによるユーザーへの自動架電を行う

2024.06.21

はじめに

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の詳細は以下をご参照ください。

DestinationPhoneNumberAttributesの値は、ステートマシンの実行時に渡します。

[作成]をクリックすると、自動生成される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、ですね。

これでフローは作成完了です。

テスト

ステートマシン実行時の入力値を入れて、実行します。

DestinationPhoneNumberAttributesをステートマシンに渡します。

{
  "DestinationPhoneNumber": "+8190xxxxxxxx",
  "Attributes": {
    "Message": "こんにちわ",
    "CompanyName": "クラスメソッド"
  }
}

DestinationPhoneNumberの番号に対して架電され、1つめの[プロンプトの再生]では、こんにちわ、2つめの[プロンプトの再生]では、会社名は、クラスメソッド、ですねというメッセージがアナウンスされました。

ステートマシンは、電話に発信した時点で成功となり終了します。

ちなみに、受け手側は30秒ほど放置する(受信しない)と、切電されました。

ステートマシンに渡すDestinationPhoneNumberAttributesの値を変えると、アウトバウンドコール対象者やメッセージを変えることができます。

最後に

AWS Step FunctionsからAmazon Connectを使ってユーザーへ自動架電する方法をまとめました。

様々なAWSサービスからStep Functionsを呼び出せるため、ステートマシンに渡す値によって、動的にアウトバウンドコール対象者やメッセージを変えることができます。

本記事を参考に、ユースケースに合わせてアーキテクチャを検討してみてください。