AWS Step Functionsを使ってCustomer ProfilesなしでAmazon Connectアウトバウンドキャンペーンを実行してみた

AWS Step Functionsを使ってCustomer ProfilesなしでAmazon Connectアウトバウンドキャンペーンを実行してみた

2025.08.26

はじめに

前回、Amazon Connect Customer Profilesを利用せずに、アウトバウンドキャンペーンをAWS CloudShellから実行する方法を以下の記事でご紹介しました。なぜCustomer Profilesを利用したくないのか、理由も記載しています。

https://dev.classmethod.jp/articles/amazon-connect-outbound-campaigns-without-profiles/

今回は、AWS Step Functionsを使ってAmazon Connect Customer Profilesを利用せず、アウトバウンドキャンペーンを実行してみました。
Step Functionsを利用することで、複数の電話番号への一斉発信処理をワークフローとして管理でき、エラーハンドリングや処理結果の確認も容易になります。

事前準備

アウトバウンドキャンペーンの有効化

Amazon Connectインスタンスでアウトバウンドキャンペーン機能を有効化する必要があります。インスタンスの設定画面から「アウトバウンドキャンペーン」を有効にしてください。

cm-hirai-screenshot 2025-06-30 15.49.36

セキュリティプロファイルの設定

エージェントがアウトバウンドキャンペーンを実行できるよう、セキュリティプロファイルでアウトバウンドキャンペーンの権限を許可してください。

cm-hirai-screenshot 2025-06-30 15.49.27

コンタクトフローの作成

アウトバウンドキャンペーンで使用するコンタクトフローを作成します。今回は以下のフローを利用しますが、シンプルなプロンプト再生のみのフローでも構いません。

cm-hirai-screenshot 2025-07-04 13.19.53

アウトバウンドキャンペーンの作成

アウトバウンドキャンペーンの作成画面から、[外部キャンペーンをホスト] をクリックします。

cm-hirai-screenshot 2025-07-01 10.42.27

以下の設定でキャンペーンを作成します。作成時には先ほど作成したコンタクトフローを指定してください。

cm-hirai-screenshot 2025-08-21 14.35.36

キャンペーン作成後、キャンペーンID を確認し、コピーしておきます。このIDは後のステートマシンで使用します。

cm-hirai-screenshot 2025-08-21 14.39.46

ステートマシン作成

以下のステートマシン定義を使用します。

このワークフローは、入力された電話番号リストをConnect API用のリクエスト形式に変換し、Amazon Connect Campaigns V2 APIを呼び出してアウトバウンド電話を一斉実行します。
cm-hirai-screenshot 2025-08-21 15.55.13

cm-hirai-outbound-campaign
{
  "Comment": "Amazon Connectアウトバウンドキャンペーン自動実行ワークフロー",
  "QueryLanguage": "JSONata",
  "StartAt": "CreateCallRequests",
  "States": {
    "CreateCallRequests": {
      "Type": "Pass",
      "Comment": "入力された電話番号リストをConnect API用のリクエスト形式に変換する",
      "Output": {
        "campaignId": "{% $states.input.campaignId %}",
        "outboundRequests": "{% [$states.input.phoneNumbers ~> $map(function($phone, $index) { { \"ClientToken\": 'batch-' & $string($toMillis($now())) & \"-\" & $string($index + 1), \"ExpirationTime\": $fromMillis($toMillis($now()) + 60000), \"ChannelSubtypeParameters\": { \"Telephony\": { \"DestinationPhoneNumber\": $phone, \"ConnectSourcePhoneNumber\": $states.input.sourcePhone, \"Attributes\": { \"CallType\": \"Outbound\", \"CustomerIndex\": $string($index), \"BatchId\": 'batch-' & $string($toMillis($now())) } } } } })] %}"
      },
      "Next": "ExecuteOutboundCalls"
    },
    "ExecuteOutboundCalls": {
      "Type": "Task",
      "Comment": "Amazon Connect Campaigns V2 APIを呼び出してアウトバウンド電話を一斉実行する",
      "Resource": "arn:aws:states:::aws-sdk:connectcampaignsv2:putOutboundRequestBatch",
      "Arguments": {
        "Id": "{% $states.input.campaignId %}",
        "OutboundRequests": "{% $states.input.outboundRequests %}"
      },
      "Output": {
        "campaignId": "{% $states.input.campaignId %}",
        "totalRequests": "{% $count($states.input.outboundRequests) %}",
        "successfulRequests": "{% $count($states.result.SuccessfulRequests) %}",
        "failedRequests": "{% $count($states.result.FailedRequests) %}",
        "successfulRequestIds": "{% $states.result.SuccessfulRequests.Id %}",
        "failedRequestDetails": "{% $states.result.FailedRequests %}"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "States.TaskFailed"
          ],
          "IntervalSeconds": 2,
          "MaxAttempts": 3,
          "BackoffRate": 2
        }
      ],
      "End": true
    }
  }
}

