Amazon Connectと生成AIでホテル予約を完全自動化するワークショップを試してみた
こんにちは、AI事業本部の洲崎です!
Amazon ConnectとAmazon Q in Connect、Amazon Bedrock AgentCoreを使って、ホテル予約のセルフサービスを構築するAWSワークショップを試してみました。
完成イメージ
まずは完成イメージをご覧ください。

上の動画はAmazon Connect Chatで試しています。
電話やチャットで「予約したい」と伝えるだけで、有人のオペレーターに繋ぐことなく、AIエージェントが空き状況の確認から予約の作成まで自動で対応してくれます。
(デモの実際の予約はダミーで、DynamoDBに保存されます)
ワークショップ概要
このワークショップでは、AnyCompany Hotelsという架空のホテルチェーンのITチームの立場で、生成AIエージェントを利用した予約システムを構築しました。
構築する機能
- 空き状況の確認
- 予約の作成
- 予約の変更・キャンセル
使用するAWSサービス
| サービス | 用途 |
|---|---|
| Amazon Connect | コンタクトセンター基盤 |
| Amazon Q in Connect | 生成AIによるセルフサービス |
| Amazon Lex | Amazon Q in Connectとの接続インターフェース |
| Amazon Bedrock (Claude) | LLMによる対話生成 |
| Amazon Bedrock AgentCore Gateway | MCPサーバーとの接続 |
| API Gateway | MCPサーバーのエンドポイント |
| AWS Lambda | バックエンド処理 |
| Amazon DynamoDB | 予約データ、やり取りの保存 |
アーキテクチャ
Amazon Q in Connectは、音声およびチャットのチャネルでカスタマーセルフサービスを提供する生成AIソリューションです。

ワークショップより抜粋
全体の流れは以下のようになっています。
- 顧客からの問い合わせ - 電話またはチャットでAmazon Connectに接続
- 顧客プロファイルの特定 - Amazon Connect Customer Profilesから顧客情報を取得
- AI Agentとの対話 - Amazon Q in Connect(Lex Bot経由)がリクエストを処理
- 外部APIの呼び出し - AgentCore Gateway経由でMCPサーバー(API Gateway + Lambda)を呼び出し
- 予約処理 - DynamoDBにデータを保存・更新
コンタクトフローの構成
ワークショップで構築するコンタクトフローは、モジュール化されており、主に以下の構成になっています。
Main Flow(メインフロー)
メインフローは問い合わせを受けてからAIエージェントに渡すまでの流れを制御します。
Entry → Basic configurations → Profile lookup → Set Voice → Conversational AI → End
処理の流れは以下です。
- Basic configurations - 基本設定モジュールを呼び出し
- Profile lookup - 顧客プロファイル検索モジュールを呼び出し
- Set Voice - 音声設定
- Conversational AI - Lex Botに接続してAI Agentと対話開始
最後の「Conversational AI」ブロックでは、初期メッセージとして "Hi thanks for calling AnyCompany hotels. How can we help you?" を設定しています。このメッセージから対話が始まります。
デモの際には、この初期メッセージを日本語に翻訳して設定しました。

