使用Amazon Bedrock AgentCore和Amazon Nova 2 Sonic構建餐廳電話AI接待員
本文演示瞭如何構建一個語音點餐系統,使用Amazon Bedrock AgentCore和Amazon Nova 2 Sonic,處理從問候到確認的整個點餐流程。系統透過模型上下文協議(MCP)連線餐廳後端,並利用AWS CDK部署,透過ECS Fargate上的SIP閘道器橋接電話呼叫。
餐廳每處地點平均每月錯過150通電話,其中約60%是顧客試圖下單或預訂餐桌。這些電話大多在晚餐時段打入,此時接待員正忙於引導客人入座,服務員在翻檯,電話往往被忽略。讓人從餐廳現場抽身接電話並不能真正解決問題,反而會惡化兩方面體驗。雖然新增應用或網站有助於偏好線上下單的顧客,但對只想打電話的人無濟於事。
本文展示如何構建一個語音點餐系統,該系統能接聽電話並從問候到確認完成整個訂單流程。系統使用Amazon Bedrock AgentCore來託管和執行代理,Amazon Nova 2 Sonic實現即時語音互動,並透過模型上下文協議(MCP)連線餐廳後端。本指南涵蓋使用AWS Cloud Development Kit(AWS CDK)部署完整堆疊,以及透過Amazon Elastic Container Service(Amazon ECS)和AWS Fargate上的會話發起協議(SIP)閘道器將電話呼叫橋接到代理。此外,系統會在電話振鈴期間預熱代理會話,因此呼叫者永遠不會聽到靜音。
解決方案概述 系統分為三層。電話層處理電話相關事項:音訊透過電話網路而非瀏覽器傳輸,系統透過電話號碼而非登入資訊識別呼叫者。SIP閘道器透過簽名WebSocket連線將音訊流傳輸到代理層,代理層使用Amazon Nova 2 Sonic進行對話。代理透過MCP工具訪問後端層,後端層包含選單、購物車、訂單和位置資訊。這種分層設計使得訂單邏輯獨立於呼叫渠道,新渠道(如移動應用或自助終端)可以連線到同一代理而無需重寫後端。由於MCP是連線代理與外部工具的開源標準,後端可以在不影響代理的情況下更改。代理支援文本和音訊作為輸入輸出,在單個雙向流中處理轉錄、輪流發言和打斷。
部署解決方案時,電話側使用Amazon Chime SDK Voice Connector提供SIP中繼和免費號碼,接收來電。Amazon ECS on AWS Fargate執行SIP閘道器,後端為Network Load Balancer。代理層中,AgentCore Runtime託管對話邏輯,每個呼叫在獨立微VM中執行以確保隔離。Amazon Nova 2 Sonic處理語音到語音互動。AgentCore Gateway將後端API暴露為MCP工具,代理可以發現並按名稱呼叫。後端層使用Amazon API Gateway前端REST端點,透過AWS Identity and Access Management(IAM)保護安全。AWS Lambda執行選單、購物車、訂單和位置查詢的業務邏輯。Amazon DynamoDB儲存資料,Amazon Location Service處理地理編碼和路線計算。Amazon Elastic Container Registry(Amazon ECR)、AWS CodeBuild和Amazon Simple Storage Service(Amazon S3)構建並儲存代理容器映象。
架構圖 解決方案分為四個部分。第一部分部署餐廳後端基礎設施:Amazon DynamoDB儲存客戶、訂單、選單、購物車和位置資料,Amazon Location Service處理地址和路線,AWS Lambda執行業務邏輯,Amazon API Gateway以IAM授權對外暴露。第二部分建立AgentCore Gateway,設定IAM許可權,並將後端端點配置為代理可訪問的MCP工具,這一層解耦了代理與後端。第三部分配置代理:建立Amazon ECR倉庫,使用Amazon S3和AWS CodeBuild構建並推送容器映象,然後部署AgentCore Runtime,同時部署支援個性化呼叫的元件,包括提示渲染Lambda函式和儲存提示模板及客戶識別金鑰的AWS Systems Manager Parameter Store條目。第四部分提供電話路徑:設定Amazon Chime SDK Voice Connector和免費號碼、SIP媒體應用Lambda(決定如何處理來電)、共享Amazon Virtual Private Cloud(Amazon VPC)以及在Amazon ECS on AWS Fargate上執行的SIP閘道器(drachtio-server),後接Network Load Balancer。閘道器在Chime SDK Voice Connector和AgentCore Runtime之間橋接呼叫。
呼叫流程 當呼叫者撥打免費號碼時,Amazon Chime SDK Voice Connector應答並呼叫SIP媒體應用Lambda。Lambda計算會話識別符號,向AgentCore Runtime傳送預熱請求以便在振鈴期間準備會話,然後指示Voice Connector將呼叫橋接到ECS Fargate上的SIP閘道器,並傳遞會話識別符號。SIP閘道器使用同一會話識別符號開啟到AgentCore Runtime的SigV4簽名WebSocket,呼叫連線到預熱會話,呼叫者音訊流向代理,代理音訊返回給呼叫者。代理使用Amazon Nova 2 Sonic進行對話,並透過AgentCore Gateway在需要選單、購物車、訂單或位置資料時呼叫後端工具。
部署前提條件包括擁有AWS賬戶、在部署區域啟用Amazon Bedrock模型訪問(Amazon Nova 2 Sonic)、申請Amazon Chime SDK PSTN Audio訪問及電話號碼配額增加、安裝Node.js 24+、AWS CLI 2.x、git,並引導AWS CDK。完整解決方案可在GitHub示例倉庫中找到。克隆倉庫並執行預檢指令碼後,使用部署指令碼(例如./scripts/deploy-all.sh --deploymentPrefix qsr-tel)按順序部署各堆疊。指令碼會播種示例選單和位置資料,以便測試。部署完成後會列印可撥打的號碼。
SIP閘道器的工作原理是將來電轉換為代理可讀寫的媒體流。Amazon Chime SDK Voice Connector接收來電並呼叫SIP媒體應用Lambda,該Lambda返回橋接指令。SIP閘道器執行在ECS Fargate上,使用drachtio-server進行SIP信令,節點.js橋接處理音訊轉換。這種設計使代理無需瞭解電話網路細節,從而保持渠道無關性。