Pular para o conteúdo
WbizTool

Guias do produto

Números da caixa de entrada e webhooks de mensagens recebidas

Na página Números da caixa de entrada, você escolhe quais dos seus números de WhatsApp são sincronizados com a caixa de entrada Unibox, onde sua equipe lê e responde os chats deles. Dê a um número uma URL de webhook, e o WbizTool também envia ao seu servidor cada nova mensagem que ele recebe ou envia, como JSON assinado: registre conversas em um CRM, avise sua equipe ou dispare uma resposta automática.

Está criando o receptor? Vá para Como os webhooks são entregues, Verificar a assinatura e Payload.

Quem pode fazer isso: Proprietários e Editores adicionam números, alteram webhooks e veem o segredo do webhook. Analistas não veem Números da caixa de entrada na barra lateral. É preciso ter o add-on Unibox: US$ 20 por mês ou US$ 200 por ano pelos preços de tabela nos EUA para cada número na caixa de entrada (o seu preço aparece em Cobrança e planos), adicionado a um plano pago ou vitalício por um Proprietário em Cobrança e planos (veja Add-ons). A quantidade dele é quantos números podem estar na caixa de entrada ao mesmo tempo.

Abra Números da caixa de entrada em Caixa de entrada na barra lateral ou acesse /unibox/listeners/.

A página Números da caixa de entrada em uma janela do navegador, com Números da caixa de entrada selecionado na barra lateral: 2 de 3 números da caixa de entrada em uso, o link Guia de webhooks, o botão Adicionar número à caixa de entrada e dois cartões de números, um enviando para o próprio webhook e outro para um Zap do Zapier

Antes de começar#

  • O add-on Unibox com um número da caixa de entrada livre: a linha abaixo do título da página diz, por exemplo, "2 de 3 números da caixa de entrada em uso (add-on Unibox)", ou "Sem add-on Unibox" (veja Sem o add-on Unibox).
  • Um número de WhatsApp conectado com código QR ou código de login, mostrando Conectado em Números do WhatsApp. Números conectados pela extensão do navegador não podem ser adicionados. Uma conta do Telegram conectada pode ser adicionada como um número.
  • Para um webhook: um endereço https:// de no máximo 500 caracteres na internet pública (não localhost nem uma rede privada) que aceite requisições POST com corpo JSON e responda 2xx em até 8 segundos.

Adicionar um número à caixa de entrada#

  1. Abra a janela

    Clique em Adicionar número à caixa de entrada no canto superior direito da página.

  2. Escolha o número

    Escolha-o em Número do WhatsApp. A lista mostra seus números conectados que ainda não estão na caixa de entrada.

  3. Adicione um webhook (opcional)

    Digite seu endereço em URL do webhook (opcional). Aparece então Mensagens a notificar: deixe marcado Mensagens recebidas, Mensagens enviadas ou os dois. Você pode adicionar ou alterar o webhook depois.

    A janela Adicionar um número à caixa de entrada: 2 de 3 números da caixa de entrada em uso, o número Atacado escolhido em Número do WhatsApp (2), uma URL de webhook digitada (3), Mensagens recebidas e Mensagens enviadas marcadas, e o botão Adicionar número destacado (4)
  4. Adicione

    Clique em Adicionar número. Você vê "Número adicionado – os chats dele começam a sincronizar em poucos minutos." Se você informou uma URL de webhook, abre Seu segredo do webhook: clique em Copiar e guarde o segredo onde o seu servidor possa lê-lo. Você pode mostrá-lo de novo depois em Configurações do webhook.

  • Só mensagens novas. Um número é sincronizado a partir do momento em que você o adiciona: mensagens anteriores não são importadas nem enviadas.
  • Todos os números em uso? A janela diz "Todos os seus números da caixa de entrada estão em uso. Pare ou remova um, ou adicione mais ao add-on Unibox." Pare ou remova um número, ou peça a um Proprietário para aumentar a quantidade do add-on (Ver add-ons).
  • Adicionar de novo um número removido traz de volta a caixa de entrada dele ("Número adicionado de novo – os chats dele voltam a sincronizar a partir de agora."); as mensagens do período em que ele ficou removido não são captadas. Com uma URL de webhook, ele mantém o segredo anterior, se tinha um (use Mostrar em Configurações do webhook); caso contrário, Seu segredo do webhook abre com um novo.

