はじめに
こんばんは、mirukyです。
新しい試みをしており、かなり間が空いてしまいましたが、【Amazon Lex #3】Lambda連携で動的な応答を返せるようにしてみようの続編、Amazon Lex シリーズ第4回です。
前回(#3)では、Lambda連携で動的な応答を返すボットを構築しました。
今回は、構築したLexボットをAmazon Connectに統合し、電話で操作できる音声ボットを構築します。
テキストチャットとして動作していたボットを電話回線に繋ぐと、ユーザーは電話をかけるだけで注文状況を確認できるようになります。コンタクトセンターの自動応答(IVR)を、従来のボタン操作型から自然言語対話型に進化させるイメージです。
出典:Amazon Connect で Amazon Lex ボットを使用する - AWS
目次
- Connect × Lex統合のアーキテクチャ
- 前提条件
- ConnectインスタンスへのLexボット追加
- コンタクトフローの作成
- 電話番号の割り当て
- テストと動作確認
- 音声対話設計のポイント
- 料金について
- おわりに
1. Connect × Lex統合のアーキテクチャ
1-1. 全体構成
電話回線(PSTN)
↓
Amazon Connect(コンタクトフロー)
↓
「顧客の入力を取得する」ブロック
↓
Amazon Lex V2(音声認識 + NLU)
↓
AWS Lambda(ビジネスロジック)
↓
応答をAmazon Pollyで音声合成
↓
電話回線経由でユーザーに応答
1-2. 統合のポイント
| ポイント | 説明 |
|---|---|
| 音声品質 | Connect経由の音声は8kHz(電話品質)。Lexは8kHzに最適化されたASRを提供 |
| 音声合成 | LexのレスポンスはAmazon Pollyで自動的に音声合成される |
| DTMF入力 | 音声に加えてプッシュボタン入力(DTMF)にも対応可能 |
| セッション管理 | Connectのコンタクトフロー内でLexのセッション属性を読み書きできる |
2. 前提条件
今回のハンズオンでは、以下が準備済みであることを前提とします。
Amazon Connectの詳しい部分に関しては、以前5回に分けて解説した記事を作成しておりますので、そちらをご覧いただければ幸いです。
→mirukyのAmazon Connect解説記事ストックリスト
| 前提条件 | 詳細 |
|---|---|
| Amazon Connectインスタンス | 東京リージョンで作成済み |
| 電話番号 | Connectインスタンスに電話番号を取得済み |
| Lexボット | #2・#3で構築したCustomerSupportBotがビルド済み |
| Lambda関数 | #3で作成したlex-order-lookupがデプロイ済み |
Amazon Connectインスタンスの作成方法
Connectインスタンスをまだお持ちでない場合は、Amazon Connectの公式ドキュメントを参照して作成してください。
3. ConnectインスタンスへのLexボット追加
3-1. Lexボットの追加設定
- AWSマネジメントコンソールで Amazon Connect を開く
- 使用するインスタンスの 「インスタンスエイリアス」 をクリック
- 左側ペインの 「問い合わせフロー」 を選択
- 「Amazon Lex」 セクションまでスクロール
- 「Amazon Lex ボットを追加」 をクリック
| 設定項目 | 値 |
|---|---|
| ボット | CustomerSupportBot |
| エイリアス |
TestBotAlias(テスト用)または Production
|
| リージョン | ap-northeast-1(東京) |
6.「Amazon Lex ボットを追加」 をクリック
Lexボットのリージョンに注意
ConnectインスタンスとLexボットが同じリージョンにある場合はそのまま指定できます。異なるリージョンのLexボットを使用する場合は、クロスリージョン設定が必要です。
4. コンタクトフローの作成
4-1. コンタクトフロー設計画面を開く
- Amazon Connectの管理画面(ダッシュボード)にログイン
- 左側ペインの 「ルーティング」 → 「フロー」 を選択
- 「フローを作成」 をクリック
4-2. フロー名の設定
| 設定項目 | 値 |
|---|---|
| フロー名 | Lex注文確認フロー |
4-3. フローの構成
以下のブロックを順番につなげてフローを構成します。
エントリポイント
↓
①「音声の設定」ブロック
↓
②「プロンプトの再生」ブロック(ウェルカムメッセージ)
↓
③「顧客の入力を取得する」ブロック(Lex連携)
↓
④「プロンプトの再生」ブロック(終了メッセージ)
↓
⑤「切断」ブロック
4-4. 各ブロックの設定
①「音声の設定」ブロック
| 設定項目 | 値 |
|---|---|
| 言語 | 日本語 |
| 音声 | Kazuha(Neural) |
| 言語属性を設置絵 | 現在選択されている言語を属性として使用します。 |
②「プロンプトの再生」ブロック
| 設定項目 | 値 |
|---|---|
| テキスト読み上げまたはチャットテキスト→手動で設定 | お電話ありがとうございます。カスタマーサポートです。ご用件をお話しください。注文の確認も承ります。 |
③「顧客の入力を取得する」ブロック(重要)
| 設定項目 | 値 |
|---|---|
| タブ | Amazon Lex |
| Amazon Lexのボット | CustomerSupportBot |
| エイリアス | TestBotAlias |
| テキスト読み上げまたはチャットテキスト→手動で設定 | ご用件をお話しください。 |
| インテント |
CheckOrderStatus、Greeting
|
「顧客の入力を取得する」ブロックの分岐
このブロックでは、Lexが認識したインテントに応じて分岐先を設定できます。
| 分岐 | 説明 |
|---|---|
| CheckOrderStatus | 注文確認インテントが認識された場合 |
| Greeting | 挨拶インテントが認識された場合 |
| エラー | Lexとの通信エラーが発生した場合 |
| デフォルト | 上記以外(FallbackIntentを含む) |
各分岐先に適切なブロックを接続してください。
④「プロンプトの再生」ブロック(終了メッセージ)
| 設定項目 | 値 |
|---|---|
| テキスト読み上げ | ご利用ありがとうございました。それでは失礼いたします。 |
⑤「切断」ブロック
通話を終了します。設定不要でそのまま配置します。
4-5. フローの保存と公開
- 画面右上の 「保存」 をクリック
- 「公開」 をクリック
「公開」を忘れると動作しません
「保存」だけではフローは有効になりません。必ず 「公開」 をクリックしてフローをアクティブにしてください。
5. 電話番号の割り当て
5-1. 電話番号にフローを紐付ける
- Amazon Connect管理画面の左メニュー → 「チャネル」 → 「電話番号」
- 使用する電話番号をクリック
-
「問い合わせフロー / IVR」 に
Lex注文確認フローを選択 - 「保存」 をクリック
6. テストと動作確認
6-1. 電話でテスト
設定が完了したら、割り当てた電話番号に実際に電話をかけてテストします。
6-2. 期待される会話フロー
システム:お電話ありがとうございます。カスタマーサポートです。ご用件をお話しください。注文の確認も承ります。
ユーザー:「注文の状況を確認したいです」
システム:「注文番号をお教えください。」
ユーザー:「ORD-001」
システム:「注文番号 ORD-001 の情報です。商品はワイヤレスイヤホンで、配送中です。お届け予定日は2026年3月10日です。」
システム:「ご利用ありがとうございました。それでは失礼いたします。」(通話終了)
6-3. テストのチェックポイント
| 確認項目 | 確認内容 |
|---|---|
| ウェルカムメッセージ | 最初のプロンプトが正しく再生されるか |
| 音声認識 | ユーザーの発話が正しくテキスト化されるか |
| インテント認識 | 正しいインテントが選択されるか |
| Lambda応答 | 注文情報が正しく返されるか |
| 音声合成 | 応答が自然な日本語で読み上げられるか |
| 通話終了 | フローの最後で正しく切断されるか |
音声認識がうまくいかない場合
電話品質(8kHz)の音声は、コンソールのテストよりも認識精度が下がる場合があります。特に「ORD-001」のような英数字の混在は音声認識が難しいケースです。
対策としては以下が有効です。
- DTMF入力も併用する(注文番号はプッシュボタンで入力)
- サンプル発話を追加する(「おーあーるでぃーゼロゼロいち」のような日本語読みも登録)
- カスタムボキャブラリーを設定する(#5で詳しく解説)
これらのテクニックは#5・#6で詳しく解説します。
7. 音声対話設計のポイント
7-1. テキストボットとの違い
電話での音声対話は、テキストチャットとは異なる設計上の考慮が必要です。
| 観点 | テキストボット | 音声ボット |
|---|---|---|
| 入力手段 | キーボード入力 | 音声発話 |
| 応答の確認 | 画面上で読み返せる | 聞き逃すと戻れない |
| 応答の長さ | 長文もOK | 短く簡潔に |
| エラー時 | 再入力が容易 | 聞き直しが発生しストレスに |
| 認識精度 | 高い(テキストそのまま) | 環境音やアクセントの影響を受ける |
7-2. 音声ボット設計のベストプラクティス
| プラクティス | 説明 |
|---|---|
| 応答は短く簡潔に | 長文は聞き取りづらい。1応答1メッセージを意識 |
| 確認を挟む | 重要な値(注文番号等)は復唱して確認をとる |
| DTMF併用 | 英数字はプッシュボタン入力を選択肢として提供 |
| タイムアウト設定 | 無言時間のタイムアウトを適切に設定 |
| エスカレーション | 認識がうまくいかない場合にオペレーターに繋ぐ導線を用意 |
| SSMLの活用 | 読み上げ速度やポーズをSSMLタグで制御 |
SSML(Speech Synthesis Markup Language)の例
応答テキストにSSMLタグを使うと、音声合成をより細かく制御できます。
<speak>
注文番号 <say-as interpret-as="spell-out">ORD-001</say-as> の情報です。
<break time="500ms"/>
商品は、ワイヤレスイヤホンです。
ステータスは、<emphasis level="strong">配送中</emphasis>です。
</speak>
8. 料金について
| サービス | 料金 | 備考 |
|---|---|---|
| Amazon Connect | 通話時間(分単位)+ 電話番号の月額利用料 | 従量課金 |
| Amazon Lex | 音声: $0.004/リクエスト | 電話経由は音声リクエストとして課金 |
| AWS Lambda | リクエスト数 + 実行時間 | 無料利用枠あり |
| Amazon Polly | 文字数に応じた従量課金 | Connectからの音声合成に適用 |
Connect経由のLex利用は音声リクエスト扱い
コンソールのテスト(テキスト)では$0.00075/リクエストですが、Connect経由の音声ボットでは**$0.004/リクエスト**になります。テキストの約5倍のコストになるため、コスト見積もり時はご注意ください。
最新の料金は公式ページをご確認ください。
ハンズオン終了後のリソース管理
Connectの電話番号は保持しているだけで月額料金が発生します。テスト終了後に使用しない場合は、電話番号の解放を検討してください。
9. おわりに
ここまでお読みいただきありがとうございます。
今回は、#2・#3で構築したLexボットをAmazon Connectに統合し、電話で注文確認ができる音声ボットを構築しました。
電話回線からの音声認識は、テキスト入力と比べて認識精度に課題が出やすいポイントです。次回#5では、カスタムスロットタイプ・サンプル発話の設計・Runtime Hints API・DTMF入力・信頼度スコアの活用など、音声認識精度を高めるための具体的なテクニックを解説します。
ではまた、お会いしましょう。







