Atualizado em 25/10/2026
Com a API oficial do WhatsApp, um restaurante pode publicar o cardápio no catálogo da Meta, receber o pedido montado no carrinho do próprio WhatsApp por webhook, cobrar com PIX dentro da conversa e enviar cada mudança de status (em preparo, saiu para entrega, entregue) para o cliente. Como o pedido nasce de uma mensagem do cliente, quase todo o ciclo acontece dentro da janela de 24 horas, em que respostas livres e interativas são mensagens de serviço. Templates entram só para avisos fora dessa janela e para a avaliação no dia seguinte.
Este guia percorre o fluxo de um pedido de delivery de ponta a ponta, com os payloads da Cloud API, a categoria de cada mensagem e os cuidados de operação.
O fluxo completo de um pedido
| Etapa | O que acontece | Tipo de mensagem |
|---|---|---|
| Cliente chama | “Oi, quero pedir” ou clique num link wa.me | Mensagem recebida, abre a janela de 24 h |
| Cardápio | Restaurante envia o catálogo ou uma seleção | catalog_message ou product_list |
| Carrinho | Cliente escolhe itens e envia o carrinho | Webhook type: "order" |
| Endereço | Restaurante pede a localização | location_request_message |
| Pagamento | Restaurante envia o resumo com PIX | order_details |
| Confirmação | PSP confirma o PIX, restaurante atualiza | order_status |
| Preparo e entrega | “Em preparo”, “Saiu para entrega”, “Entregue” | Texto ou order_status dentro da janela |
| Avaliação | Pesquisa sobre aquele pedido | Template de utilidade, se fora da janela |
Cada etapa usa um recurso documentado pela Meta. Vamos a elas.
Cardápio no catálogo
O catálogo da Meta aceita produtos e serviços, com nome, descrição, preço, imagem e disponibilidade. Você sobe o cardápio pelo Commerce Manager ou pela API de catálogo e conecta o catálogo à conta do WhatsApp (visão geral de catálogos).
Há três formas de mostrar o cardápio na conversa:
- Mensagem de catálogo (
catalog_message): uma miniatura com o botão “Ver catálogo”, que abre o cardápio inteiro dentro do WhatsApp. - Mensagem multiproduto (
product_list): até 30 itens organizados em seções, como “Pizzas”, “Bebidas” e “Sobremesas”. A Meta cita repetir um pedido habitual de delivery como um dos usos. - Produto único (
product): destaca um item, como o prato do dia.
Exemplo de mensagem multiproduto com duas seções:
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "product_list",
"header": { "type": "text", "text": "Cardápio de hoje" },
"body": { "text": "Escolha os itens e toque em Ver carrinho para enviar o pedido." },
"action": {
"catalog_id": "367025965434465",
"sections": [
{ "title": "Pizzas", "product_items": [
{ "product_retailer_id": "PIZZA-MARG" },
{ "product_retailer_id": "PIZZA-CALAB" } ] },
{ "title": "Bebidas", "product_items": [
{ "product_retailer_id": "REFRI-LATA" } ] }
]
}
}
}
O carrinho vem ativado por padrão em cada número e pode ser desligado nas configurações de comércio. Item esgotado precisa sair do catálogo (ou ficar indisponível) antes do horário de pico, ou o cliente vai pedir algo que a cozinha não tem. Detalhes em catálogo e mensagens de produto.
Recebendo o pedido pelo webhook
Quando o cliente envia o carrinho, chega um webhook de mensagem com type: "order", segundo a referência de pedidos:
{
"from": "5584999999999",
"id": "wamid.HBgM...",
"timestamp": "1761400000",
"type": "order",
"order": {
"catalog_id": "367025965434465",
"text": "Sem cebola, por favor",
"product_items": [
{ "product_retailer_id": "PIZZA-MARG", "quantity": 1, "item_price": 59.9, "currency": "BRL" },
{ "product_retailer_id": "REFRI-LATA", "quantity": 2, "item_price": 7, "currency": "BRL" }
]
}
}
Três detalhes importam para a cozinha:
- O carrinho não pode ser editado depois de enviado. Para trocar algo, o cliente envia um novo carrinho. Seu sistema precisa decidir se o novo substitui o anterior.
- Observações vêm em
order.text. “Sem cebola” e “ponto da carne” chegam ali. Mostre esse campo na tela da cozinha. - Recalcule o preço no seu sistema. Use o
product_retailer_idpara buscar o preço atual e as regras de taxa de entrega, em vez de confiar só no valor do webhook.
Nem todo item cabe num catálogo: pizza meio a meio e montagem de açaí com vários adicionais costumam exigir outra interface. Para esses casos, uma lista interativa ou um formulário com WhatsApp Flows resolve a escolha dos adicionais dentro da conversa.
Endereço e localização
Para o endereço, a mensagem location_request_message mostra um botão de enviar localização. A resposta chega no webhook com latitude, longitude e, quando disponível, endereço (documentação):
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "location_request_message",
"body": { "text": "Para calcular a taxa de entrega, envie sua localização ou digite o endereço com número e complemento." },
"action": { "name": "send_location" }
}
}
Peça sempre o complemento por texto. A localização do celular nem sempre aponta o apartamento ou o bloco certo.
Pagamento com PIX na conversa
No Brasil, a Meta oferece o Orders API: você envia uma mensagem order_details com os itens, o total e um código PIX dinâmico gerado pelo seu banco ou PSP. O cliente copia o código e paga no app do banco (PIX dinâmico). Os valores usam inteiro com offset 100: R$ 73,90 vira 7390.
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "order_details",
"body": { "text": "Pedido #2231: 1 pizza margherita e 2 refrigerantes. Entrega estimada em 45 minutos." },
"action": {
"name": "review_and_pay",
"parameters": {
"reference_id": "pedido-2231",
"type": "physical-goods",
"payment_type": "br",
"payment_settings": [
{ "type": "pix_dynamic_code", "pix_dynamic_code": {
"code": "CODIGO_PIX_COPIA_E_COLA", "merchant_name": "Pizzaria Exemplo LTDA",
"key": "39580525000189", "key_type": "CNPJ" } }
],
"currency": "BRL",
"total_amount": { "value": 7390, "offset": 100 }
}
}
}
}
O reference_id precisa ser único por pedido. O WhatsApp não faz conciliação: quem confirma o PIX é o seu PSP, e o seu sistema avisa o cliente com order_status. Pagamento na entrega (maquininha ou dinheiro) continua possível; nesse caso, basta confirmar o pedido por texto. A visão geral de pagamentos no Brasil lista também boleto e link de pagamento.
Status do pedido
Depois do pagamento, a mensagem order_status atualiza o pedido na conversa. A Meta aceita os status pending, processing, partially_shipped, shipped, completed e canceled, e o pagamento captured mostra o selo de pago (Orders API):
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "order_status",
"body": { "text": "Pagamento confirmado! Seu pedido #2231 já está em preparo." },
"action": {
"name": "review_order",
"parameters": {
"reference_id": "pedido-2231",
"order": { "status": "processing" },
"payment": { "status": "captured", "timestamp": 1761400300 }
}
}
}
}
Um mapeamento simples para delivery:
| Evento da cozinha | Status do pedido | Texto sugerido |
|---|---|---|
| PIX confirmado | processing | “Pagamento confirmado, pedido em preparo.” |
| Motoboy saiu | shipped | “Seu pedido saiu para entrega.” |
| Entregue | completed | “Pedido entregue. Bom apetite!” |
| Cancelado antes do pagamento | canceled | Motivo em até 120 caracteres |
O cancelamento falha se já existir pagamento confirmado ou pendente para aquele order_details. Nesse caso, trate o estorno no PSP e avise por texto.
Quanto custa e qual a categoria de cada mensagem
O pedido começa com uma mensagem do cliente, que abre a janela de 24 horas. Dentro dela, texto, catálogo, order_details e order_status são mensagens de serviço. Desde 1º de outubro de 2026, cada número tem 1.000 mensagens de serviço gratuitas por mês, e a Meta cobra a partir da 1.001ª. Templates de utilidade enviados dentro da janela passaram a ser cobrados como utilidade (página de preços). Por isso, para status dentro da janela, prefira mensagens livres ou order_status a templates.
Fora da janela, só template:
| Mensagem | Categoria | Observação |
|---|---|---|
| Atraso de pedido de ontem, estorno processado | Utilidade | Dados do pedido, sem oferta |
| Pesquisa sobre o pedido entregue | Utilidade | Precisa citar o pedido; pesquisa genérica não é aprovada como utilidade |
| Promoção da semana, cupom, “volte a pedir” | Marketing | Exige opt-in de ofertas |
As regras de categoria estão nas diretrizes de categorização. O artigo sobre mensagens de utilidade na janela de atendimento explica a mudança de cobrança.
Avaliação depois da entrega
A Meta aceita como utilidade a pesquisa ligada a um pedido específico, como “Entregamos seu pedido {{1}}. Se houve algum problema, fale com a gente abaixo.” Se a entrega aconteceu há poucos minutos, a janela ainda está aberta e você pode enviar botões de resposta rápida, sem template:
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Como chegou o pedido #2231?" },
"action": { "buttons": [
{ "type": "reply", "reply": { "id": "aval_2231_bom", "title": "Chegou ótimo" } },
{ "type": "reply", "reply": { "id": "aval_2231_ok", "title": "Teve problema" } }
] }
}
}
Se o cliente tocar em “Teve problema”, passe a conversa para uma pessoa. O guia de pós-venda e NPS aprofunda o tema.
Operação no horário de pico
- Cozinha não lê WhatsApp. O pedido do webhook deve cair no mesmo sistema de pedidos (KDS ou impressora) dos outros canais.
- Vários atendentes, um número. Com a API, várias pessoas atendem o mesmo número por uma ferramenta de atendimento. Veja multiatendimento.
- Horário de funcionamento. Fora do horário, responda com uma mensagem automática que informa quando a cozinha abre. Veja mensagem de ausência e horário.
- Fila no webhook. Responda 200 na hora e processe o pedido numa fila, para não perder eventos no pico.
Como fazer isso com a Vectalk
A Vectalk é um proxy da WhatsApp Cloud API oficial: catálogo, product_list, order_details, order_status e localização usam os mesmos payloads da Meta, enviados para https://apis.vectalk.com.br/api/messages. A documentação traz exemplos de mensagens de produto e catálogo e das configurações de comércio, que ligam ou desligam o carrinho por número. Com a coexistência, o restaurante mantém o número no app WhatsApp Business. Crie sua conta em apps.vectalk.com.br/register e leia o guia da API oficial do WhatsApp.
Perguntas frequentes
Preciso de catálogo para receber pedidos pelo WhatsApp?
Não. Dá para receber pedidos por texto ou por listas interativas. O catálogo facilita porque o pedido chega estruturado, com código do item e quantidade.
O cliente consegue pagar com PIX sem sair do WhatsApp?
Ele copia o código PIX na conversa e cola no app do banco. A Meta também descreve um modo que abre o app do banco direto, mas, na data desta consulta, ele exige cadastro manual.
Mensagem de “saiu para entrega” é cobrada?
Se a janela de 24 horas está aberta, é mensagem de serviço: grátis até 1.000 por número no mês. Se for template, é cobrada como utilidade.
Posso mandar promoção para quem já pediu?
Só com template de marketing e opt-in de ofertas. Ter feito um pedido não equivale a aceitar promoções.
Funciona com o número que o restaurante já usa no celular?
Sim, com a coexistência: o número continua no app WhatsApp Business e passa a funcionar também na API.
Fontes oficiais consultadas em 25/10/2026: Visão geral de catálogos, Mensagens multiproduto, Configurações de comércio, Webhook de pedidos, Mensagens de pedido de localização, Pagamentos no Brasil, Orders API, PIX dinâmico, Categorização de templates, Preços, Documentação da Vectalk.