ワークフローの処理内容は以下のとおりです。

  1. CreateCallRequests: 入力された電話番号リストをConnect API用のリクエスト形式に変換
  2. ExecuteOutboundCalls: Amazon Connect Campaigns V2 APIを呼び出してアウトバウンド電話を一斉実行

Step Functions実行ロールの権限設定

マネジメントコンソール上でステートマシンを作成する際、実行ロールに以下のポリシーを手動で追加する必要があります。

cm-hirai-screenshot 2025-08-21 14.24.09

以下のポリシーを追加してください。アカウントIDは各自変更してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "connect-campaigns:PutOutboundRequestBatch",
            "Resource": "arn:aws:connect-campaigns:ap-northeast-1:アカウントID:campaign/*"
        }
    ]
}

試してみた

以下の内容を入力してステートマシンを実行します。
cm-hirai-screenshot 2025-08-21 15.32.02

{
  "campaignId": "キャンペーンID",
  "sourcePhone": "+8150xxxxxxxx",
  "phoneNumbers": [
    "+8190xxxxxxxx",
    "+8180xxxxxxxx"
  ]
}

phoneNumbersに指定した電話番号に電話がかかってきました。

ステートマシンの出力は以下のとおりでした。

{
  "campaignId": "ae613cdc-1ad5-4e67-9d10-5c31a5834940",
  "totalRequests": 2,
  "successfulRequests": 2,
  "failedRequests": 0,
  "successfulRequestIds": [
    "c0c323d6-338e-4888-a7d4-2725c9e7cd8a",
    "9b5343f9-0455-4485-87a7-f4bb7f1938ec"
  ],
  "failedRequestDetails": []
}

cm-hirai-screenshot 2025-08-21 15.56.43

successfulRequestsは、API実行が成功したことを示します。ただし、通話中や電源が切れている場合、存在しない電話番号の場合でも成功と判定されることに注意してください。

successfulRequestIdsの各IDは、各コンタクトIDです。

cm-hirai-screenshot 2025-08-25 10.54.03

実行結果の確認

アウトバウンドキャンペーン実行後は、Amazon Connectのアウトバウンドキャンペーンのパフォーマンスダッシュボードから実行結果を確認できます。

cm-hirai-screenshot 2025-08-21 15.34.54
このダッシュボードでは、キャンペーンの成功率、接続率、エラー状況などの詳細な分析情報を確認できます。

最後に

AWS Step Functionsを使用することで、Amazon Connect Customer Profilesを利用せずにアウトバウンドキャンペーンを実行できました。

Step Functionsを利用するメリットは以下のとおりです。

  • 複数の電話番号への一斉発信処理をワークフローとして視覚的に管理
  • エラーハンドリングやリトライ処理を組み込み可能
  • 処理結果の詳細な確認と分析が容易
  • 他のAWSサービスとの連携も簡単

Customer Profilesの導入コストや複雑性を避けつつ、効率的なアウトバウンドキャンペーンの実行を実現できるため、ぜひ参考にしてみてください。

参考

https://docs.aws.amazon.com/ja_jp/connect/latest/APIReference/API_connect-outbound-campaigns-v2_PutOutboundRequestBatch.html

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.