Construindo um atendente de telefonia com IA para restaurantes usando Amazon Bedrock AgentCore e Amazon Nova 2 Sonic

O problema: ligações perdidas custam caro para restaurantes

Restaurantes perdem em média 150 ligações por mês em cada unidade. Cerca de 60% dessas chamadas são de clientes tentando fazer um pedido ou reservar uma mesa — e a maioria chega exatamente no horário do jantar, quando a equipe está com as mãos cheias. Tirar alguém do salão para atender o telefone não resolve: piora dois atendimentos ao mesmo tempo.

Aplicativos e sites ajudam quem prefere pedir online, mas não fazem nada pelo cliente que só quer ligar. A AWS publicou um guia técnico detalhado mostrando como resolver esse problema com um sistema de atendimento telefônico com IA — do cumprimento à confirmação do pedido, tudo por voz.

Visão geral da solução

A arquitetura proposta é dividida em três camadas independentes:

  • Camada de telefonia: recebe a chamada, identifica o cliente pelo número de telefone e converte o áudio para um formato que o agente consegue processar.
  • Camada do agente: executa a conversa usando o Amazon Bedrock AgentCore com o Amazon Nova 2 Sonic para processamento de voz em tempo real.
  • Camada de backend: armazena cardápio, carrinhos, pedidos e localizações, acessada pelo agente via Protocolo de Contexto de Modelo (MCP).

Essa separação em camadas é o que torna o sistema prático de operar. Um novo canal — como um aplicativo mobile ou um quiosque — pode se conectar ao mesmo agente sem reescrever o backend. E como o MCP é um padrão aberto, o backend pode evoluir sem tocar no agente.

Componentes principais da arquitetura

A solução utiliza os seguintes serviços da AWS:

Fluxo de uma chamada do início ao fim

O fluxo completo de uma chamada segue estas etapas:

  1. O cliente disca para o número gratuito e o Amazon Chime SDK Voice Connector atende.
  2. O Voice Connector aciona uma função Lambda (Aplicação de Mídia SIP), que calcula um identificador de sessão para a chamada.
  3. A Lambda envia uma requisição de aquecimento ao AgentCore Runtime, para que o agente prepare a sessão enquanto o telefone ainda está chamando.
  4. A Lambda instrui o Voice Connector a direcionar a chamada ao gateway SIP no AWS Fargate, passando o identificador de sessão.
  5. O gateway SIP abre uma conexão WebSocket assinada com SigV4 ao AgentCore Runtime, usando esse mesmo identificador.
  6. A chamada se conecta à sessão já aquecida: o áudio do cliente flui para o agente, e o áudio do agente volta para o cliente.
  7. O agente conduz a conversa com o Amazon Nova 2 Sonic e chama as ferramentas do backend via AgentCore Gateway quando precisa de dados de cardápio, carrinho, pedido ou localização.

O truque do aquecimento durante o toque

Uma chamada de voz não perdoa silêncio. Se o cliente conecta e não ouve nada por alguns segundos, a chamada parece quebrada — mesmo que o sistema esteja funcionando normalmente. A parte lenta de iniciar uma chamada é a configuração única: resolver o prompt de sistema para aquele cliente, abrir o stream do Amazon Nova 2 Sonic e descobrir as ferramentas MCP disponíveis.

Em vez de fazer o cliente esperar por tudo isso, a Lambda de Aplicação de Mídia SIP dispara esse processo enquanto o telefone ainda está tocando. Quando o gateway SIP abre a conexão WebSocket com o mesmo identificador de sessão, o AgentCore Runtime já roteou para a microVM aquecida — e o agente está pronto para falar imediatamente.

Como o gateway SIP funciona

A camada de telefonia tem uma única responsabilidade: transformar uma chamada telefônica em um stream de mídia que o agente consiga ler e escrever. A rede telefônica entrega áudio como pacotes RTP (Protocolo de Transporte em Tempo Real) via UDP. O agente espera um WebSocket com frames no formato que o Amazon Nova 2 Sonic entende. Sem uma camada de tradução no meio, o agente precisaria conhecer SIP, negociação de codec e roteamento de mídia em nível de rede.