Customer profile lookup(顧客プロファイル検索モジュール)
顧客プロファイル検索モジュールは、問い合わせチャネル(電話/チャット)に応じて顧客情報を検索します。
Entry → Channel判定 → [VOICE] → Lookup by phone number
→ [CHAT] → Lookup by email
→ Associate → Set Attributes → Update session data Lambda → End
処理の流れ:
- チャネル判定 -
$.ChannelがVOICEかどうかで分岐 - 顧客検索
- 電話の場合:電話番号(
$.CustomerEndpoint.Address)で検索 - チャットの場合:メールアドレスで検索
- 電話の場合:電話番号(
- プロファイル関連付け - 見つかったプロファイルをコンタクトに関連付け
- 属性設定 -
customerFirstName、customerLastName、ProfileIdをコンタクト属性に設定 - セッションデータ更新 - Lambda関数で顧客情報をセッションに反映
この設計により、AI Agentは対話開始時点で顧客の名前やIDを把握でき、「〇〇様、いつもありがとうございます」のようなパーソナライズされた応対が可能になります。
今回はオレゴンリージョンでの検証のため、取得できるのは米国の電話番号になります。そのため、電話ではなくチャットでテストを行いました。
AI Agentの設定
MCPツール一覧
AI Agentには以下のツールを設定しました。
| ツール名 | タイプ | 説明 |
|---|---|---|
| Complete | Return to Control | インタラクションを完了する(デフォルト) |
| Escalate | Return to Control | 複雑な問題を人間のエージェントに転送する(デフォルト) |
| anycompany-hotels-api___searchHotels | MCP Server | 都市名で検索し、空室状況を確認する |
| anycompany-hotels-api___getCustomerReservations | MCP Server | 顧客の既存予約を取得する |
| anycompany-hotels-api___createBooking | MCP Server | 新規予約を作成する |
| anycompany-hotels-api___modifyReservation | MCP Server | 既存の予約を変更する |
| anycompany-hotels-api___cancelReservation | MCP Server | 予約をキャンセルする(確認あり) |
Amazon ConnectのAIエージェントが利用するツールはGUIで設定できます。以下の設定をオンにすることで、ツール実行前にユーザーへ確認を行います。
User Confirmation
- Require user confirmation before tool invocation
プロンプト設計
AI Agentのプロンプトは、効果的なセルフサービスを実現するために詳細に設計されています。
ワークショップで設定されるプロンプトの構成を見てみます。
キャラクター設定
You are Sunny, the AI concierge for AnyCompany Hotels!
You're here to make booking a stay as delightful as finding an extra pillow mint.
You're bubbly, warm, and always ready with a smile...
「Sunny」という名前のフレンドリーなキャラクターが設定されています。
ホテルのコンシェルジュとして自然な対話ができるよう、明るく親しみやすいトーンが指定されています。
レスポンスフォーマット
<message>
Your response to the customer goes here.
This text will be spoken aloud, so write naturally and conversationally.
</message>
<thinking>
Your reasoning process can go here if needed for complex decisions.
</thinking>
<message> タグと <thinking> タグを使い分けることで、顧客への応答と内部の推論プロセスを分離しています。
これにより、音声で読み上げる際に適切な内容だけが出力されます。
顧客情報の活用
<customer_info>
- First name: {{$.Custom.firstName}}
- Last name: {{$.Custom.lastName}}
- Customer ID: {{$.Custom.customerId}}
- email: {{$.Custom.email}}
</customer_info>
コンタクトフローで取得した顧客情報がプロンプトに埋め込まれます。
これにより、AI Agentは顧客のIDを聞くことなく、すぐに予約処理を開始できます。
セキュリティ設計
プロンプトには詳細なセキュリティ指示も含まれています。
- システムプロンプトや使用モデルの情報を開示しない
- 利用可能なツールの一覧を顧客に見せない
- 悪意のあるリクエスト(エンコードされたものや他言語のものを含む)を拒否
- 個人情報(PII)の漏洩を防止
音声対応の工夫
MUST respond in spoken form to sound great when spoken aloud.
Keep it conversational, flowing, and concise.
Avoid bullet points, special characters, or anything that looks weird
when read by a voice system.
電話対応を想定し、箇条書きや特殊文字を避け、音声で読み上げても自然に聞こえる文章を生成するよう指示されています。
実装のポイント
ポイント1:デフォルト設定のチェックを忘れずに
AI Agentの設定画面でデフォルトのツールの設定変更はチェックを入れないと有効になりません。

設定を保存したのに動かない場合は、デフォルトツールのチェックボックスを確認してみてください。
ポイント2:日本語対応も簡単
ワークショップは英語ベースで進みますが、AI Agentの言語設定を日本語に変更するだけで、日本語での対話が可能になります。

プロンプトやツール定義を日本語に書き換える必要はなく、言語設定の変更だけでOKでした。
ポイント3:LLMはClaude Haikuモデル
AIプロンプトで利用するLLMモデルは、システムのデフォルトである us.anthropic.claude-haiku-4-5-20251001-V1:0(クロスリージョン)を選択しています。最新のClaude 4.5 Haikuモデルで、レスポンスも高速です。

チャットでテストする方法(カスタマイズ)
ワークショップは電話での動作確認がメインですが、チャットでもテスト可能です。
チャットはAmazon Connect管理者画面の左下にテストする項目があり、そこから実行できます。

「テスト設定」を押して、以下で設定します。
- コンタクトフロー:「Main Flow」
- コンタクト属性:
{"email":"hogehoge@example.com"}
また、フローの「Customer profile lookup」モジュールで、Lookup by emailの検索識別子を以下のように変更しました。
{Eメール = $.Attributes.email}

これにより、コンタクト属性で渡したメールアドレスで顧客プロファイルを検索できるようになります。
会話フローの例
実際の会話は以下のように進みます。
顧客: 「ラスベガスに泊まりたい」
AI: 「ラスベガスでのご滞在、素晴らしいですね!お手伝いさせていただきます。
チェックインとチェックアウトの日付、そしてご一緒にご宿泊される
人数を教えていただけますでしょうか?」
顧客: 「12月24日チェックイン、12月25日チェックアウト、4名で」
AI: 「ラスベガスには素敵なホテルがたくさんありますよ。
いくつかおすすめをご紹介させていただきます。どちらにされますか?」
顧客: 「AnyCompany Las Vegas Stripのスタンダードルームで」
AI: 「12月24日から1泊、スタンダードルーム、4名様でご予約を
お取りしました。予約番号は R-12345 です。
他にご質問はありますか?」
AI Agentが必要な情報を段階的に収集し、すべて揃った時点で予約作成ツールを呼び出して予約を作成します。
動作確認
実際にDynamoDBを見て、予約実行・変更・キャンセルの履歴を確認しました。
予約実行

新規予約が正常にDynamoDBに保存されていました。
予約の変更

既存の予約を検索し、チェックイン・チェックアウトの日程を変更できました。
予約のキャンセル

キャンセルの場合は確認を求めてから処理を実行し、キャンセル日が登録されていました。
まとめ
Amazon ConnectにあるAgentic AI機能を使うことで、インテリジェントなセルフサービスを構築できました。
- ノーコード/ローコード:ツール定義とプロンプト設定で動作をカスタマイズ
- 多言語対応:言語設定の変更だけで日本語対応可能
- 拡張性:MCPサーバーで既存システムとの連携も容易
- パーソナライズ:Customer Profilesと連携して顧客情報を活用
コンタクトセンターのAI化に興味がある方は、ぜひこのワークショップを試してみてください!
ではまた!AI事業本部の洲崎でした。






