この記事でわかること
- IVR(自動音声応答)とフロー(コールフロー)の関係、最初に覚えるべき基本ブロック
- 「挨拶 → メニュー → キュー転送」の最小フローを管理画面で作る手順
- DTMF(プッシュボタン入力)のメニュー分岐と、1階層/2階層メニューの使い分け
- タイムアウト・無効入力・リトライ・エラー時の処理の作り方
- フローを JSON でエクスポート/インポートするときの読み方
- Service Cloud Voice(SCV)で構築する場合に、フローへ追加する要素(VoiceCall 作成・連携 Lambda・メディアストリーミング)と、SCV のサンプルフローの扱い方
対象読者: Amazon Connect のインスタンスと電話番号を用意し、初めて着信フローを作る方
前提知識: 第1回の内容(インスタンス作成・電話番号の取得)。SCV で構築する場合は、第2回の内容(コンタクトセンター作成〜ソフトフォンで初着信)
キューの作成は次回で解説します。本記事では、インスタンス作成時に自動で作られる BasicQueue を使って試せます。
1. はじめに
Amazon Connect で電話を受けられるようにするには、電話番号にフローを紐付ける必要があります。フローとは、着信した電話を「どんな案内を流し、どこへつなぐか」を決める処理の流れで、管理画面上でブロックを線でつないで作ります。
本記事では、初めてフローを作る方向けに、次の順で解説します。
- IVR と基本ブロックの理解
- 最小フローの作成手順
- DTMF メニュー分岐の設計
- タイムアウト・リトライ・エラー処理
- JSON(フロー言語)の読み方
- よくある失敗とトラブルシューティング
ブロック名は執筆時点の AWS 日本語コンソールの表記と英語表記を併記します。コンソールの表記はアップデートで変わることがあります。
2. IVR とフローの基本
2.1 用語の整理
| 用語 | 意味 |
|---|---|
| IVR(Interactive Voice Response) | 自動音声応答。「○○の方は1番を…」と案内し、顧客の操作に応じて振り分ける仕組み |
| DTMF(Dual-Tone Multi-Frequency) | 電話機のボタンを押したときに送られる信号(プッシュ信号)。IVR はこれで「何番が押されたか」を判別する |
| フロー(Contact flow) | Amazon Connect で IVR を含む通話の処理手順を定義したもの。本記事では「コールフロー」とも呼ぶ |
| ブロック | フローを構成する部品。「プロンプトの再生」「キューへ転送」など1つの処理を表す |
| キュー | エージェント(オペレーター)につながるまで通話が待つ行列 |
| コンタクト属性 | 通話(コンタクト)に付けられるキーと値のデータ。分岐条件やエージェントへの情報受け渡しに使う |
2.2 着信から転送までの全体像
この図は、顧客の電話が IVR を経てエージェントにつながるまでの基本的な流れを表します。
この図のポイント
- 電話番号ごとに「どのフローで受けるか」を設定します。番号にフローを紐付けないと着信は処理されません。
- IVR は「案内を流す → ボタン入力を受け取る → 行き先を決める」の繰り返しです。
- 実際の転送は「作業キューの設定」で行き先を決めてから「キューへ転送」で行う、の 2ステップです。
2.3 最初に覚える基本ブロック
ブロックは管理画面のフローデザイナー左側にあるカテゴリ別の一覧から、キャンバスへドラッグして配置します。まずは次の7つを覚えれば基本の IVR が作れます。
| 日本語コンソール名 / 英語名 | カテゴリ | 役割 | 主な出口(分岐) |
|---|---|---|---|
| ログ記録動作の設定 / Set logging behavior | 設定 | フローの実行ログを CloudWatch Logs に出力する | 成功 |
| 音声の設定 / Set voice | 設定 | 読み上げ(テキスト読み上げ)の言語・音声を選ぶ | 成功 |
| プロンプトの再生 / Play prompt | 操作 | 音声ファイルやテキスト読み上げで案内を流す | 成功 |
| 顧客の入力を取得する / Get customer input | 操作 | 案内を流して DTMF 入力を受け取り、押された番号で分岐する | 条件ごと、タイムアウト、デフォルト、エラー |
| 作業キューの設定 / Set working queue | 設定 | 転送先のキューを決める(この時点ではまだ転送しない) | 成功、エラー |
| キューへ転送 / Transfer to queue | 終了/転送 | 決めたキューに通話を入れる | 容量(キューがいっぱい)、エラー |
| 切断 / Disconnect / hang up | 終了/転送 | 通話を終了する | なし |
ポイント
- 「顧客の入力を取得する」は案内の再生と入力受付を1つのブロックで行えます。メニュー案内のために別途「プロンプトの再生」を置く必要はありません。
- エラー出口を未接続のままにするとフローを公開できません(主要ブロックの出口はすべて接続が必要)。
- 分岐が増えてきたら、「コンタクト属性を確認する / Check contact attributes」で属性値による分岐を、「ループ / Loop」で繰り返し回数の制御を行います(後述)。
3. 最小フローを作る
3.1 完成イメージ
この図は、これから作る「挨拶して1番/2番で振り分け、入力がなければ総合窓口へ」という最小構成のフローを表します。
この図のポイント
- 入力がない・想定外の番号が押された場合も必ずどこかのキューへつなぐか、案内して切断します。行き止まりを作らないことが最重要です。
- エラー時の受け皿(「おつなぎできません」→切断)を1つ用意し、各ブロックのエラー出口をまとめてつなぐと見通しが良くなります。
- 「作業キューの設定」の3つのエラー出口はすべて同じ受け皿につなぎます(図では1本のみ表記)。
3.2 管理画面での作成手順
- Amazon Connect 管理画面 > ルーティング > フロー を開き、「フローを作成」をクリックします(フローの種類は「問い合わせフロー(着信)」)。
- 画面上部でフロー名を入力します(例:
Main_IVR_Basic)。 - 左側のブロック一覧から次のブロックをドラッグし、上の図の順に線でつなぎます。
| 順番 | ブロック | 設定内容 |
|---|---|---|
| 1 | ログ記録動作の設定 / Set logging behavior | 「フローログを有効にする」を選択 |
| 2 | 音声の設定 / Set voice | 言語: 日本語、音声: 任意の日本語音声(例: Kazuha、Takumi など。選べる音声は執筆時点のもの) |
| 3 | プロンプトの再生 / Play prompt | 「テキスト読み上げまたはチャットテキスト」を選び「お電話ありがとうございます。」 |
| 4 | 顧客の入力を取得する / Get customer input | 案内文「営業のご用件は1を、サポートは2を押してください。」、タイムアウト 5秒、条件に 1 と 2 を追加 |
| 5 | 作業キューの設定 / Set working queue(3つ) | 「キューごと」で営業キュー/サポートキュー/総合窓口キューを選択(試すだけなら3つとも BasicQueue で可) |
| 6 | キューへ転送 / Transfer to queue | 「キューへ転送」タブのまま設定不要 |
| 7 | プロンプトの再生 / Play prompt(エラー用) | 「申し訳ございません。ただいまおつなぎできません。」 |
| 8 | 切断 / Disconnect / hang up | 設定不要 |
- すべての出口(成功・条件・タイムアウト・デフォルト・エラー・容量)が接続されていることを確認し、「保存」→「公開」をクリックします。保存だけでは着信に反映されません。
- Amazon Connect 管理画面 > チャネル > 電話番号 で第1回で取得した番号をクリックし、「フロー/IVR」に作成したフローを選んで保存します。
- 実際にその番号へ電話をかけ、1・2・無入力のそれぞれで想定どおり動くか確認します。
「顧客の入力を取得する」で条件を追加するには、ブロック設定の「条件」セクションで「別の条件を追加」をクリックし、値に
1などを入力します。条件を追加した数だけ出口が増えます。
4. DTMF メニューの設計パターン
4.1 1階層メニューと2階層メニュー
この図は、最初のメニューで用件の分類を聞き、必要な分類だけ2段目のメニューで詳細を聞く「2階層メニュー」の構成を表します。
この図のポイント
- 2段目で入力がなかった場合は、1段目に戻すよりも「その分類の共通キュー」へつなぐほうが顧客の負担が少なくなります。
- 「前のメニューに戻る」を用意する場合は、番号を全メニューで統一します(例: 常に
9)。 - 図ではエラー出口を省略していますが、実際のフローでは各ブロックのエラー出口もすべて接続します。
4.2 パターンの比較
| パターン | 構成 | 向いているケース | 注意点 |
|---|---|---|---|
| 1階層 | メニュー1回でキューを決定 | 窓口が2〜4個の小規模センター | 選択肢が5個を超えると覚えきれない |
| 2階層 | 分類 → 詳細の2回 | 窓口が5〜10個程度 | 2段目の無入力時の行き先を決めておく |
| 3階層以上 | 分類 → 詳細 → さらに詳細 | 原則おすすめしない | 顧客が途中で離脱しやすい。音声認識(Amazon Lex)や、Lambda による顧客情報からの自動振り分けを検討する |
4.3 メニュー設計のコツ
- 1メニューの選択肢は3〜4個まで。人が一度に聞いて覚えられる数には限りがあります。
- よく選ばれる用件を先に案内します。番号を最後まで聞かなくても選べるよう、「顧客の入力を取得する」では案内中の入力(割り込み)が既定で受け付けられます。
- 案内文は「用件 → 番号」の順にします(「営業のご用件は1を」)。「1番は営業」だと、用件を聞き終える前に番号を忘れがちです。
- オペレーターと話したい人の逃げ道(例: 「その他のご用件は0を」)を用意します。
- 複数桁の入力(会員番号など)を受け取る場合は、「顧客の入力を取得する」で「顧客の入力を保存」(電話番号/カスタム)を選び、保存された値
$.StoredCustomerInputを「コンタクト属性の設定」で属性に保存して使います。
5. タイムアウト・リトライ・エラー処理
IVR の品質は「想定外の操作をしたときにどうなるか」で決まります。ここでは次の3つを扱います。
| 状況 | 発生する出口 | 推奨する対応 |
|---|---|---|
| 何も押さない | タイムアウト / Timeout | 「もう一度ご案内します」と言って再案内(最大2回程度) |
| メニューにない番号を押す | デフォルト / Default | 「入力が正しくありません」と言って再案内 |
| システム側の問題(キュー未設定など) | エラー / Error | お詫びを流して総合窓口へつなぐか、切断 |
| キューが上限に達している | 容量 / At capacity(キューへ転送) | 混雑の案内を流し、別キューへ転送するか切断 |
5.1 リトライ(再案内)の作り方
この図は、無入力・無効入力のときに「ループ」ブロックで再案内を最大2回まで行い、それでも決まらなければ総合窓口につなぐ流れを表します。
この図のポイント
- 「ループ / Loop」ブロックは、指定回数までは「ループ中」出口、回数を超えると「完了」出口に進みます。これで無限ループを防げます。
- 最終的に決まらない場合も切断ではなく総合窓口へつなぐのが基本です(顧客は用件があって電話しているため)。
- タイムアウトと無効入力で案内文を分けると、顧客が「何を間違えたか」を理解しやすくなります。
ブロックの設定値の目安は次のとおりです。
| ブロック | 設定項目 | 推奨値 | 理由 |
|---|---|---|---|
| 顧客の入力を取得する | タイムアウト | 5〜8秒 | 短すぎると高齢の方などが間に合わず、長すぎると無音が続き不安になる |
| ループ | ループ回数 | 2 | 初回 + 再案内2回の計3回程度が一般的な上限 |
| プロンプトの再生 | 案内の長さ | 1文・10〜15秒以内 | 長い案内は途中で聞き流されやすい |
ループ回数の数え方(初回を含むかどうか)は、実際に電話をかけて想定回数で「完了」に進むか必ず確認してください。
5.2 エラー・容量超過時の処理
この図は、キュー設定や転送でエラーが起きたとき、および転送先キューがいっぱいのときの代替ルートを表します。
この図のポイント
- 「作業キューの設定」のエラーは、キューが削除された・指定した属性値にキューがない、などで起こります。代替キューへ回す経路を作っておきます。
- 「容量」出口は、キューの「最大コンタクト数」の上限に達したときに進みます(上限はキュー側で設定)。
- 最後の受け皿(お詫び → 切断)は1か所にまとめ、どのエラーからもそこへつながるようにします。
6. コンタクト属性で情報を引き継ぐ
IVR で選ばれたメニューをエージェントに伝えたり、後の分岐で使ったりするには、コンタクト属性に保存します。
- メニューの各条件出口の直後に「コンタクト属性の設定 / Set contact attributes」を置きます。
- 「ユーザー定義」名前空間で、キー
menu_selection、値sales(またはsupport)を設定します。 - 後続で値を使って分岐したい場合は「コンタクト属性を確認する / Check contact attributes」で、名前空間「ユーザー定義」、キー
menu_selectionを指定し、条件「次と等しい」salesなどを追加します。
ポイント
- 保存した属性は、コンタクトレコード(CTR: Contact Trace Record、通話ごとの記録データ)にも残るため、後から「どのメニューが多く選ばれたか」を集計できます。
- Salesforce 連携(次回以降)では、この属性を画面ポップ(着信時に顧客情報を自動表示する機能)やエージェント画面での表示に利用します。
- 属性のキー名は英数字とアンダースコアで統一しておくと、Lambda や Salesforce 側で扱いやすくなります。
7. フローを JSON で読む(フロー言語)
Amazon Connect のフローは、フローデザイナー右上の「エクスポート」で JSON ファイルとして書き出し、「インポート」で別インスタンスへ取り込めます。この JSON の形式を フロー言語(Flow language) と呼びます。
7.1 JSON の全体構造
| キー | 内容 |
|---|---|
Version |
フロー言語のバージョン(執筆時点のエクスポートでは "2019-10-30") |
StartAction |
最初に実行するアクションの Identifier
|
Metadata |
画面上のブロック位置などの表示情報(エクスポート時に付く。手で書く必要はない) |
Actions |
ブロック(アクション)の配列。各要素が Identifier・Type・Parameters・Transitions を持つ |
コンソールのブロック名と JSON の Type は名前が異なるので、対応表を押さえておくと読みやすくなります。
| コンソール名(日本語 / 英語) | JSON の Type
|
|---|---|
| ログ記録動作の設定 / Set logging behavior | UpdateFlowLoggingBehavior |
| 音声の設定 / Set voice | UpdateContactTextToSpeechVoice |
| プロンプトの再生 / Play prompt | MessageParticipant |
| 顧客の入力を取得する / Get customer input | GetParticipantInput |
| ループ / Loop | Loop |
| 作業キューの設定 / Set working queue | UpdateContactTargetQueue |
| キューへ転送 / Transfer to queue | TransferContactToQueue |
| 切断 / Disconnect / hang up | DisconnectParticipant |
7.2 最小フローの JSON 例
3章の最小フローを、エクスポート形式に合わせて記述した例です(Metadata は省略。キューの ARN はダミー値)。
{
"Version": "2019-10-30",
"StartAction": "set-logging",
"Actions": [
{
"Identifier": "set-logging",
"Type": "UpdateFlowLoggingBehavior",
"Parameters": { "FlowLoggingBehavior": "Enabled" },
"Transitions": { "NextAction": "set-voice" }
},
{
"Identifier": "set-voice",
"Type": "UpdateContactTextToSpeechVoice",
"Parameters": { "TextToSpeechVoice": "Takumi" },
"Transitions": {
"NextAction": "play-welcome",
"Errors": [{ "NextAction": "play-welcome", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "play-welcome",
"Type": "MessageParticipant",
"Parameters": { "Text": "お電話ありがとうございます。" },
"Transitions": {
"NextAction": "get-menu",
"Errors": [{ "NextAction": "get-menu", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "get-menu",
"Type": "GetParticipantInput",
"Parameters": {
"Text": "営業のご用件は1を、サポートのご用件は2を押してください。",
"StoreInput": "False",
"InputTimeLimitSeconds": "5"
},
"Transitions": {
"NextAction": "set-queue-general",
"Conditions": [
{
"NextAction": "set-queue-sales",
"Condition": { "Operator": "Equals", "Operands": ["1"] }
},
{
"NextAction": "set-queue-support",
"Condition": { "Operator": "Equals", "Operands": ["2"] }
}
],
"Errors": [
{ "NextAction": "set-queue-general", "ErrorType": "InputTimeLimitExceeded" },
{ "NextAction": "set-queue-general", "ErrorType": "NoMatchingCondition" },
{ "NextAction": "play-error", "ErrorType": "NoMatchingError" }
]
}
},
{
"Identifier": "set-queue-sales",
"Type": "UpdateContactTargetQueue",
"Parameters": {
"QueueId": "arn:aws:connect:ap-northeast-1:123456789012:instance/INSTANCE_ID/queue/SALES_QUEUE_ID"
},
"Transitions": {
"NextAction": "transfer-to-queue",
"Errors": [{ "NextAction": "play-error", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "set-queue-support",
"Type": "UpdateContactTargetQueue",
"Parameters": {
"QueueId": "arn:aws:connect:ap-northeast-1:123456789012:instance/INSTANCE_ID/queue/SUPPORT_QUEUE_ID"
},
"Transitions": {
"NextAction": "transfer-to-queue",
"Errors": [{ "NextAction": "play-error", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "set-queue-general",
"Type": "UpdateContactTargetQueue",
"Parameters": {
"QueueId": "arn:aws:connect:ap-northeast-1:123456789012:instance/INSTANCE_ID/queue/GENERAL_QUEUE_ID"
},
"Transitions": {
"NextAction": "transfer-to-queue",
"Errors": [{ "NextAction": "play-error", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "transfer-to-queue",
"Type": "TransferContactToQueue",
"Parameters": {},
"Transitions": {
"NextAction": "play-error",
"Errors": [
{ "NextAction": "play-error", "ErrorType": "QueueAtCapacity" },
{ "NextAction": "play-error", "ErrorType": "NoMatchingError" }
]
}
},
{
"Identifier": "play-error",
"Type": "MessageParticipant",
"Parameters": { "Text": "申し訳ございません。ただいまおつなぎできません。" },
"Transitions": {
"NextAction": "disconnect",
"Errors": [{ "NextAction": "disconnect", "ErrorType": "NoMatchingError" }]
}
},
{
"Identifier": "disconnect",
"Type": "DisconnectParticipant",
"Parameters": {},
"Transitions": {}
}
]
}
7.3 JSON を読むときのポイント
-
Transitions.NextActionが通常の次の行き先、Conditionsが条件ごとの分岐、Errorsがエラー出口です。 - 「顧客の入力を取得する」(
GetParticipantInput)では、タイムアウトがInputTimeLimitExceeded、メニューにない入力(デフォルト)がNoMatchingConditionというErrorTypeで表されます。 -
Parametersの値は、数値でも"5"のように文字列で書かれる項目があります。 - 実際のエクスポートでは
Identifierが UUID 形式になり、画面座標などのMetadataが付きます。JSON を一から手書きするより、管理画面で作ってエクスポートしたものを読む・差分管理する用途がおすすめです。 - インポート時、キュー ARN やプロンプトなどインスタンス固有のリソースはインポート先に存在するものを指定し直す必要があります。
パラメータ名や
ErrorTypeは執筆時点の公式ドキュメント「Amazon Connect フロー言語」に基づきます。仕様は更新されることがあるため、実際に自分の環境でエクスポートした JSON と照らし合わせてください。
8. よくある失敗(アンチパターン)
| アンチパターン | 何が起きるか | 対策 |
|---|---|---|
| タイムアウト・デフォルト出口を再案内に戻すだけ | 顧客が無言のまま再案内が延々と続く(無限ループ) | 「ループ」ブロックで回数を制限し、上限後は総合窓口へ |
| エラー出口を「とりあえず切断」につなぐ | 一時的な不具合で全通話が切断される | 代替キュー → お詫び → 切断の順に受け皿を用意 |
| 1回の案内に選択肢を6個以上入れる | 顧客が覚えきれず、無効入力やオペレーター直行が増える | 3〜4個に絞り、必要なら2階層に分ける |
| 3階層以上のメニュー | 途中離脱(放棄呼)が増える | 階層は2段まで。それ以上は音声認識や顧客情報による自動振り分けを検討 |
| 「保存」だけして「公開」しない | 修正したのに着信の動作が変わらない | 変更後は必ず「公開」し、テスト電話で確認 |
| 1つのフローに全処理を詰め込む | ブロック数が増えて保守・テストが困難になる | 共通処理(エラー時の案内など)は別フローに分け、「フローへ転送 / Transfer to flow」で呼び出す |
ポイント
- フローあたりのブロック数などには上限があります。具体的な値は Service Quotas または公式ドキュメント「Amazon Connect のサービスクォータ」で確認してください(値は変更されることがあります)。
- 目安として、1つのフローが画面に収まらなくなったら分割を検討します。
9. テストとトラブルシューティング
9.1 公開前のテスト項目
| 区分 | テスト内容 | 期待結果 |
|---|---|---|
| 正常系 |
1 を押す |
営業キューにつながる |
| 正常系 |
2 を押す |
サポートキューにつながる |
| 正常系 | 案内の途中で番号を押す | 案内が止まり、すぐに分岐する |
| 異常系 | 何も押さない | 再案内 → 上限後に総合窓口へ |
| 異常系 |
5 などメニューにない番号 |
「入力が正しくありません」→ 再案内 |
| 異常系 | キューの最大コンタクト数を一時的に小さくする | 混雑案内 → 代替ルートへ |
| 運用 | 営業時間外にかける(営業時間判定を入れた場合) | 時間外案内が流れる |
9.2 よくあるトラブル
| 症状 | 主な原因 | 確認・対処 |
|---|---|---|
| フローを公開できない | 未接続の出口がある、必須設定(キュー未選択など)が空 | 公開時のエラー表示で該当ブロックを確認し、全出口を接続 |
| 電話をかけても既定の案内が流れる | 電話番号にフローを紐付けていない、または公開していない | チャネル > 電話番号 でフロー/IVR の設定を確認。フローの「公開」を確認 |
| ボタンを押しても反応しない | 条件の値の誤り(全角数字など)、タイムアウトが短すぎる | 条件値が半角 1 か確認。タイムアウトを5〜8秒に |
| 読み上げが英語なまり・不自然 | 「音声の設定」で日本語音声を選んでいない | フロー先頭で日本語の音声を設定 |
| 再案内から抜けられない | ループ回数を設定していない、出口のつなぎ間違い | 「ループ」の「完了」出口が総合窓口へつながっているか確認 |
| エージェント画面にメニュー選択結果が出ない | 属性を設定していない、キー名の不一致 | 「コンタクト属性の設定」のキー名と、表示側で参照しているキー名を照合 |
9.3 ログで原因を調べる
フロー先頭の「ログ記録動作の設定」を有効にしておくと、各ブロックの実行結果が CloudWatch Logs のロググループ /aws/connect/<インスタンス名> に出力されます。
AWS マネジメントコンソール > CloudWatch > ログ > Logs Insights で次のように検索すると、特定の通話がどのブロックを通ったか追えます。
fields @timestamp, ContactFlowModuleType, Identifier, Results
| filter ContactId = "コンタクトID"
| sort @timestamp asc
- コンタクト ID は、Amazon Connect 管理画面 > 分析と最適化 > コンタクトの検索 で通話を探すと確認できます。
- ログには
ContactFlowModuleType(ブロックの種類)とResults(どの出口に進んだか)などが記録されます。項目名は執筆時点のものです。
10. ベストプラクティスまとめ
| 観点 | 推奨 |
|---|---|
| 構成 | フロー先頭で「ログ記録動作の設定」「音声の設定」を行う |
| 案内文 | 「用件 → 番号」の順、1文10〜15秒以内、選択肢は3〜4個 |
| 入力待ち | タイムアウト5〜8秒、再案内は「ループ」で2回まで |
| 行き止まり防止 | すべての出口を接続。最終的には総合窓口へつなぐ |
| エラー時 | 代替キュー → お詫び → 切断の受け皿を1か所に用意 |
| 情報の引き継ぎ | 選択結果を「コンタクト属性の設定」で保存(集計・画面表示に利用) |
| 運用 | 変更後は必ず「公開」→テスト電話。JSON をエクスポートしてバージョン管理 |
11. Service Cloud Voice で構築する場合
Service Cloud Voice(SCV。Salesforce のヘルプでは現在「Salesforce Voice」と表記)で構築する場合も、フローを作る場所は Amazon Connect の管理画面で、本記事の基本ブロック・メニュー設計・エラー処理はそのまま使えます。違いは、着信を Salesforce に記録し、オペレーターのソフトフォンに届けるための連携用の要素をフローに追加する点です。コンタクトセンターの作成と初着信の手順は第2回を参照してください。
11.1 Connect 単体との違い
| 観点 | Connect 単体 | SCV |
|---|---|---|
| フローを作る場所 | Amazon Connect 管理画面 > ルーティング > フロー | 同じ(Salesforce 側でフローは作らない) |
| 着信の記録 | Amazon Connect のコンタクトレコード(CTR)のみ | CTR に加え、Salesforce に VoiceCall(音声通話)レコードを作成する |
| 外部連携 | 必要に応じて自作の Lambda を呼ぶ | SCV が用意する連携用 Lambda(InvokeTelephonyIntegrationApiFunction など。名前は環境により異なる)を「AWS Lambda 関数を呼び出す」ブロックで呼ぶ |
| リアルタイム文字起こし | 使う場合は Contact Lens(現 conversational analytics)を設定 | 文字起こしを Salesforce に表示する構成では、「メディアストリーミングの開始」ブロックなどが必要になる場合がある(方式は SCV の版で異なる) |
| 用意されるフロー | インスタンス作成時の既定フロー | 上記に加え、SCV がサンプルフロー・Lambda を自動で追加する |
| 応答する画面 | CCP(コンタクトコントロールパネル) | Salesforce の Service Console に組み込まれたソフトフォン |
11.2 SCV 用に追加するフロー要素
この図は、第3章の最小フローに SCV 連携の要素(青い部分)を足した流れを表します。
この図のポイント
- VoiceCall 作成: 連携 Lambda を呼び、Salesforce に VoiceCall レコードを作ります。オペレーターの画面に通話情報を出す土台になります。
- メディアストリーミングの開始: 通話音声を取り出すブロックです。リアルタイム文字起こしを使うときに配置します。
- Lambda が失敗しても通話は止めない: 連携 Lambda のエラー・タイムアウト出口は IVR に戻し、Salesforce 側の記録が欠けてもお客様がつながるようにします。第5章のエラー処理、第10章の「行き止まり防止」と同じ考え方です。
「AWS Lambda 関数を呼び出す」ブロックのタイムアウトは、同期モードで最大 8 秒(非同期モードは最大 60 秒)です。SCV の連携 Lambda はしばらく呼ばれないとコールドスタート(初回起動の待ち)で遅くなるため、その時間も 8 秒の中に入れて考えます。
11.3 SCV のサンプルフローの扱い
- SCV のセットアップを行うと、Amazon Connect 側に連携用の Lambda とサンプルフローが追加されます(Amazon Connect 管理画面 > ルーティング > フロー で確認)。
- サンプルフロー(SCV が作る既定フロー)は直接編集しません。SCV の更新で上書きされたり、どこを変えたか分からなくなったりするためです。自前のフローを作り、その中から連携 Lambda を呼ぶ、または必要なブロックを参考にして組み込みます。
- 自前のフローはJSON をエクスポートし、バージョン管理します。SCV が AWS 側に作る Lambda・IAM ロールは SCV の管理下にあるため、自前の IaC(コードでのインフラ管理)と二重に管理しないようにします。
- 電話番号に紐付けるのは自前のフローです(チャネル > 電話番号 で設定)。
連携 Lambda の名前・入力パラメータ、サンプルフローの名前と構成、文字起こしに必要なブロックは、SCV の版や構築方式(Salesforce からインスタンスを作る方式/既存インスタンスを持ち込む方式)で異なります。本節の内容は執筆時点のものです。実際の設定は Salesforce の Voice 開発者ガイドと AWS のドキュメントで確認してください。
12. まとめ
- IVR は「案内 → DTMF 入力 → 行き先決定 → 転送」の組み合わせで、まずは7つの基本ブロックで作れます。
- 転送は「作業キューの設定」→「キューへ転送」の2ステップです。
- 「顧客の入力を取得する」のタイムアウト・デフォルト・エラー出口を必ず処理し、「ループ」で再案内回数を制限します。
- メニューは1階層3〜4択を基本に、多くても2階層までにします。
- JSON(フロー言語)は、エクスポートしたものを読む・管理する用途で使うのがおすすめです。
- SCV では、自前のフローに VoiceCall 作成(連携 Lambda)や、必要に応じてメディアストリーミングの開始を追加します。SCV のサンプルフローは直接編集しません。
次回は、本記事で転送先として使ったキューの作成と、エージェントへの割り当て(ルーティングプロファイル)を詳しく解説します。
参考資料
- Amazon Connect 管理者ガイド: フローブロックの定義(顧客の入力を取得する、作業キューの設定、キューへ転送、ループ 等)https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/contact-block-definitions.html
- Amazon Connect 管理者ガイド: フローの作成 / フローのインポートとエクスポート https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/contact-flow-import-export.html
- Amazon Connect 管理者ガイド: フローログの使用(CloudWatch Logs) https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/contact-flow-logs.html
- Amazon Connect 管理者ガイド: Amazon Connect のサービスクォータ https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/amazon-connect-service-limits.html
- Amazon Connect 管理者ガイド: フローブロック「AWS Lambda 関数を呼び出す」 https://docs.aws.amazon.com/connect/latest/adminguide/invoke-lambda-function-block.html
- Amazon Connect 管理者ガイド: フローブロック「メディアストリーミングの開始」 https://docs.aws.amazon.com/connect/latest/adminguide/start-media-streaming.html
- Salesforce Voice Developer Guide: InvokeTelephonyIntegrationApiFunction Lambda https://developer.salesforce.com/docs/atlas.en-us.voice_developer_guide.meta/voice_developer_guide/voice_lambda_invoketelephonyintegration.htm
前回: 第2回 Amazon Connect × Service Cloud Voice 構築手順:コンタクトセンター作成からソフトフォンで初着信まで