Integração
API de WhatsApp para Chatwoot
Conecte o Chatwoot ao Zapixo para central de atendimento omnichannel.
# A resposta do agente no Chatwoot sai pelo WhatsApp assim:
# a ponte recebe o webhook message_created da caixa do tipo API
# e chama o Zapixo com o número do contato.
curl -X POST https://zapixo.com.br/api/v1/messages/text \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"instance":"suporte","number":"5511999999999","text":"Resposta do agente"}'O Chatwoot é a central de atendimento: caixa compartilhada, conversa com dono, histórico. O Zapixo é o número de WhatsApp. Entre os dois fica uma ponte pequena, porque cada lado avisa do seu jeito: o Zapixo manda webhook quando chega mensagem do cliente, e o Chatwoot manda webhook quando o agente responde.
Não existe um endereço do Chatwoot que receba o webhook do Zapixo direto — tutorial que promete isso está falando de outra integração. A ponte pode ser um workflow no n8n ou uma rota no seu backend.
O que dá para fazer com Chatwoot e WhatsApp
Caixa compartilhada
Várias pessoas atendendo o mesmo número, cada conversa com responsável e histórico.
Bot antes do humano
Um fluxo automático responde o básico e passa para a fila do Chatwoot quando não resolve.
Aviso ativo com resposta no lugar certo
O sistema dispara a mensagem pelo Zapixo, e a resposta do cliente cai na conversa dele no Chatwoot.
Métrica de atendimento
Tempo de primeira resposta e volume por agente saem dos relatórios do próprio Chatwoot.
Enviar mensagens pelo Chatwoot
Crie uma caixa de entrada do tipo API
No Chatwoot, em Configurações › Caixas de entrada, adicione uma caixa do tipo API. No campo de webhook, coloque a URL da sua ponte: é para lá que o Chatwoot manda cada mensagem criada nas conversas dessa caixa.
Filtre o que sai
O Chatwoot avisa no evento
message_createda cada mensagem, inclusive as que a própria ponte criou. Mande ao WhatsApp só quandomessage_typeforoutgoingeprivateforfalse. Nota privada é conversa interna da equipe e não pode chegar ao cliente.Envie pelo Zapixo
Com o número da conversa em mãos, a ponte chama o Zapixo com o
contentda mensagem do agente:POST https://zapixo.com.br/api/v1/messages/text Authorization: Bearer zpx_... Content-Type: application/json { "instance": "suporte", "number": "5511999999999", "text": "Seu pedido saiu para entrega hoje de manhã." }Guarde o vínculo entre conversa e número
A ponte precisa saber qual conversa do Chatwoot é de qual número. Esse vínculo diz para onde vai a resposta do agente e em qual conversa entra a próxima mensagem do cliente. Guarde numa tabela sua, não dependa de ler o telefone de dentro do evento.
Receber mensagens no Chatwoot
Cole a URL da ponte no Zapixo
No painel do Zapixo, abra a instância e cole a URL da ponte em Webhook de mensagens. Cada mensagem do cliente chega como
messages.upsert. DescartefromMe: true, que é mensagem saindo da própria instância.Encontre ou crie o contato
Procure o contato pelo telefone no Chatwoot e crie se não existir. Normalize o número antes de comparar: o mesmo cliente não pode virar dois contatos por causa de um 9 a mais ou de um +55.
Poste a mensagem como recebida
Na conversa vinculada ao número — ou numa nova, aberta na caixa do tipo API —, crie a mensagem com
message_typeigual aincoming. A autenticação é o headerapi_access_token, com o token de um agente ou bot do Chatwoot:POST https://seu-chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages api_access_token: SEU_TOKEN_DO_CHATWOOT Content-Type: application/json { "content": "Oi, quero saber o status do meu pedido", "message_type": "incoming" }
Erros comuns e como resolver
- Mensagens em laço
- A mensagem que a ponte cria no Chatwoot também dispara o webhook do Chatwoot, e a que o Zapixo envia pode voltar com
fromMe: true. Os dois filtros juntos —outgoingdo lado do Chatwoot efromMefalso do lado do Zapixo — cortam o laço. - Nota privada chegou ao cliente
- Faltou conferir
private. Nota da equipe também geramessage_created, e sem o filtro ela sai pelo WhatsApp. - Contato duplicado
- O mesmo telefone escrito de dois jeitos vira dois contatos. Guarde e compare sempre só os dígitos, com DDI:
5511999999999. - Mensagem do cliente entra duas vezes
- Se a ponte não devolver 2xx ao Zapixo em até 10 segundos, ele tenta de novo, até 3 vezes. Responda o webhook na hora e ignore
data.key.idque já foi postado no Chatwoot. - Resposta do agente não sai
- Confira a URL de webhook da caixa do tipo API, se a ponte responde ao Chatwoot, e se o número guardado no vínculo está só com dígitos. O
401do Zapixo aponta chave errada; o404,instancecom nome diferente do painel.
Perguntas frequentes
O Chatwoot tem integração nativa com o Zapixo?
Não. A ligação é uma ponte entre os webhooks dos dois lados, num workflow do n8n ou numa rota do seu backend.
Funciona com Chatwoot cloud e self-hosted?
Funciona nos dois. A ponte só precisa alcançar a API do Chatwoot e receber o webhook dele.
Por que usar a caixa do tipo API?
É o tipo de caixa feito para canal externo: o Chatwoot avisa a sua URL quando o agente responde e aceita mensagens criadas pela API.
Dá para mandar anexo do Chatwoot para o WhatsApp?
Dá. Quando a mensagem do agente tiver anexo, a ponte usa /api/v1/messages/media com o link público do arquivo.
O trial tem limite de mensagens?
Tem. Ao atingir o limite, a API responde 402 com o link para assinar.
Leia também
- Como integrar WhatsApp com seu CRM
O desenho de integração entre WhatsApp e CRM: identificar o contato pelo telefone, registrar a conversa, disparar por evento de funil e evitar duplicidade de cadastro.