O que o cartão de um número mostra#

Cada cartão mostra o número, quando o WbizTool o verificou pela última vez em busca de mensagens ("Última verificação: há 1 min", ou Nunca verificado), as Mensagens e os Contatos sincronizados dele (todos os chats sincronizados a partir dele, incluindo os que não têm mensagens na caixa de entrada), a Última mensagem e o Webhook: a URL e o que ele envia, como "Notifica cada mensagem recebida e enviada · assinado com um segredo", ou "Nenhum – as mensagens só aparecem na caixa de entrada." Um selo Zapier significa que um Zap recebe as mensagens (veja Zapier e os números da caixa de entrada).

O selo no canto superior direito diz o que o número está fazendo:

SeloSignificado
SincronizandoVerificado cerca de uma vez por minuto; mensagens novas chegam à caixa de entrada e ao seu webhook.
Sem verificação recente"Não verificado nos últimos 15 minutos – por exemplo, enquanto o número envia uma campanha, o que pausa as verificações da caixa de entrada. Se continuar, fale com o suporte." As mensagens são captadas quando o envio termina.
Número desconectado"O número do WhatsApp está desconectado, então nada novo chega." Clique em Reconecte-o.
InterrompidoInterrompido por você, ou pelo WbizTool quando o add-on terminou ou passou a cobrir menos números (veja Quando o add-on termina). Nada é sincronizado nem enviado.
Pendente"Adicionado (ex.: pelo Zapier) enquanto o número estava offline. Ele só sincroniza depois de ser iniciado." Reconecte o número, se preciso, e clique em Iniciar.

Alterar a URL do webhook ou as mensagens enviadas#

  1. Abra as configurações do webhook

    Clique em Configurações do webhook no cartão do número.

  2. Altere as configurações

    Edite a URL do webhook (opcional) e as marcações em Mensagens a notificar. Para desativar o webhook, apague a URL.

  3. Salve

    Clique em Salvar. Você vê "Configurações do webhook salvas."

    A janela Webhook – Pedidos da loja: a URL do webhook (2), Mensagens a notificar com Mensagens recebidas marcada e Mensagens enviadas desmarcada, o Segredo do webhook oculto com Mostrar e Gerar novamente, e o botão Salvar destacado (3)
  • Alterar a URL mantém o segredo. Apagar a URL exclui o segredo; uma URL adicionada depois ganha um segredo novo, mostrado uma vez em Seu segredo do webhook.
  • Sem nenhuma caixa marcada, o cartão diz "Nenhum evento selecionado – nada é notificado".

Mostrar ou gerar novamente o segredo#

O segredo tem 32 letras e dígitos. Em Configurações do webhook, em Segredo do webhook, Mostrar o revela com Copiar ao lado. Gerar novamente pergunta "Gerar um novo segredo? O atual deixa de funcionar imediatamente – atualize-o onde quer que você verifique assinaturas." Clique em Gerar novo segredo: ele é salvo na hora ("Novo segredo gerado."), sem Salvar, e todas as requisições a partir de então são assinadas com ele, inclusive as novas tentativas de mensagens anteriores.

Parar, iniciar ou remover um número#