O gateway SIP roda no AWS Fargate e usa o drachtio-server para sinalização SIP, com uma bridge Node.js para o áudio. Para alta disponibilidade, ele executa duas tarefas em duas Zonas de Disponibilidade (AZs), o que garante redundância e um ponto para publicar métricas de contagem de chamadas no Amazon CloudWatch para escalonamento. A sinalização passa pelo Network Load Balancer, mas o áudio flui diretamente entre o Voice Connector e a tarefa Fargate — mantendo o balanceador de carga fora do caminho de mídia.

Armazenamento de dados: cardápio, carrinhos e pedidos

Cinco tabelas do Amazon DynamoDB cobrem o fluxo de pedidos:

  • Customers (Clientes): perfis com nome, telefone e informações de fidelidade, usados para reconhecer um cliente recorrente.
  • Orders (Pedidos): histórico de pedidos com o local de retirada.
  • Menu (Cardápio): itens, preços e disponibilidade, que podem variar por unidade.
  • Carts (Carrinhos): carrinhos em andamento com valor de tempo de vida (TTL), para que carrinhos abandonados se limpem automaticamente.
  • Locations (Localizações): detalhes das unidades como coordenadas, horários e taxas.

Encontrando o local de retirada por voz

Um cliente que liga não tem navegador para compartilhar localização. O agente pede um CEP ou uma referência de rua e usa o Amazon Location Service para converter isso em coordenadas. A partir daí, o backend pode encontrar os restaurantes mais próximos, ranqueá-los por tempo de deslocamento em vez de distância em linha reta, ou geocodificar um endereço específico. Isso permite que o agente diga algo acionável, como “a unidade mais próxima fica na Rua Principal, a cerca de cinco minutos daqui”.

Processamento de voz com Amazon Nova 2 Sonic

O Amazon Nova 2 Sonic realiza o trabalho de voz dentro da chamada. Ele reconhece fala em diferentes sotaques e lida com a qualidade de áudio variável de uma linha telefônica. Transmite áudio em ambas as direções com baixa latência e chama ferramentas de forma assíncrona sem interromper a conversa (veja chamadas de ferramentas assíncronas no Amazon Nova Sonic), então o cliente não fica esperando enquanto os dados são buscados. Ele também lida com interrupções, permitindo que o cliente fale sobre o agente como ocorre em chamadas humanas.

Um detalhe específico para chamadas telefônicas: uma consulta ao backend pode levar alguns segundos, e o Amazon Nova 2 Sonic encerra uma sessão que fica ociosa por tempo demais. Para manter a sessão aberta durante uma chamada de ferramenta lenta, o agente envia um frame silencioso em intervalos curtos. A sessão permanece ativa e o cliente não percebe nada incomum.

Conexão do agente ao backend via MCP

O agente nunca chama as funções Lambda do backend diretamente. O AgentCore Gateway fica no meio e apresenta os endpoints do backend como ferramentas MCP que o agente descobre e chama pelo nome — cobrindo consultas de cardápio, operações de carrinho, registro de pedidos, histórico de clientes, geocodificação e busca de localização.

Isso significa que o agente não precisa saber qual função Lambda está por trás de uma operação ou como se autenticar nela. Quando o agente chama uma ferramenta como PlaceOrder, o gateway transforma isso em uma requisição REST ao Amazon API Gateway, que roteia para a função Lambda correspondente. Como o agente fala com ferramentas nomeadas em vez de funções específicas, é possível alterar um handler do backend ou adicionar uma ferramenta sem mudar o agente.

Reconhecendo o cliente sem login

Um cliente que liga não faz login, então o sistema usa o número de telefone como base de identidade. O sistema aplica um hash no número com um valor secreto armazenado no AWS Systems Manager Parameter Store, e o resultado se torna o identificador de sessão. O número bruto não aparece em logs nem no estado da sessão — o que ajuda a atender requisitos de tratamento de Informações de Identificação Pessoal (PII).

Se o identificador corresponder a um cliente conhecido, o agente cumprimenta o cliente pelo nome e pode oferecer o último pedido. Caso contrário, o cliente faz o pedido como convidado. Vale destacar que essa abordagem reconhece um cliente recorrente, mas não é verificação de identidade. Qualquer pessoa com acesso ao mesmo telefone pode fazer um pedido sob aquela identidade. Uma implantação em produção que exija identidade verificada pode adicionar uma etapa como uma senha de uso único enviada por SMS.

