POST com um corpo JSON de formato fixo: campos que não se aplicam vêm como null ou false, nunca são omitidos.
Esta página trata do envio de mensagens da WizeBot para o seu sistema. Para o caminho inverso, em que uma plataforma externa dispara mensagens na WizeBot, veja Automações com webhooks.
Onde configurar
Acesse Configurações › Webhook e clique em Novo Webhook. Você pode ter mais de um webhook, cada um com a própria URL e os próprios filtros.Todas as mensagens ou só alguns tipos
Em Mensagens enviadas você decide quais mensagens que saem da sua conta chegam ao webhook:- Todas as mensagens: toda mensagem enviada, inclusive de tipos que a WizeBot venha a criar depois.
- Escolher tipos: só os tipos marcados. É preciso marcar pelo menos um.
Um webhook novo já vem com Todas as mensagens selecionado.
Eventos
Mensagem enviada só é encaminhada depois que o canal aceita o envio. Envio recusado não gera
message.sent.
Formato do envio
Todo envio tem o mesmo envelope:Campos de data
Os campos seguem
camelCase, diferente do snake_case da API da WizeBot.Diferenças por tipo de mensagem
Texto
body traz o texto. mediaUrl, caption, mimeType e fileName vêm null.
Mídia
Imagem, áudio, vídeo, documento e figurinha.body vem null; a legenda, quando existe, vem em caption.
- Recebida:
mediaUrlé o endereço público do arquivo, guardado pela WizeBot. O encaminhamento acontece depois que o arquivo foi baixado do WhatsApp, por isso pode chegar alguns segundos depois de uma mensagem de texto enviada no mesmo momento. Se o arquivo não puder ser obtido do WhatsApp, a mensagem é encaminhada assim mesmo, commediaUrl: null. - Enviada:
mediaUrlé o endereço do arquivo usado no envio. - Resposta pelo celular (
phone_echo): vem commediaUrl: null. O tipo, a legenda e o nome do arquivo vêm preenchidos quando existem.
Botão e lista
Quando o contato toca num botão ou escolhe um item de lista, chega ummessage.received com type interactive (botão ou lista de mensagem interativa) ou button (botão de modelo). body vem null: a opção escolhida não vem no encaminhamento.
Na mensagem enviada com botões ou lista, type é interactive e body traz o texto principal da mensagem. Os botões não vêm.
Resposta de formulário
A resposta de um formulário do WhatsApp chega comomessage.received com type interactive e body null. As respostas preenchidas não vêm no encaminhamento.
Modelo
Na mensagem enviada comtype template, body traz o texto do corpo do modelo com as variáveis já preenchidas. Cabeçalho e botões não vêm, e mediaUrl vem null mesmo quando o modelo tem cabeçalho de mídia.
Anúncio de clique para o WhatsApp
A mensagem que o contato envia ao chegar por um anúncio trazreferral preenchido:
Qualquer um desses campos pode vir
null.
Localização, contatos e outros
Mensagens de localização, cartão de contato e pedido chegam com otype correspondente e body null. O conteúdo delas não vem no encaminhamento.
Exemplos
Todos os dados abaixo são fictícios.Mensagem recebida: texto
Mensagem recebida: texto
Mensagem recebida: mídia
Mensagem recebida: mídia
Mensagem recebida: anúncio
Mensagem recebida: anúncio
Mensagem enviada: atendente
Mensagem enviada: atendente
Mensagem enviada: modelo enviado pelo atendente
Mensagem enviada: modelo enviado pelo atendente
Mensagem enviada: fluxo
Mensagem enviada: fluxo
Mensagem enviada: agente de IA
Mensagem enviada: agente de IA
Mensagem enviada: campanha
Mensagem enviada: campanha
Respostas longas do agente de IA podem ser enviadas em várias partes. Nesse caso, cada parte chega como um
message.sent separado.Cabeçalhos
Assinatura HMAC-SHA256
Com o Secret preenchido, a WizeBot calcula o HMAC-SHA256 do corpo da requisição, usando o secret como chave, e envia o resultado em hexadecimal no cabeçalhoX-Webhook-Signature, com o prefixo sha256=.
Para validar:
1
Use o corpo bruto
Calcule a assinatura sobre os bytes do corpo exatamente como chegaram, antes de converter o JSON. Reconverter o objeto para texto pode mudar espaços ou a ordem dos campos e invalidar a comparação.
2
Calcule e compare
Calcule o HMAC-SHA256 do corpo com o seu secret, acrescente o prefixo
sha256= e compare com o cabeçalho. No seu servidor, use uma comparação de tempo constante.3
Recuse o que não bate
Responda com erro e descarte o conteúdo quando a assinatura não bater.
corpo.json:
Entrega
Desativação automática
Cada tentativa que falha soma uma falha seguida, e cada entrega com sucesso zera a contagem. Ao chegar a 50 falhas seguidas, o webhook é desativado automaticamente e para de receber mensagens. Para reativar, corrija o problema no seu servidor e clique em Resetar no card do webhook, em Configurações › Webhook. Isso zera a contagem e volta a ativar o webhook. Só ligar o webhook de novo, sem resetar, mantém a contagem: a próxima falha o desativa outra vez.Mensagens repetidas
A mesma mensagem pode chegar mais de uma vez, por exemplo quando o seu servidor processa a requisição mas demora mais que o tempo limite para responder. Para não processar duas vezes, use a combinação deevent com data.messageId como chave.
1
Responda rápido
Responda
200 assim que receber e processe depois. Processamento demorado dentro da requisição aumenta a chance de nova tentativa.2
Não dependa da ordem
Mensagens podem chegar fora da ordem em que aconteceram, inclusive por causa das novas tentativas.
Testar a configuração
O botão Enviar teste, no card do webhook, manda ummessage.received de exemplo só para aquele webhook, desde que ele esteja ativo. O messageId do teste começa com test-.
Limitações atuais
- Status de entrega não é encaminhado. Os eventos de enviado, entregue, lido e falha não geram encaminhamento. Para saber se um envio foi entregue ou lido, use a consulta de status.
- Reações não são encaminhadas, nem as recebidas nem as enviadas.
- Mensagens recebidas só são encaminhadas no WhatsApp. Mensagens recebidas no Telegram, no chat do site ou por SMS não geram
message.received. - Mensagens enviadas em outros canais (Telegram, chat do site e SMS por fluxo) só chegam a webhooks com Todas as contas em Conta WhatsApp.
- Conteúdo que não vem no encaminhamento: a opção escolhida em botões e listas, as respostas de formulários, o conteúdo de localização, de cartão de contato e de pedido, e o cabeçalho e os botões de modelos.