BotãoO que acontece
PararDepois que você confirma, os chats dele deixam de sincronizar e nada é enviado. Ele deixa de ocupar um dos seus números da caixa de entrada; as configurações dele são mantidas.
IniciarEle volta a sincronizar e enviar, ocupando um dos seus números da caixa de entrada. As mensagens que chegaram enquanto ele estava parado são adicionadas à caixa de entrada, até 30 dias atrás, mas não são enviadas: só chegam ao seu webhook as mensagens a partir do momento em que você clica em Iniciar. Depois de uma parada de menos de uma hora, elas também são enviadas. Iniciar fica cinza sem o add-on ("Requer o add-on Unibox") ou sem um número da caixa de entrada livre ("Todos os seus números da caixa de entrada estão em uso – pare ou remova outro número primeiro").
RemoverPergunta "Remover … da caixa de entrada?" Os chats dele deixam de sincronizar e o webhook dele é desativado; as conversas já sincronizadas continuam na caixa de entrada. Adicione-o de novo para trazê-lo de volta.

Webhooks aguardando nova tentativa são descartados quando você para ou remove o número ou altera a URL dele.

Como os webhooks são entregues#

  • Quando: cada número da caixa de entrada é verificado cerca de uma vez por minuto enquanto está conectado; as verificações pausam enquanto ele envia mensagens, como uma campanha. Uma mensagem é enviada depois da verificação que a encontra, em geral em um ou dois minutos. Não há botão de teste: envie uma mensagem para o número de outro celular.
  • Uma requisição por mensagem: message_received para Mensagens recebidas; message_sent para Mensagens enviadas, enviadas pelo celular, pelo WhatsApp Web ou pelo WbizTool (campanhas, API, lembretes). Respostas enviadas pela caixa de entrada Unibox em geral não são enviadas: a caixa de entrada já as tem.
  • Sucesso: qualquer status 2xx em até 8 segundos. Redirecionamentos não são seguidos: um 3xx conta como falha.
  • Novas tentativas: um timeout, um erro de conexão, 429 ou um 5xx gera 3 novas tentativas, depois de 30 segundos, 1 minuto e 2 minutos. Outras respostas, como 400 ou 404, e um certificado TLS inválido não geram novas tentativas.
  • 410 Gone: o WbizTool desativa o webhook do número (URL e segredo removidos; para um hook do Zapier, o seu webhook anterior volta). O número continua sincronizando com a caixa de entrada.
  • Ordem e repetições: as requisições podem chegar fora de ordem e, raramente, duas vezes. Ordene por message.whatsapp_timestamp e ignore um message.id que você já tratou para o mesmo whatsapp_client_id. Dois dos seus números em um mesmo grupo enviam cada um a sua própria cópia.
  • Mensagens atrasadas: uma mensagem captada com atraso, por exemplo depois que o número se reconecta ou após uma pausa nas verificações, é enviada mesmo assim, com replayed como true se tiver mais de 10 minutos. As mensagens que chegaram enquanto o número estava parado não são enviadas depois de Iniciar (veja Parar, iniciar ou remover um número).
  • Verificação do endereço: a URL é verificada de novo antes de cada requisição; um host que agora aponta para uma rede privada, ou que não resolve, não recebe nada, e essa mensagem não tem nova tentativa.

Cabeçalhos#

CabeçalhoValor
Content-Typeapplication/json
X-Wbiztool-Eventmessage_received ou message_sent
X-Wbiztool-TimestampQuando a requisição foi feita, em ISO 8601 UTC. Igual a timestamp no corpo.
X-Wbiztool-Webhook-IdO ID do número na caixa de entrada. Igual a webhook_id no corpo.
X-Wbiztool-Signaturesha256= seguido da assinatura (veja Verificar a assinatura).

Verificar a assinatura#

Cada requisição é assinada com o segredo do webhook do número usando HMAC-SHA256 sobre o corpo bruto da requisição, exatamente como recebido. O digest hexadecimal em minúsculas é enviado em X-Wbiztool-Signature como sha256=<digest>. Um webhook configurado na página Números da caixa de entrada sempre tem um segredo, então o cabeçalho está sempre presente.

Calcule a assinatura a partir dos bytes brutos antes de interpretar o JSON. Interpretar e codificar o corpo de novo o altera (espaços, caracteres escapados), e a assinatura não vai bater.

// Express: register this route before app.use(express.json()), or the raw body is lost
import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.WBIZTOOL_WEBHOOK_SECRET;