Pré-requisitos e implantação com AWS CDK

Antes de começar, é necessário ter:

A solução completa está disponível no repositório de exemplo no GitHub. Após clonar o repositório, o fluxo de implantação é:

git clone https://github.com/aws-samples/sample-restaurant-telephony-ai-host-using-amazon-bedrock-agentcore-nova-sonic.git
cd sample-restaurant-telephony-ai-host-using-amazon-bedrock-agentcore-nova-sonic

Execute a verificação pré-implantação, que confirma se Node.js, AWS CLI, git, bootstrap do AWS CDK e acesso ao modelo Amazon Bedrock estão todos configurados:

./scripts/preflight-check.sh

Em seguida, execute o script de implantação com um prefixo de implantação. O prefixo é adicionado ao nome de cada recurso, permitindo implantar a solução mais de uma vez na mesma conta:

./scripts/deploy-all.sh --deploymentPrefix qsr-tel

O script implanta cada stack do Kit de Desenvolvimento de Nuvem da AWS (AWS CDK) em ordem, passando as saídas de uma stack para a seguinte. A construção da imagem de container do agente leva alguns minutos na primeira vez. Quando o script termina, ele exibe o número para discar: Your telephony agent is live at +1XXXXXXXXXX. Dial to test.

A região US East (N. Virginia), us-east-1, é recomendada como ponto de partida, pois é onde o Amazon Nova 2 Sonic, o Amazon Chime SDK PSTN Audio e o AgentCore Runtime estão disponíveis.

Custos e limpeza

Os dois maiores itens de custo são a cobrança por minuto do número gratuito e as tarefas Fargate sempre ativas. É possível reduzir ambos: um número DID (Discagem Direta a Ramal) local custa menos por minuto que um número gratuito, e escalar as tarefas Fargate para baixo fora do horário comercial reduz o custo de computação. Recomenda-se configurar um orçamento no AWS Cost Explorer para acompanhar os gastos.

Para remover os recursos e evitar cobranças contínuas, o script de limpeza exclui as stacks na ordem inversa:

# Visualize o que será excluído sem remover nada.
./scripts/cleanup-all.sh --dry-run

# Exclua todas as stacks criadas pela implantação.
./scripts/cleanup-all.sh

A limpeza é destrutiva: libera o número gratuito, exclui o histórico de pedidos no Amazon DynamoDB, remove o segredo no AWS Systems Manager Parameter Store e exclui as imagens de container no Amazon ECR. Faça backup de tudo que quiser manter antes de executar. Após o script finalizar, confirme no console do AWS CloudFormation que as stacks foram removidas (veja Visualizando dados e recursos de stacks do AWS CloudFormation no Console de Gerenciamento da AWS) e no console do Amazon Chime SDK que o número gratuito foi liberado (veja Gerenciando números de telefone no Amazon Chime SDK).

Conclusão

A arquitetura publicada pela AWS mantém telefonia, agente e backend independentes, de modo que cada parte pode evoluir por conta própria. É possível atualizar dados do cardápio, trocar o modelo de voz ou adicionar um canal sem coordenar mudanças em toda a stack. Para o restaurante, isso significa que pedidos por telefone chegam sem tirar funcionários do balcão, os clientes recebem um cumprimento imediato em vez de música de espera, e o sistema lida com os horários de pico sem precisar de mais pessoal. Novas capacidades como reservas ou pontos de fidelidade podem ser adicionadas simplesmente registrando novas ferramentas MCP, sem alterar o agente ou a camada de telefonia.

Para começar, clone o repositório de exemplo no GitHub e execute a verificação pré-implantação. A partir daí, substitua os dados de exemplo nas definições de tabela do DynamoDB com seus próprios itens de cardápio, localizações e preços, e atualize os templates de prompt no Parameter Store com o nome do restaurante, estilo de cumprimento e regras de pedido.

Fonte

Building a restaurant telephony AI host with Amazon Bedrock AgentCore and Amazon Nova 2 Sonic (https://aws.amazon.com/blogs/machine-learning/building-a-restaurant-telephony-ai-host-with-amazon-bedrock-agentcore-and-amazon-nova-2-sonic/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *