はじめに
こんばんは、mirukyです。
Amazon Connect シリーズ第3回です。
前回は、プッシュボタン分岐付きの音声ガイダンス(IVR)を構築しました。今回は一歩進んで、AIが顧客の質問に自動で回答する電話ボットを構築します。
使用するのは、Amazon Lex(会話型AI)、AWS Lambda(サーバーレス関数)、そして Amazon Bedrock(生成AI基盤)です。
顧客が電話で「料金プランを教えて」と話しかけると、あらかじめ用意したFAQ文書からAIが最適な回答を生成して音声で返答する、という仕組みを作ります。
前回のプッシュボタン操作(DTMF)から、自然言語での対話への進化です。
目次
- 今回のシステム構成
- 事前準備:Bedrockモデルの利用確認
- FAQ文書の準備(S3)
- Bedrock ナレッジベースの作成
- Lambda 関数の作成
- Amazon Lex ボットの作成
- Amazon Connect に Lex ボットを連携する
- コンタクトフローの作成
- 動作確認
- 料金について
- おわりに
1. 今回のシステム構成
| サービス | 役割 |
|---|---|
| Amazon Connect | 電話チャネル(IVR)・音声合成 |
| Amazon Lex V2 | 会話管理・音声認識・Lambdaへの橋渡し |
| AWS Lambda | Bedrock ナレッジベースへの問い合わせ処理 |
| Amazon Bedrock | ナレッジベース検索 + 生成AI応答(Claude) |
| Amazon S3 | FAQ文書の格納先 |
前回(#2)との違い
前回はプッシュボタン(DTMF)入力でしたが、今回は顧客が自然な言葉で話しかけると、AIがFAQ文書から最適な回答を生成して音声で返します。Lambda のコードは約40行で、コピー&ペーストで動作します。
2. 事前準備:Bedrockモデルの利用確認
2-1. モデルアクセスの仕組み(2025年10月以降の変更)
以前は、Amazon Bedrockのモデルを使用する前に「モデルアクセス」ページで手動で有効化する必要がありましたが、2025年10月のアップデートにより「モデルアクセス」ページは廃止されました。
現在は、サーバーレス基盤モデルが初回呼び出し時に自動的に有効化される仕組みに変更されています。
Serverless foundation models are now automatically enabled across all AWS commercial regions when first invoked in your account, so you can start using them instantly.
出典:Simplified model access in Amazon Bedrock - AWS Security Blog
つまり、モデルカタログからモデルを選んでプレイグラウンドで試すか、API(InvokeModel / Converse)で呼び出すだけで利用を開始できます。
2-2. Anthropicモデルの初回利用時の注意
ただし、Anthropic(Claude)モデルには例外があります。初回利用時に ユースケース詳細の送信(Submit use case details) が必要です。
- AWSマネジメントコンソールで リージョンが「東京(ap-northeast-1)」 であることを確認
- Amazon Bedrock を開く
- 左メニューの 「モデルカタログ」 からAnthropicのモデル(例:Claude 3 Haiku)をクリック
- 初回利用時は 「Submit use case details for Anthropic」 のフォームが表示されます
- 以下の項目を入力します
| 入力項目 | 説明 | 入力例 |
|---|---|---|
| Company name | 会社名(個人の場合は個人名でも可) | My Company |
| Company website URL | 会社のWebサイトURL | https://example.com |
| What industry do you operate in? | 業種をプルダウンから選択 |
other→Technologyを入力 |
| Who are the intended users? | 対象ユーザーを選択(複数選択可) |
Internal users / External users
|
| Describe your use cases | ユースケースの説明(最大500文字) | Building an FAQ chatbot for customer support using Amazon Connect and Bedrock Knowledge Base |
- 「Submit」 をクリック
- 通常、数分以内に自動承認されます
「Claude」という単語を含めないでください
ユースケースの説明欄に「Claude」と記載すると、個人を特定する情報(PII)として識別され、アクセスが自動的に拒否されます。モデル名を記載する必要がある場合は「Anthropic model」「AI model」などの表現を使ってください。
1回だけの手続きです
ユースケース詳細の送信はアカウントにつき1回限りです。AWS Organizationsの管理アカウントから送信した場合、すべてのメンバーアカウントにも適用されます。一度承認されれば、以降はすべてのClaudeモデル(Haiku、Sonnet 4、Sonnet 4.6 など)を追加手続きなしで利用できます。
Amazon Titanモデルは手続き不要
Amazon Titan Text Embeddings V2 などのAmazon製モデルは、ユースケース詳細の送信なしで即座に利用可能です。
2-3. 本記事で使用するモデル
| モデル | モデルID | 用途 | 初回手続き |
|---|---|---|---|
| Anthropic Claude 3 Haiku | anthropic.claude-3-haiku-20240307-v1:0 |
生成AI応答(回答生成) | ユースケース詳細の送信(1回のみ) |
| Amazon Titan Text Embeddings V2 | amazon.titan-embed-text-v2:0 |
埋め込みモデル(FAQ文書のベクトル化) | 不要(自動有効化) |
出典:Amazon Bedrock でサポートされている基盤モデル - AWS
モデルの選び方
本記事ではコスト重視で Claude 3 Haiku(入力$0.25/100万トークン)を使用しますが、より高品質な回答が必要な場合は以下のモデルも東京リージョンで利用可能です。ハンズオンではHaikuで十分な品質が得られます。

| モデル | モデルID | 入力料金(/100万トークン) | 出力料金(/100万トークン) | 特徴 |
|---|---|---|---|---|
| Claude 3 Haiku(本記事で使用) | anthropic.claude-3-haiku-20240307-v1:0 |
$0.25 | $1.25 | 高速・低コスト |
| Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 |
$3.00 | $15.00 | 高品質・汎用 |
| Claude Sonnet 4.6(最新) | anthropic.claude-sonnet-4-6 |
$3.00 | $15.00 | 最新・高精度 |
出典:Pricing - Anthropic、Claude Sonnet 4.6 now available in Amazon Bedrock - AWS
2-4. アクセス制御について
モデルの手動有効化は不要になりましたが、IAMポリシーおよびService Control Policies(SCP) による制御は引き続き有効です。
管理者がモデルへのアクセスを制限したい場合は、以下のようなIAMポリシーで特定モデルの呼び出しを拒否できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySpecificModel",
"Effect": "Deny",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:*::foundation-model/anthropic.claude-*"
}
]
}
出典:Identity and access management for Amazon Bedrock - AWS
ハンズオンではIAM制限は不要です。 上記はエンタープライズ環境での参考情報です。個人アカウントでハンズオンを進める場合は、特に設定は必要ありません。
3. FAQ文書の準備(S3)
AIが回答の根拠とするFAQ文書を作成し、S3にアップロードします。
3-1. FAQ文書の作成
以下のようなテキストファイルを作成します。ご自身のユースケースに合わせて内容を書き換えてください。
【料金プランについて】
当社では3つの料金プランをご用意しています。
・ライトプラン:月額1,000円(税別)
- 月間100通までのSMS送信が可能
- 基本的なレポート機能付き
- 1ユーザーまで利用可能
・スタンダードプラン:月額5,000円(税別)
- 月間1,000通までのSMS送信が可能
- 詳細なレポート・分析機能付き
- 5ユーザーまで利用可能
- メールサポート付き
・エンタープライズプラン:月額20,000円(税別)
- SMS送信数無制限
- 全機能利用可能
- ユーザー数無制限
- 専任サポート担当付き
- SLA保証あり
【解約について】
解約はマイページの「契約管理」からいつでも手続き可能です。
解約手続き後、当月末まではサービスをご利用いただけます。
日割り返金には対応しておりません。
【サポート窓口について】
メールサポート:support@example.com(全プラン共通)
電話サポート:エンタープライズプランのみ対応
受付時間:平日 9:00〜18:00(土日祝休み)
3-2. S3バケットの作成とアップロード
- AWSマネジメントコンソールで S3 を開く(リージョン:東京)
- 「バケットを作成」 をクリック
| 設定項目 | 値 |
|---|---|
| バケット名 | 任意(例:miruky-connect-faq) |
| リージョン | アジアパシフィック(東京)ap-northeast-1 |
- 作成したバケットに
faq-product.txtをアップロード
4. Bedrock ナレッジベースの作成
S3に格納したFAQ文書をAIが検索できるように、ナレッジベースを作成します。
Amazon Bedrock のナレッジベースを使用すると、独自のデータソースから情報を取得し、その結果を使用してユーザークエリへの応答を拡張することができます。
4-1. ナレッジベースの作成手順
- Amazon Bedrock コンソール(東京リージョン)で 「ナレッジベース」→「作成」 をクリック
- 「ベクトルストアを含むナレッジベース」 を選択
| 設定項目 | 値 |
|---|---|
| ナレッジベース名 | 任意(例:product-faq-kb) |
| IAMロール | 新しいサービスロールを作成 |
| データソースを選択 | Amazon S3 |
3.データソースの設定
下記の項目以外はデフォルトで構いません。
| 設定項目 | 値 |
|---|---|
| データソース名 | 任意(例:faq-datasource) |
| S3 URI | 作成したバケットのS3 URI(例:s3://miruky-connect-faq/) |
https://で始まる通常のURLではなく、s3://で始まるS3 URIをペーストしてください。
| 設定項目 | 値 |
|---|---|
| 埋め込みモデル | Amazon Titan Text Embeddings V2 |
| ベクトルストアの作成方法 | 新しいベクトルストアをクイック作成 |
| ベクトルストア | Amazon OpenSearch Serverless |
ベクトルストアのコストに注意
上記の選択肢を選ぶと、バックエンドで OpenSearch Serverless が作成されます。これは利用していなくても 月額$170程度 のコストが発生します。ハンズオン終了後は、必ずナレッジベースとベクトルストアを削除してください。
5.「ナレッジベースを作成」 をクリック
4-2. データの同期
- ナレッジベースが作成されたら、データソースを選択
- 「同期」 をクリック
同期を忘れずに実行してください。 ナレッジベースを作成しただけではFAQ文書は検索対象になりません。同期を実行して初めてベクトル化が行われます。S3に文書を追加・更新した場合も、再度同期が必要です。
4-3. ナレッジベースIDを控える
ナレッジベースの概要画面に表示される ナレッジベースID(例:ABCDEFGHIJ)を控えてください。Lambda 関数の設定で使用します。
4-4. テスト
- ナレッジベースの画面で 「ナレッジベースをテスト」 をクリック
- モデルで「Claude 3 Haiku」を選択
- 「料金プランを教えてください」と入力し、FAQ文書の内容に基づいた回答が返ることを確認します
5. Lambda 関数の作成
Lex から呼び出され、Bedrock ナレッジベースに問い合わせて回答を返す Lambda 関数を作成します。
5-1. Lambda 関数の作成
- AWSマネジメントコンソールで Lambda を開く(東京リージョン)
- 「関数の作成」 をクリック
| 設定項目 | 値 |
|---|---|
| 関数名 | ConnectFAQBot |
| ランタイム | Python 3.14 |
| アーキテクチャ | x86_64 |
5-2. IAM権限の追加
Lambda 関数が Bedrock ナレッジベースにアクセスできるよう、IAMロールに権限を追加します。
- Lambda 関数の 「設定」→「アクセス権限」 から実行ロールをクリック
- 「ポリシーをアタッチ」 をクリック
- 以下のポリシーを追加します
| ポリシー名 |
|---|
| AmazonBedrockFullAccess |
本番環境では AmazonBedrockFullAccess ではなく、必要最小限の権限に絞ったカスタムポリシーを使用してください。ハンズオン目的であれば、この設定で問題ありません。
5-3. タイムアウトの変更
Bedrock への問い合わせには数秒かかるため、Lambda のタイムアウトを延長します。

- Lambda 関数の 「設定」→「一般設定」→「編集」
- タイムアウトを 30秒 に変更
- 「保存」 をクリック
5-4. コードの入力
以下のコードをコピーして lambda_function.py に貼り付けてください。
KNOWLEDGE_BASE_ID の値は、セクション4-3で控えたナレッジベースIDに書き換えてください。
import json
import boto3
KNOWLEDGE_BASE_ID = "ここにナレッジベースIDを入力" # 例: "ABCDEFGHIJ"
MODEL_ARN = "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
bedrock_agent = boto3.client("bedrock-agent-runtime", region_name="ap-northeast-1")
def lambda_handler(event, context):
# Lexから渡されたユーザーの発話を取得(複数箇所から試みる)
user_input = event.get("inputTranscript", "")
# inputTranscript が空の場合、transcriptions から取得を試みる
if not user_input.strip():
transcriptions = event.get("transcriptions", [])
if transcriptions:
user_input = transcriptions[0].get("transcription", "")
# それでも空の場合はエラーメッセージを返す
if not user_input.strip():
return {
"sessionState": {
"dialogAction": {"type": "Close"},
"intent": {
"name": event["sessionState"]["intent"]["name"],
"state": "Fulfilled",
},
},
"messages": [
{
"contentType": "PlainText",
"content": "申し訳ありません。音声を聞き取れませんでした。もう一度お話しください。",
}
],
}
try:
# Bedrockナレッジベースに問い合わせ
response = bedrock_agent.retrieve_and_generate(
input={"text": user_input},
retrieveAndGenerateConfiguration={
"type": "KNOWLEDGE_BASE",
"knowledgeBaseConfiguration": {
"knowledgeBaseId": KNOWLEDGE_BASE_ID,
"modelArn": MODEL_ARN,
},
},
)
answer = response["output"]["text"]
except Exception as e:
print(f"Bedrock error: {e}")
answer = "申し訳ありません。回答の生成中にエラーが発生しました。しばらくしてからおかけ直しください。"
# Lexに回答を返す
return {
"sessionState": {
"dialogAction": {"type": "Close"},
"intent": {
"name": event["sessionState"]["intent"]["name"],
"state": "Fulfilled",
},
},
"messages": [{"contentType": "PlainText", "content": answer}],
}
出典:Amazon Bedrock Knowledge Bases retrieve_and_generate API - boto3
MODEL_ARN について
上記のモデルARNは Claude 3 Haiku の例です。より高品質な回答が必要な場合は、以下のモデルに変更できます。
| モデル | MODEL_ARN | 特徴 |
|---|---|---|
| Claude 3 Haiku(本記事で使用) | arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0 |
高速・低コスト。ハンズオンに最適 |
| Claude Sonnet 4 | arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0 |
高品質・汎用 |
| Claude Sonnet 4.6(最新) | arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-sonnet-4-6 |
最新・最高精度。本番利用向け |
最新のモデルIDは AWS公式ドキュメント で確認できます。
4.「Deploy」 をクリックしてコードをデプロイ
6. Amazon Lex ボットの作成
6-1. ボットの作成
- AWSマネジメントコンソール(東京リージョン)で Amazon Lex を開く
- 「ボットを作成」 をクリック
- 以下の通り設定します
| 設定項目 | 値 |
|---|---|
| 作成方法 | 空のボットを作成 |
| ボット名 | 任意(例:ProductFAQBot) |
| IAMロール | 基本的な Amazon Lex 権限を持つロールを作成 |
| ボットのエラーロギング | いいえ |
| COPPA | いいえ |
| アイドルセッションタイムアウト | 5分(デフォルト) |
| 設定項目 | 値 |
|---|---|
| 言語 | Japanese(日本語) |
| 音声 | Takumi または Kazuha |
6-2. インテントの設定
デフォルトで作成される NewIntent を編集します。
料金プランを教えて
解約方法を教えて
サポート窓口はどこですか
プランについて知りたい
料金はいくらですか
使い方を教えて
3.フルフィルメントを有効化し、「インテントを保存」をクリック

出典:コンソールを使用して Amazon Lex V2 ボットに AWS Lambda 関数をアタッチする - AWS
- 左側のペインの 「デプロイ」下の「エイリアス」 設定画面を開く
- 言語欄の「Japanese」をクリック
- 「Lambda 関数」セクションで、セクション5で作成した
ConnectFAQBotを選択する - 「保存」 をクリック
6-3. FallbackIntent の設定
ユーザーの発話がどのインテントにも一致しない場合にも、Bedrock で回答を試みるよう設定します。
-
FallbackIntentをクリック - フルフィルメントの 「フルフィルメントにLambda関数を使用」 を有効化
- 「保存」 をクリック
FallbackIntent に Lambda を設定する理由
FAQ ボットでは、ユーザーがどんな質問をするか予測できません。サンプル発話に一致しない質問が来ても、FallbackIntent 経由で Lambda → Bedrock に問い合わせることで、あらゆる質問にFAQ文書ベースで回答できるようになります。
6-4. ビルドとテスト
- 画面上部の 「構築」 をクリック(1〜2分程度)
- ビルド完了後、「テスト」 をクリック
- 「料金プランを教えて」と入力し、FAQ文書に基づいた回答が返ることを確認
- サンプル発話にない質問(例:「空港への経路を教えて」)も入力し、FallbackIntent 経由で回答されることを確認
7. Amazon Connect に Lex ボットを連携する
7-1. Lex ボットの追加
- AWSマネジメントコンソール(東京リージョン)で Amazon Connect を開く
- 前回(#2)で作成したインスタンスを選択し、「問い合わせフロー」 をクリック
- 「Amazon Lex」セクションで、作成したLexボット(
ProductFAQBot)を選択 - エイリアスも設定し、「Amazon Lex ボットを追加」 をクリック
Amazon Connect インスタンスに Amazon Lex ボットを追加すると、コンタクトフロー内の「顧客の入力を取得する」ブロックでそのボットを参照できるようになります。
8. コンタクトフローの作成
8-1. 今回作成するフローの概要
エントリポイント
↓
音声の設定(日本語 / Takumi)
↓
ウェルカムメッセージ再生
「お電話ありがとうございます。ご質問をどうぞ。」
↓
顧客の入力を取得する(Lex ボット連携)
↓
Lex → Lambda → Bedrock で回答生成 → 音声で再生
↓
├─ AskQuestion(成功) → 「他にご質問はありますか?」→ ループ
├─ FallbackIntent / デフォルト → お礼メッセージ → 切断
└─ エラー → お礼メッセージ → 切断
8-2. フロー作成画面を開く
- Amazon Connect 管理画面 → 「ルーティング」→「フロー」→「フローを作成」
- フロー名を入力
| 設定項目 | 値 |
|---|---|
| フロー名 | AI-FAQ-Bot-Demo |
8-3. 音声の設定
「設定」→「音声の設定」ブロックを追加します。
| 設定項目 | 値 |
|---|---|
| 言語 | 日本語 |
| 音声 | Takumi または Kazuha |
| 言語属性を設定 | ✅ 有効にする |
「言語属性を設定」を必ず有効にしてください
このチェックボックスがOFFのままだと、音声の読み上げは日本語で行われますが、Lex ボットへのリクエストはデフォルトの英語ロケール(en-US)で送信されます。Lex ボットは日本語ロケール(ja_JP)で作成しているため、ロケールの不一致により「顧客の入力を取得する」ブロックが常にエラー分岐に進みます。
これは Lex V2 ボットとの連携で最も多いエラー原因のひとつです。
出典:Troubleshoot Amazon Lex integration failures - AWS re:Post
8-4. ウェルカムメッセージの再生
- 「インタラクション」→「プロンプトの再生」 ブロックを追加
- テキスト:
お電話ありがとうございます。製品に関するご質問にAIがお答えします。
8-5. 顧客の入力を取得する(Lex連携)
- 「インタラクション」→「顧客の入力を取得する」 ブロックを追加
- 「Amazon Lex」 タブを選択
- 以下の通り設定します
| 設定項目 | 値 |
|---|---|
| Lex ボット名 | ProductFAQBot |
| エイリアス | TestBotAlias(または作成したエイリアス) |
| カスタマープロンプトまたはボットの初期化 | テキスト読み上げまたはチャットテキスト→手動で設定→ご質問をどうぞ。を入力 |
| インテント | 虫眼鏡マークをクリックし、AskQuestion と FallbackIntent の2つを指定 |
前回(#2)との違い
前回は「DTMF」タブでプッシュボタン入力を受け付けましたが、今回は「Amazon Lex」タブで音声入力を受け付けます。顧客が自然な言葉で話しかけると、Lex が音声認識 → Lambda が Bedrock ナレッジベースに問い合わせ → 回答を音声で再生、という流れになります。
8-6. 分岐と後続処理
「顧客の入力を取得する」ブロック(Lex連携時)には、以下の出力分岐があります。
| 出力分岐 | 発生条件 |
|---|---|
| AskQuestion(インテント名) | 顧客の発話がサンプル発話に一致し、Lambda経由で回答が返された場合 |
| FallbackIntent(インテント名) | どのサンプル発話にも一致せず、FallbackIntent経由で処理された場合 |
| デフォルト | Lexから返されたインテントが、ブロックに追加したインテントに該当しない場合 |
| エラー | Lexボットとの通信自体が失敗した場合(ロケール不一致、Lambda障害など) |
「タイムアウト」分岐はありません
DTMF(プッシュボタン)入力の場合はタイムアウト分岐がありますが、Lex連携時にはタイムアウト分岐はありません。 顧客が何も話さなかった場合は、Lex側の無音検出設定に従って処理され、最終的に FallbackIntent またはデフォルト分岐に進みます。
AskQuestion(正常に回答できた場合)
Lex → Lambda → Bedrock の応答はコンタクトフロー内で自動的に音声として再生されます。応答後、追加質問を促すフローを追加します。
- 「インタラクション」→「プロンプトの再生」 ブロックを追加
- テキスト:
他にご質問はありますか?ご質問がある場合はそのままお話しください。終了する場合はそのままお待ちください。 - 「顧客の入力を取得する」ブロックの
AskQuestionの出力線のみを、このブロックに接続 - このブロックの出力線から 「顧客の入力を取得する」 ブロックに戻す(ループ)
FallbackIntent をループ側に接続しないでください
FallbackIntent は、顧客が何も話さなかった場合(無言)にも発火します。ループ側に接続すると、無言 → FallbackIntent → ループ → 無言 → FallbackIntent → … の無限ループが発生し、通話が終了しなくなります。FallbackIntent は必ず切断側に接続してください。
FallbackIntent / デフォルト / エラーの場合
- 「インタラクション」→「プロンプトの再生」 ブロックを追加
- テキスト:
お問い合わせいただきありがとうございました。またのご利用をお待ちしております。 - 「顧客の入力を取得する」ブロックの 「FallbackIntent」「デフォルト」「エラー」 の3つの出力線を、すべてこのブロックに接続
- 「終了」→「切断」 ブロックへ接続
8-7. フローの保存と公開
- 「保存」 → 「公開」 をクリック
前回同様、「公開」まで行わないとフローは有効になりません。
9. 動作確認
9-1. 電話番号にフローを割り当てる
- 「チャネル」→「電話番号」 から、前回(#2)で取得した電話番号をクリック
- コンタクトフローを 「AI-FAQ-Bot-Demo」 に変更
- 「保存」 をクリック
9-2. テスト
取得した電話番号にスマートフォンから電話をかけます。
| 操作 | 期待される動作 |
|---|---|
| 電話をかける | 「お電話ありがとうございます。製品に関するご質問にAIがお答えします。ご質問をどうぞ。」 |
| 「料金プランを教えて」と話す | FAQ文書に基づき、3つのプランの説明が音声で返される → 「他にご質問はありますか?」と続く |
| 「解約方法は?」と話す | 「マイページの契約管理からいつでも手続き可能です...」と回答 → 「他にご質問はありますか?」と続く |
| 「サポート窓口は?」と話す | サポート窓口の情報が音声で返される → 「他にご質問はありますか?」と続く |
| 何も話さない(無言) | FallbackIntentが発火 → お礼メッセージ → 切断 |
9-3. うまくいかない場合
試していく中で色々とエラーが出たため、こちらにまとめておきます。
| 症状 | 原因と対処 |
|---|---|
| Lexボットが応答しない | ConnectインスタンスにLexボットが追加されているか確認 |
| 「顧客の入力を取得する」が常にエラーになる | 「音声の設定」 ブロックで「言語属性を設定」が有効になっているか確認。 |
| 「回答が見つかりません」と返される | ナレッジベースの同期が完了しているか確認 |
| Lambda がタイムアウトする | Lambda のタイムアウト設定が30秒になっているか確認 |
| 「エラーが発生しました」と返される | Lambda の CloudWatch Logs でエラー内容を確認。IAMロールに AmazonBedrockFullAccess が付与されているか確認 |
| Claudeモデルが利用できない | セクション2-2のユースケース詳細の送信が完了しているか確認。「Claude」という単語を含めていないか確認 |
| 音声認識の精度が低い | 静かな環境でテストする。Lexのテスト画面でテキスト入力での動作を先に確認 |
| 応答が返るまで時間がかかる | Bedrock の生成AIモデルの応答に数秒かかるのは正常。Connect-Lex 間のタイムアウト(15秒)以内であれば問題ない |
| 2回目のループでエラーになる | Lambdaの戻り値で dialogAction.type が Close になっているか確認。セッション状態が正しくリセットされているか確認 |
| 何も話さないと無限ループが発生する | FallbackIntentの出力線がループ(「顧客の入力を取得する」ブロック)側に接続されていないか確認。FallbackIntentは無言時にも発火するため、必ず切断側に接続してください(セクション8-6参照) |
10. 料金について
今回の構成で発生する主な料金です。ハンズオン程度の利用であれば大きな金額にはなりません。
| サービス | 料金 | 備考 |
|---|---|---|
| Amazon Connect | $0.018/分(音声) | コンタクトフローでの通話時間 |
| Amazon Lex V2 | $0.004/リクエスト(音声) | 1回の発話認識ごとに課金 |
| AWS Lambda | 無料枠:月100万リクエスト | ハンズオンでは無料枠内で収まる |
| Bedrock(Claude 3 Haiku) | 入力: $0.25/100万トークン、出力: $1.25/100万トークン | FAQ回答1回あたり1円未満 |
| Bedrock(Titan Embeddings V2) | $0.02/100万トークン | 同期時のみ発生 |
| S3 | $0.025/GB/月 | FAQ文書の保管(ごく少量) |
| 電話番号保持料 | $0.10/日 | DID番号1つあたり |
出典:Amazon Lex の料金、Amazon Bedrock の料金
参考:モデルを変更した場合の料金
Claude Sonnet 4 / Sonnet 4.6 に変更した場合、入力$3.00/100万トークン、出力$15.00/100万トークンとなります。Haiku と比較して約12倍のコストですが、より高品質な回答が得られます。
無料利用枠
Amazon Lex は利用開始から1年間、毎月 音声リクエスト5,000回・テキストリクエスト10,000回 まで無料です。ハンズオン目的であれば、無料枠内で収まることが多いです。
ハンズオン終了後のリソース削除を忘れずに
特に以下のリソースは放置すると課金が続きます。
- Bedrock ナレッジベース(バックエンドの OpenSearch Serverless コレクションが 月額$170程度)
- Amazon Connect の電話番号(保持料 $0.10/日)
- Lambda関数やS3バケットは、利用がなければほぼ無料です
11. おわりに
ここまでお読みいただきありがとうございます。
今回は、Amazon Connect + Amazon Lex + AWS Lambda + Amazon Bedrock を連携し、AIが顧客の質問にFAQベースで自動回答する電話ボットを構築しました。
| 作成したもの | 内容 |
|---|---|
| S3バケット | FAQ文書の格納先 |
| Bedrock ナレッジベース | FAQ文書をベクトル化し、AIが検索可能にする |
| Lambda 関数 | Lex からの問い合わせを Bedrock に中継 |
| Amazon Lex ボット | 顧客の発話を認識し、Lambda を呼び出す |
| コンタクトフロー | 電話 → AI応答 → 継続/切断の一連の流れ |
前回の#2ではプッシュボタン(DTMF)による分岐でしたが、今回は自然言語での対話へ進化しました。
Lambda のコードは約40行とシンプルですが、Bedrock ナレッジベースの力を借りて、FAQ文書に基づいた高品質な回答を自動生成できます。
次回は、Lambda・DynamoDB等を組み合わせた、より大規模で実践的なシステムを構築します。
では、またお会いしましょう。
参考リンク
- Amazon Connect インスタンスに Amazon Lex ボットを追加する - AWS
- Amazon Bedrock ナレッジベース - AWS
- Amazon Bedrock でサポートされている基盤モデル - AWS
- Access Amazon Bedrock foundation models - AWS
- Simplified model access in Amazon Bedrock - AWS Security Blog
- Amazon Bedrock automatic enablement of serverless foundation models - AWS
- Claude Sonnet 4.6 now available in Amazon Bedrock - AWS
- Introducing Claude Sonnet 4.6 - Anthropic
- Pricing - Anthropic
- retrieve_and_generate API - boto3
- コンソールを使用して Amazon Lex V2 ボットに Lambda 関数をアタッチする - AWS
- フルフィルメント - Amazon Lex
- Amazon Lex の料金 - AWS
- Amazon Bedrock の料金 - AWS
- 【Amazon Connect】Bedrock+Lex+LambdaでAIチャットボットを構築する - GeekFeed
- AI IVRの最前線!Amazon Connect × Lex × Bedrockで実現する最新システムを構築してみた - NTT東日本
- Amazon Connectで理想の相談相手をつくってみた - GeekFeed
- Amazon ConnectとLexを活用し、自動ヒアリングした内容をAmazon Bedrockで要約してメール通知してみた - DevelopersIO
- Bedrock&ナレッジベースでRAGを作ったら料金結構かかってた - Zenn

