app.post("/wbiztool/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const expected = "sha256=" + crypto.createHmac("sha256", SECRET).update(req.body).digest("hex");
  const received = req.get("X-Wbiztool-Signature") || "";

  const a = Buffer.from(received), b = Buffer.from(expected);
  const valid = a.length === b.length && crypto.timingSafeEqual(a, b);
  if (!valid) return res.status(401).send("Invalid signature");

  const data = JSON.parse(req.body.toString("utf8"));
  if (data.event === "message_received") {
    console.log(`New message from ${data.contact.phone}: ${data.message.content}`);
  }
  res.sendStatus(200); // answer quickly; do slow work in the background
});

app.listen(3000);

Para testar seu receptor antes de chegar uma mensagem real, assine um corpo você mesmo e envie-o:

BODY='{"event":"message_received","message":{"content":"Test"},"contact":{"phone":"12125550120"}}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$WBIZTOOL_WEBHOOK_SECRET" | sed 's/^.* //')
curl -X POST https://your-server.example/wbiztool/webhook -H 'Content-Type: application/json' -H "X-Wbiztool-Signature: sha256=$SIG" -d "$BODY"

A assinatura cobre o corpo, incluindo o timestamp dele, que é novo a cada tentativa. Para recusar requisições repetidas, rejeite um timestamp com mais de 5 minutos e ignore um message.id que você já tratou.

Payload#

Exemplos de corpos de webhook
{
  "event": "message_received",
  "timestamp": "2026-10-15T10:30:31.482913+00:00",
  "replayed": false,
  "webhook_id": 51,
  "whatsapp_client_id": "101",
  "whatsapp_phone": "12125550101",
  "platform": "whatsapp",
  "message": {
    "id": "[email protected]_3EB0C1A2B3D4E5F60718",
    "type": "chat",
    "content": "Can I add a gift note to it?",
    "from": "12125550120",
    "from_name": "Emma Thompson",
    "to": "12125550101",
    "timestamp": "2026-10-15T10:30:04+00:00",
    "whatsapp_timestamp": 1792060204,
    "direction": "incoming",
    "status": "pending",
    "is_forwarded": false,
    "forwarding_score": 0
  },
  "contact": {
    "whatsapp_id": "[email protected]",
    "phone": "12125550120",
    "lid": null,
    "phone_hidden": false,
    "name": "Emma Thompson",
    "is_group": false,
    "is_business": false
  },
  "organisation": {
    "id": "10314",
    "name": "Lumen & Wick"
  }
}

Os números, IDs e nomes acima são exemplos. O corpo real é uma única linha de JSON compacto, e todo caractere não ASCII (letras acentuadas, outros alfabetos, emojis) chega como um escape \uXXXX, como \ud83d\udcf8 para 📸. Mais campos podem ser adicionados; ignore os que você não usa.

Campos de nível superior#

CampoTipoDescrição
eventstringmessage_received ou message_sent.
timestampstringQuando a requisição foi feita (ISO 8601, UTC).
replayedbooleantrue quando a mensagem é mais de 10 minutos anterior à requisição: uma recuperação, por exemplo depois que o número se reconecta. Caso contrário, false. timestamp continua sendo o horário da requisição.
webhook_idintegerO ID do número na caixa de entrada.
whatsapp_client_idstringO ID do seu número de WhatsApp, como em Números do WhatsApp e na API.
whatsapp_phonestringSeu número de WhatsApp, só dígitos.
platformstringwhatsapp, ou telegram para os chats de uma conta do Telegram.
messageobjectA mensagem; veja abaixo.
contactobjectA pessoa ou o grupo com quem é o chat; veja abaixo.
organisationobjectSeu espaço de trabalho: id (string) e name.
groupobjectSó em chats de grupo: name, o nome do grupo.

Campos de message#

CampoTipoDescrição
idstringO ID da mensagem no WhatsApp. Use-o para ignorar repetições.
typestringchat para texto. Caso contrário, o tipo do WhatsApp, como image, video, audio, ptt (mensagem de voz), document, sticker, location, vcard (cartão de contato), poll_creation, call_log (uma chamada) ou revoked (uma mensagem apagada).
contentstringO texto de uma mensagem chat. Caso contrário, um rótulo: 📸 Image, 🎥 Video, 🎵 Audio, 🎤 Voice Message, 😊 Sticker, Document: e o texto do documento (Document sem ele), ou o tipo com iniciais maiúsculas, como Location ou Call_Log. Legendas de fotos e vídeos não são incluídas.
fromstringSempre o número do contato (ou o ID do grupo), nos dois sentidos. Vazio quando o WhatsApp oculta o número.
from_namestringO nome do contato ou do grupo. Pode estar vazio.
tostringSempre o seu número de WhatsApp, nos dois sentidos.
timestampstringQuando a mensagem foi enviada no WhatsApp (ISO 8601, UTC).
whatsapp_timestampintegerO mesmo horário em segundos Unix.
directionstringincoming ou outgoing. Use este campo, e não from e to, para saber o sentido.
statusstringSempre pending: não é um status de entrega ou de leitura.
is_forwardedbooleanSe a mensagem foi encaminhada.
forwarding_scoreintegerAtualmente sempre 0.
mediaobjectPara fotos, vídeos, áudios, mensagens de voz, documentos e figurinhas: filename (muitas vezes vazio em fotos), mimetype, size em bytes e, quando o WbizTool guardou uma cópia, url.
media.urlstringUm link de download assinado que expira – depois de 3½ a 7 dias –, então baixe o arquivo quando o webhook chegar. Use-o exatamente como enviado. Ausente quando o arquivo não pôde ser guardado, como arquivos com mais de 15 MB.
senderobjectSó em chats de grupo: quem escreveu a mensagem – name, phone (vazio quando o WhatsApp oculta o número) e phone_hidden (true quando oculta).

Campos de contact#

CampoTipoDescrição
whatsapp_idstringO ID do chat no WhatsApp: …@c.us para uma pessoa, …@g.us para um grupo, ou um ID de privacidade como 62337239240946@lid.
phonestringO número sem +, ou o ID do grupo. Vazio quando o WhatsApp oculta o número.
lidstring or nullO ID de privacidade do WhatsApp para o contato, quando o WhatsApp usa um; caso contrário, null.
phone_hiddenbooleantrue quando o WhatsApp não compartilha o número do contato. O WbizTool preenche o número quando o WhatsApp o disponibiliza.
namestringO nome do contato ou do grupo. Pode estar vazio.
is_groupbooleantrue em chats de grupo.
is_businessbooleantrue em contas do WhatsApp Business, quando se sabe.

Zapier e os números da caixa de entrada#

O gatilho Incoming WhatsApp Message do WbizTool no Zapier usa esses webhooks. Ativar um Zap adiciona o número à caixa de entrada, se necessário (ocupando um dos seus números da caixa de entrada), e aponta o webhook dele para o Zapier, só para mensagens recebidas, com um segredo próprio; o cartão mostra um selo Zapier. A sua URL de webhook, o seu segredo e as suas marcações voltam quando o Zap é desativado.

Configurações do webhook então avisa: "Este webhook pertence a um Zap do Zapier. Alterar ou remover a URL faz o Zap deixar de receber mensagens." Parar e Remover também avisam: o Zap continua ativo no Zapier, mas não recebe nada, então desative-o no Zapier. Veja Como o gatilho funciona com seus números da caixa de entrada.

Sem o add-on Unibox#

A página diz "Sem add-on Unibox" e "O add-on Unibox não está ativo neste espaço de trabalho.", e Adicionar número à caixa de entrada abre Add-on Unibox obrigatório: "Para adicionar números do WhatsApp à caixa de entrada compartilhada e receber as mensagens deles por webhook, assine o add-on Unibox." Um Proprietário clica em Ver add-ons e adiciona o add-on Número do Unibox em Cobrança e planos, em um plano pago ou vitalício (não no teste grátis).

