Amazon Connect Customer Profilesを利用せず、アウトバウンドキャンペーンを実行する方法
はじめに
Amazon Connect Customer Profilesを利用せずに、アウトバウンドキャンペーンを実行する方法をご紹介します。
通常、Connect管理ページからアウトバウンドキャンペーンを実行するには、Customer Profilesの利用が必須となっており、Customer Profiles内に登録されたユーザーに対してのみキャンペーンを実行できます。
従来のPinpoint連携について
以前は、Pinpointのコンソール上からユーザーリストのCSVをアップロードして、アウトバウンドキャンペーンを実行できていました。
アウトバウンドキャンペーン対象者リストをCSV形式でアップロード
参考記事:https://dev.classmethod.jp/articles/amazon-connect-agentless-outbound-campaigns/
しかし、Pinpointのサポート終了が決定したことに伴い、現在Pinpointにおける「インポートされたセグメント」はAmazon Connectで使用できなくなりました。
現時点では、以下の Amazon Pinpoint エンゲージメント機能は Amazon Connect では使用できません。
- アプリ内メッセージング
- キャンペーンで通知をプッシュ (GCM、APNS、BAIDU など)
- カスタムチャネル
- インポートされたセグメント
- ジャーニー
引用元:https://docs.aws.amazon.com/ja_jp/pinpoint/latest/userguide/migrate.html#migration-steps
Customer Profilesを利用した従来の方法
現在、Customer Profilesを利用してアウトバウンドキャンペーンを実行する場合の手順は以下のとおりです。
- S3上にユーザーリストをファイルとしてアップロードする
- Amazon Connectのマネジメントコンソール上で、S3のCSVファイルに対してデータ統合を作成する
- Amazon Connect管理画面内で顧客セグメントを作成する
- 作成した顧客セグメントにアウトバウンドキャンペーンを設定して実行する
参考記事:
- https://dev.classmethod.jp/articles/amazon-connect-outbound-campaigns-three-regions/
- https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/enable-outbound-campaigns.html
Customer Profiles利用を避けたい理由
Customer Profilesの利用を避けたい理由は以下のとおりです。
1. コスト面の懸念
Customer Profilesには利用料金が発生するため、運用コストを抑えたい場合に負担となります。
2. 運用の複雑さ
毎日異なるユーザーリストを扱う場合、Customer Profilesの作成・削除を日次で行う必要があり、運用負荷が高くなります。
3. セグメント作成の困難さ
Customer Profilesでは属性によるフィルタリングでセグメントを作成する仕組みのため、毎日変わる任意のユーザーリストを扱う場合、効率的に抽出することが困難です。
ただし、Customer Profiles内の既存ユーザーに対して定期的にキャンペーンを実行するケースにおいては、Amazon Connect Customer Profilesを利用したアウトバウンドキャンペーンの方が効率的です。 属性によるセグメント作成や、スケジュール設定機能などを活用できるためです。
本記事では、毎日異なるユーザーリストに対してキャンペーンを実行したい場合や、コストを抑えたいケースに適した、Amazon Connect Customer Profilesを利用せずにアウトバウンドキャンペーンを実行する方法をご紹介します。
事前準備
アウトバウンドキャンペーンの有効化
Amazon Connectインスタンスでアウトバウンドキャンペーン機能を有効化する必要があります。インスタンスの設定画面から「アウトバウンドキャンペーン」を有効にしてください。
セキュリティプロファイルの設定
エージェントがアウトバウンドキャンペーンを実行できるよう、セキュリティプロファイルでアウトバウンドキャンペーンの権限を許可してください。
Connectフローの作成
アウトバウンドキャンペーンで使用するConnectフローを作成します。今回は、以下のフローを利用しますが、シンプルなプロンプト再生のみのフローでも構いません。
アウトバウンドキャンペーンの作成
アウトバウンドキャンペーンの作成画面から、[外部キャンペーンをホスト] をクリックします。
以下の設定でキャンペーンを作成します。作成時には先ほど作成したConnectフローを指定してください。
キャンペーン作成後、キャンペーンID を確認し、コピーしておきます。このIDは後のAPI実行で使用します。
API経由でのキャンペーン実行
単一電話番号への発信
AWS CloudShellを開き、PutProfileOutboundRequestBatch APIを利用した以下のコマンドを実行することで、指定した電話番号に対してアウトバウンドキャンペーンを実行できます。
id
:先ほど作成したキャンペーンIDdestinationPhoneNumber
:発信先の電話番号connectSourcePhoneNumber
:Connectインスタンスで発行した発信元電話番号
# 現在時刻から1分後を設定
EXPIRATION_TIME=$(date -u -d '+1 minutes' '+%Y-%m-%dT%H:%M:%SZ')
aws connectcampaignsv2 put-outbound-request-batch \
--id "06f0d835-bc01-4c14-ad89-95f22c2f2713" \
--outbound-requests "[
{
\"clientToken\": \"test-$(date +%s)\",
\"expirationTime\": \"$EXPIRATION_TIME\",
\"channelSubtypeParameters\": {
\"telephony\": {
\"destinationPhoneNumber\": \"+8190xxxxxxxx\",
\"connectSourcePhoneNumber\": \"+8150xxxxxxxx\",
\"attributes\": {
\"CallType\": \"Outbound\"
}
}
}
}
]"
実行結果:
{
"successfulRequests": [
{
"clientToken": "test-1751595908",
"id": "c9fb1bdb-ba62-462f-9865-5ba4ff9991d5"
}
],
"failedRequests": []
}
コマンド実行後、即座に指定した電話番号に電話がかかります。
expirationTimeの制限について
重要な注意点として、expirationTime
に指定する時刻は現在時刻より15分以内で設定する必要があります。 15分を超えた時刻を指定した場合、以下のようにエラーが発生します。
# 現在時刻から20分後を設定(エラーが発生)
EXPIRATION_TIME=$(date -u -d '+20 minutes' '+%Y-%m-%dT%H:%M:%SZ')
aws connectcampaignsv2 put-outbound-request-batch \
--id "06f0d835-bc01-4c14-ad89-95f22c2f2713" \
--outbound-requests "[
{
\"clientToken\": \"test-$(date +%s)\",
\"expirationTime\": \"$EXPIRATION_TIME\",
\"channelSubtypeParameters\": {
\"telephony\": {
\"destinationPhoneNumber\": \"+8190xxxxxxxx\",
\"connectSourcePhoneNumber\": \"+8150xxxxxxxx\",
\"attributes\": {
\"CallType\": \"Outbound\"
}
}
}
}
]"
エラー結果:
{
"successfulRequests": [],
"failedRequests": [
{
"clientToken": "test-1751603099",
"failureCode": "InvalidInput"
}
]
}
この制限はAWSドキュメントには明記されていないため、注意が必要です。なお、コンソール上からCustomer Profilesを利用したアウトバウンドキャンペーンでは数日後の予定も設定できるため、この点では従来の方法より制約があります。
複数電話番号への一括発信
複数の電話番号に対して一括でアウトバウンドキャンペーンを実行する場合は、以下のスクリプトを使用します。
CAMPAIGN_ID="06f0d835-bc01-4c14-ad89-95f22c2f2713"
SOURCE_PHONE="+8150xxxxxxxx"
TIMESTAMP=$(date +%s)
EXPIRATION_TIME=$(date -u -d '+1 minutes' '+%Y-%m-%dT%H:%M:%SZ')
# 発信対象の電話番号をJSON配列として準備
PHONE_NUMBERS_JSON='[
"+8190xxxxxxxx",
"+8150xxxxxxxx"
]'
# jqコマンドを使用してリクエスト形式に変換
requests=$(echo "$PHONE_NUMBERS_JSON" | jq \
--arg exp_time "$EXPIRATION_TIME" \
--arg source_phone "$SOURCE_PHONE" \
--arg timestamp "$TIMESTAMP" \
'to_entries |
map({
"clientToken": ("batch-" + $timestamp + "-" + (.key + 1 | . as $n | if $n < 10 then "00" + ($n | tostring) elif $n < 100 then "0" + ($n | tostring) else ($n | tostring) end)),
"expirationTime": $exp_time,
"channelSubtypeParameters": {
"telephony": {
"destinationPhoneNumber": .value,
"connectSourcePhoneNumber": $source_phone,
"attributes": {
"CallType": "Outbound",
"CustomerIndex": (.key | tostring)
}
}
}
})')
# API実行
aws connectcampaignsv2 put-outbound-request-batch \
--id "$CAMPAIGN_ID" \
--outbound-requests "$requests"
実行結果:
{
"successfulRequests": [
{
"clientToken": "batch-1751596427-001",
"id": "8229ad20-5f0b-4796-95b9-d3d1e1887211"
},
{
"clientToken": "batch-1751596427-002",
"id": "496fb0ed-2a14-4a3f-b4fa-ffebff4944fa"
}
],
"failedRequests": []
}
通話結果の確認
着信後の応答状況は、Connectフローの「通話の進捗を確認」ブロックで判定できます。
- 声を発した場合:「呼び出しが応答されました」に遷移
- 声を発しなかった場合:「検出されませんでした」に遷移
AWSドキュメントによると、「検出されませんでした」の状態は以下のように説明されています。
[Not detected] (未検出): ボイスメールであるかどうかを認識できませんでした。これは、通話の応答が人間の音声によるものか、あるいは留守番電話によるものかを、Amazon Connect が明確に判断できない場合に発生します。この状態になる典型的な原因としては、長い沈黙や大きすぎる周囲の雑音などが考えられます。
引用元:https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/check-call-progress.html
アウトバウンドキャンペーン実行後は、Amazon Connectのアウトバウンドキャンペーンのパフォーマンスダッシュボードから実行結果を確認できます。
このダッシュボードでは、キャンペーンの成功率、接続率、エラー状況などの詳細な分析情報を確認できます。
最後に
Amazon Connect Customer Profilesを利用せずに、PutProfileOutboundRequestBatch API経由でアウトバウンドキャンペーンを実行する方法をご紹介しました。
この方法は、以下のようなケースに適しています。
- 毎日異なるユーザーリストに対してキャンペーンを実行したい場合
- Customer Profilesの利用料金を削減したい場合
- プロファイル作成・削除の運用負荷を避けたい場合
一方で、Customer Profiles内の既存ユーザーに対して定期的にキャンペーンを実行する場合は、従来のCustomer Profilesを利用した方法の方が効率的です。
また、API経由の方法ではexpirationTime
が15分以内という制限があるため、即座に実行するキャンペーンに適しています。
用途に応じて最適な方法を選択し、効果的なアウトバウンドキャンペーンを実施してください。