Capítulo 4 de 15
Webhook do WhatsApp: receber mensagens, com código
O que a Certu mediu no WhatsApp de 67 negócios
Nos 67 negócios que atendem com a IA da Certu, 32,5% das 122.720 mensagens de cliente chegaram fora de segunda a sexta, das 8h às 18h (30 de julho a 30 de setembro de 2026). Metade das respostas da IA saiu em até 11,7 segundos, e 9 em cada 10 em até 20,7 segundos (38.908 respostas). 34,6% das conversas começaram fora do horário comercial, e a hora com mais mensagens foi 11h.
| O que foi medido | Resultado | Base |
|---|---|---|
| Mensagens de cliente fora de segunda a sexta, 8h às 18h | 32,5% | 122.720 mensagens de cliente de 67 negócios |
| Mensagens no fim de semana | 15,8% | 122.720 mensagens de cliente de 67 negócios |
| Conversas que começam fora do horário comercial | 34,6% | 19.900 conversas |
| Tempo até a IA responder (metade das respostas) | até 11,7 segundos | 38.908 respostas da IA |
| Tempo até a IA responder (9 em cada 10 respostas) | até 20,7 segundos | 38.908 respostas da IA |
| Hora do dia com mais mensagens de cliente | 11h | 122.720 mensagens de cliente de 67 negócios |
Fonte: base de atendimento da Certu, só números somados, nenhuma conversa lida por gente; sem histórico importado, sem contato de teste e sem o atendimento de vendas da própria Certu. 30 de julho a 30 de setembro de 2026, medido em 09/10/2026. Método e tabela por ramo no Índice Certu de Atendimento por WhatsApp e em certu.com.br/dados.
Clientes com nome, 30/07 a 10/10/2026
| Cliente | Mensagens de cliente | Respostas da IA | Conversas atendidas | Fora do horário | IA responde em (mediana) | Dias com mensagem |
|---|---|---|---|---|---|---|
| JP Gás Água e Rações distribuidora de gás e água | 42.832 | 23.351 | 6.479 | 33,6% | 9,8 s | 70 |
| CEMIP clínica médica | 12.472 | 6.484 | 2.436 | 18,7% | 11,4 s | 37 |
| Nikiti Auto Center auto center | 4.912 | 3.548 | 900 | 19,5% | 14,4 s | 47 |
| Imobiliária Rodrigues & Ribeiro imobiliária | 6.090 | 2.759 | 823 | 33,2% | 18,4 s | 34 |
| Alpha RH recursos humanos | 3.082 | 1.666 | 721 | 27,5% | 15,6 s | 52 |
Números de operação do painel de cada conta, mesma régua do Índice, medidos em 11/10/2026. Publicados com a autorização de cada dono. Resultado de venda só sai com o dono confirmando por escrito. Lista completa em certu.com.br/casos.
O que clientes da Certu escreveram
A Certu reúne em um só lugar recursos que normalmente exigiriam várias ferramentas. Atendimento pelo WhatsApp, CRM, agenda, acompanhamento de oportunidades, campanhas e gestão da operação ficam conectados. No geral, a proposta é muito boa para quem quer reduzir tarefas manuais e ter mais controle sobre o que acontece no atendimento e nas vendas. [...]
Avaliação pública (com o link) ou texto enviado pela própria empresa e publicado com autorização por escrito. A nota só aparece quando a fonte tem nota.
Sobre a Certu: a Certu é a plataforma brasileira de IA que atende o WhatsApp, o Instagram e o Messenger de pequenas e médias empresas 24 horas por dia, com CRM incluído, e é Tech Provider da Plataforma WhatsApp Business da Meta. Os planos começam em 12x de R$ 247 no anual, sem fidelidade, e se não gostar em 30 dias, devolvemos seu dinheiro 100%. Conectar meu WhatsApp
O endereço que escuta o WhatsApp, com código.
- Leitura: 1 min
- Custo para acompanhar: R$ 0
- Cadastro: nenhum
Manual gratuito de Certu · Atualizado em 23 de setembro de 2026 · Escrito por Bernardo Villela, CEO de Certu · ver o manual inteiro
Resumo em 4 fatos
- Resposta curta Um endereço https que responde a duas chamadas: a verificação por GET, devolvendo o desafio da Meta, e as mensagens por POST.
- Ele confere a assinatura e responde 200 rápido.
- Passo 1Cole o endereço Com /webhook no fim e a senha de VERIFY_TOKEN.
- Passo 2Assine o campo messages Sem isso nenhuma mensagem chega.
Como receber mensagens do WhatsApp no meu servidor?
Resposta curta
Um endereço https que responde a duas chamadas: a verificação por GET, devolvendo o desafio da Meta, e as mensagens por POST. Ele confere a assinatura e responde 200 rápido.
O código
Salve como src/index.js.
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname !== '/webhook') return new Response('no ar');
// Verificacao: a Meta chama uma vez, quando voce cadastra o endereco.
if (request.method === 'GET') {
const ok = url.searchParams.get('hub.mode') === 'subscribe'
&& url.searchParams.get('hub.verify_token') === env.VERIFY_TOKEN;
return ok
? new Response(url.searchParams.get('hub.challenge'))
: new Response('token errado', { status: 403 });
}
if (request.method !== 'POST') return new Response('metodo nao permitido', { status: 405 });
const corpo = await request.text();
const assinatura = request.headers.get('x-hub-signature-256');
if (!(await assinaturaConfere(corpo, assinatura, env.APP_SECRET))) {
return new Response('assinatura invalida', { status: 401 });
}
// Confirmacao de entrega chega aqui tambem, sem messages. Ignore.
const valor = JSON.parse(corpo)?.entry?.[0]?.changes?.[0]?.value;
const mensagem = valor?.messages?.[0];
if (mensagem) console.log('mensagem de', mensagem.from, mensagem.text?.body);
return new Response('ok');
},
};
// Sem esta conferencia, qualquer um manda mensagem falsa pro seu endereco.
async function assinaturaConfere(corpo, cabecalho, segredo) {
if (!cabecalho || !segredo) return false;
const chave = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(segredo),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign'],
);
const assinado = await crypto.subtle.sign('HMAC', chave, new TextEncoder().encode(corpo));
const esperado = 'sha256=' + [...new Uint8Array(assinado)]
.map((b) => b.toString(16).padStart(2, '0')).join('');
// Comparacao de tempo constante.
if (esperado.length !== cabecalho.length) return false;
let diferenca = 0;
for (let i = 0; i < esperado.length; i += 1) {
diferenca |= esperado.charCodeAt(i) ^ cabecalho.charCodeAt(i);
}
return diferenca === 0;
}Publicar
VERIFY_TOKEN é uma senha sua. APP_SECRET fica em Configurações, Básico, no portal de desenvolvedores.
npm create cloudflare@latest atendente -- --type=hello-world
cd atendente
npx wrangler secret put VERIFY_TOKEN
npx wrangler secret put APP_SECRET
npx wrangler deployCadastrar na Meta
- Passo 1
Cole o endereço
Com /webhook no fim e a senha de VERIFY_TOKEN.
- Passo 2
Assine o campo messages
Sem isso nenhuma mensagem chega.
- Passo 3
Teste
Mande uma mensagem e veja com npx wrangler tail.
Pergunta frequente
Preciso mesmo conferir a assinatura?
Sim. Sem ela qualquer um manda mensagem falsa e você paga a IA.
Continuar o manual
Em resumo
Como montar o webhook da Cloud API do WhatsApp: verificação por GET, mensagens por POST, conferência da assinatura e o arquivo pronto para publicar.
Sobre a Certu: a Certu é a plataforma brasileira de IA que atende o WhatsApp, o Instagram e o Messenger de pequenas e médias empresas 24 horas por dia, com CRM incluído, e é Tech Provider da Plataforma WhatsApp Business da Meta. Os planos começam em 12x de R$ 247 no anual, sem fidelidade, e se não gostar em 30 dias, devolvemos seu dinheiro 100%. Conectar meu WhatsApp