A página Números da caixa de entrada sem o add-on: Sem add-on Unibox, o aviso amarelo O add-on Unibox não está ativo neste espaço de trabalho com o botão Ver add-ons destacado, e Ainda não há números na caixa de entrada

Quando o add-on termina ou um número se desconecta#

  • O add-on termina: todos os números da caixa de entrada são interrompidos, na hora ou em cerca de uma hora. Os cartões mostram Interrompido com "Interrompido porque o add-on Unibox não está ativo neste espaço de trabalho." Proprietários e Editores ficam sabendo quais caixas de entrada foram interrompidas, no email de cobrança ou no alerta "Alguns números ou recursos de … pararam" (Problemas com números e envios em Notificações). Conversas, URLs de webhook e segredos são mantidos: quando o add-on voltar, clique em Iniciar em cada número. As mensagens do período em que ele ficou parado são então adicionadas à caixa de entrada, até 30 dias atrás, mas não são enviadas ao seu webhook.
  • O add-on cobre menos números do que os ativos: "Há mais números ativos do que seu add-on permite. Os extras mais recentes são interrompidos automaticamente em cerca de uma hora."
  • O número se desconecta: o cartão mostra Número desconectado e nada é sincronizado nem enviado. Depois que você o reconecta, as mensagens que chegaram nesse meio-tempo também são captadas e enviadas; as que têm mais de 10 minutos vêm com replayed como true.
  • Ele é reconectado com outro celular: o número da caixa de entrada e o webhook dele continuam para o novo número (mesmo whatsapp_client_id, novo whatsapp_phone) a partir desse momento; os chats antigos ficam na caixa de entrada como histórico.

Solução de problemas#

Mensagem ou problemaO que fazer
Add-on Unibox obrigatório, ou "Isso requer o add-on Unibox."Peça a um Proprietário para adicionar o add-on Unibox; veja Sem o add-on Unibox.
"Todos os seus números da caixa de entrada estão em uso. Pare ou remova um primeiro, ou adicione mais ao add-on Unibox."Pare ou remova um número de que você não precisa, ou aumente a quantidade do add-on. Números parados não contam.
"Nenhum número do WhatsApp conectado está livre para adicionar."Todos os números conectados já estão na caixa de entrada, ou nenhum está conectado com código QR ou código de login. Clique em Conectar um número.
"Este número não está mais conectado. Reconecte-o ou escolha outro."Reconecte-o em Números do WhatsApp e tente de novo.
"Digite um endereço completo que comece com https://" ou "A URL do webhook deve começar com https://"Use um endereço https://; http:// não é aceito.
"O endereço pode ter no máximo 500 caracteres."Use uma URL mais curta, por exemplo sem uma query longa.
"A URL do webhook deve apontar para um endereço público da internet."O host é localhost, um endereço de rede privada, ou não resolve. Use um endereço público, ou um túnel durante os testes.
Não aparece Números da caixa de entrada na barra lateral, ou "Somente o proprietário do espaço de trabalho ou um editor pode fazer isso."Você é Analista. Peça a um Proprietário para tornar você Editor; veja Funções e permissões.
Nenhum webhook chegaConfira se o cartão mostra Sincronizando, se a URL está certa e se a caixa está marcada em Mensagens a notificar. Seu servidor precisa responder 2xx em até 8 segundos, com um certificado válido. Respostas da caixa de entrada não são enviadas.
Alguns webhooks estão faltandoSeu servidor respondeu 4xx ou 3xx, falhou nas 3 novas tentativas, ou o host dele não resolveu. Confira os logs dele no horário da mensagem que falta. As mensagens que chegaram enquanto o número estava parado não são enviadas: leia-as na caixa de entrada.
A assinatura não bateUse o corpo bruto, não o JSON codificado de novo, e o segredo atual. Enquanto um Zap usa o número, as requisições vão para o Zapier com o segredo do Zapier.
Um link de mídia retorna um erroEle expirou. Baixe os arquivos quando o webhook chegar.

Relacionados#