9月5日、AWSが「Deploy a multimodal WhatsApp ordering assistant with Amazon Bedrock AgentCore」と題した記事を公開した。Amazon Bedrock AgentCoreとAmazon Nova Lite・Nova Sonicを使い、WhatsApp上で動作するマルチモーダル注文アシスタントを構築・デプロイする方法を詳しく解説している。
WhatsAppを「注文チャネル」にする理由
飲食店のオーダーシステムは、アプリ・Webサイト・電話・カウンターとチャネルが分散しがちだ。それぞれが独立したシステムであり、顧客の注文履歴も断片化される。WhatsAppは世界20億人以上が使うメッセージングアプリだ。顧客が新たにアプリをインストールしたりサインインしたりする必要がない。
WhatsApp Business APIはMetaが提供するエンタープライズ向けの法人利用APIで、メッセージング・音声通話・ファイル送受信を統合的に扱える。既存のカスタマーベースへの追加接点として、特に小売・飲食・物流といる業種での活用が進んでいる。顧客側に新たなアプリ導入の摩擦がなく、会話履歴も1つのスレッドに集約される点が、エンタープライズ導入の観点で評価されている。
この記事が提示するのは、1つのWhatsApp Business番号でテキスト・ボイスノート・音声通話の3チャネルをまとめて処理し、注文を完結させるアーキテクチャだ。
3つのモダリティをどう処理するか
記事のコアとなるのが、チャネルごとにモデルを使い分ける設計だ。
| チャネル | モデル | 方式 |
|---|---|---|
| テキスト | Amazon Nova Lite | Converse API |
| ボイスノート | Amazon Nova Sonic | 音声→音声(文字起こしなし) |
| 音声通話 | Amazon Nova Sonic | WebRTC + KVS TURN中継 |
ボイスノートが特に面白い。 OGG Opus形式の音声バイトをダウンロードし、16kHz PCMにデコードしてAmazon Nova Sonicの音声to音声セッションに直接流し込む。Whisper等の文字起こしサービスを挟まない「真の音声in・音声out」だ。返答もWhatsApp音声メッセージとして返る。
音声通話はWebRTCを使う。MetaのCalling APIがWebRTC SDP offerをwebhookで届け、Amazon KVSのマネージドTURNリレーでメディアを中継する構成だ。aiortcがICEネゴシエーションを担い、DTLS/SRTPで暗号化された音声が流れる。
3チャネルで記憶を共有する仕組み
3チャネルが1つのAgentCore Memoryを共有する。キーはハッシュ化した顧客IDで、テキストで注文した顧客が翌日音声通話してきても同一人物として認識される。顧客IDの生成にはAWS Systems Manager Parameter Storeに保管したpepperを使い、擬似匿名化している。
バックエンドとのつなぎ方:MCP
エージェントとバックエンドのインターフェースには**Model Context Protocol(MCP)**を採用している。AgentCore GatewayがバックエンドのREST APIをMCPサーバーとして公開し、エージェントはGetMenu・AddToCart・PlaceOrderといったツールを名前で呼び出す。チャネルを追加・削除してもバックエンドのコードを変更する必要がない設計だ。
デプロイ構成の全体像
インフラはAWS CDKでコード化されており、GitHubのサンプルリポジトリから取得できる。主要コンポーネントは以下の通りだ:
- Amazon API Gateway:公開webhookエンドポイント(MetaのHTTPS webhook受信用)とIAM認可のバックエンドAPI
- AWS Lambda:webhook受信・ワーカー・メッセージ送信・注文ロジック
- Amazon SQS:受信キュー(DLQ付き)。Metaのwebhookに200を即時返却し、処理を非同期化する
- AgentCore Runtime:エージェントをARM64コンテナで実行。会話ごとにマイクロVM分離
- Amazon DynamoDB:顧客プロファイル・注文・メニュー・カート・店舗情報
- Amazon Location Service:ジオコーディングと最寄り店舗検索
- Amazon KVS:音声通話のTURNリレー用シグナリングチャネル
- Amazon ECR + AWS CodeBuild:ARM64エージェントコンテナイメージのビルド・保管
コンテナのビルドはAWS CodeBuild上のARM64で完結するため、ローカルにPython・Docker・音声処理ツールチェーンを用意する必要はない。
デプロイは以下のコマンドで実行する:
git clone https://github.com/aws-samples/sample-multimodal-whatsapp-restaurant-agent.git
cd sample-multimodal-whatsapp-restaurant-agent
./scripts/preflight-check.sh
./scripts/deploy-all.sh --deploymentPref <PREFIX>
事前準備として必要なもの
AWSアカウント側ではAmazon Nova Lite(amazon.nova-lite-v1:0)とAmazon Nova Sonic(amazon.nova-sonic-v1:0)へのモデルアクセス許可が必要だ。デプロイ先リージョンは、両モデルとAgentCore Runtime・Gateway・Memoryがすべて利用可能な場所を選ぶ。us-east-1(米国東部バージニア北部)から始めるのが無難だ。
Meta側ではWhatsApp Business Platformのセットアップが別途必要になる。App ID・App Secret・アクセストークン・Verify Tokenを事前に用意しておく。テスト目的であればMetaのサンドボックステスト番号で対応でき、ビジネス認証や本番番号は不要だ。これらのシークレットはソースコードに含めず、AWS Secrets Managerに格納する。
詳細はDeploy a multimodal WhatsApp ordering assistant with Amazon Bedrock AgentCoreを参照していただきたい。