Configurar Webhook da Instância
POST /webhook
Gerencia a configuração de webhooks para receber eventos em tempo real da instância. Permite gerenciar múltiplos webhooks por instância através do campo ID e action.
🚀 Modo Simples (Recomendado)
Uso mais fácil - sem complexidade de IDs:
- Não inclua
actionnemidno payload - Gerencia automaticamente um único webhook por instância
- Cria novo ou atualiza o existente automaticamente
- Recomendado: Sempre use
"excludeMessages": ["wasSentByApi"]para evitar loops - Exemplo:
{"url": "https://meusite.com/webhook", "events": ["messages"], "excludeMessages": ["wasSentByApi"]}
🧪 Sites para Testes (ordenados por qualidade)
Para testar webhooks durante desenvolvimento:
- https://webhook.cool/ - ⭐ Melhor opção (sem rate limit, interface limpa)
- https://rbaskets.in/ - ⭐ Boa alternativa (confiável, baixo rate limit)
- https://webhook.site/ - ⚠️ Evitar se possível (rate limit agressivo)
⚙️ Modo Avançado (Para múltiplos webhooks)
Para usuários que precisam de múltiplos webhooks por instância:
💡 Dica: Mesmo precisando de múltiplos webhooks, considere usar addUrlEvents no modo simples.
Um único webhook pode receber diferentes tipos de eventos em URLs específicas
(ex: /webhook/message, /webhook/connection), eliminando a necessidade de múltiplos webhooks.
-
Criar Novo Webhook:
- Use
action: "add" - Não inclua
idno payload - O sistema gera ID automaticamente
- Use
-
Atualizar Webhook Existente:
- Use
action: "update" - Inclua o
iddo webhook no payload - Todos os campos serão atualizados
- Use
-
Remover Webhook:
- Use
action: "delete" - Inclua apenas o
iddo webhook - Outros campos são ignorados
- Use
Eventos Disponíveis
connection: Alterações no estado da conexãohistory: Recebimento de histórico de mensagensmessages: Novas mensagens recebidasmessages_update: Atualizações em mensagens existentesnewsletter_messages: Novos posts/mensagens de canais do WhatsApp Para views e reactions de canais, use a rota/newsletter/updates.call: Eventos de chamadas VoIPcontacts: Atualizações na agenda de contatospresence: Alterações no status de presençagroups: Modificações em gruposlabels: Gerenciamento de etiquetaschats: Eventos de conversaschat_labels: Alterações em etiquetas de conversassender: Atualizações de campanhas, quando inicia, e quando completa
Remover mensagens com base nos filtros:
wasSentByApi: Mensagens originadas pela API ⚠️ IMPORTANTE: Use sempre este filtro para evitar loops em automaçõeswasNotSentByApi: Mensagens não originadas pela APIfromMeYes: Mensagens enviadas pelo usuáriofromMeNo: Mensagens recebidas de terceirosisGroupYes: Mensagens em gruposisGroupNo: Mensagens em conversas individuais
💡 Prevenção de Loops: Se você tem automações que enviam mensagens via API, sempre inclua "excludeMessages": ["wasSentByApi"] no seu webhook. Caso prefira receber esses eventos, certifique-se de que sua automação detecta mensagens enviadas pela própria API para não criar loops infinitos.
Ações Suportadas:
add: Registrar novo webhookdelete: Remover webhook existente
Parâmetros de URL:
addUrlEvents(boolean): Quando ativo, adiciona o tipo do evento como path parameter na URL. Exemplo:https://api.example.com/webhook/{evento}addUrlTypesMessages(boolean): Quando ativo, adiciona o tipo da mensagem como path parameter na URL. Exemplo:https://api.example.com/webhook/{tipo_mensagem}
Combinações de Parâmetros:
- Ambos ativos:
https://api.example.com/webhook/{evento}/{tipo_mensagem}Exemplo real:https://api.example.com/webhook/message/conversation - Apenas eventos:
https://api.example.com/webhook/message - Apenas tipos:
https://api.example.com/webhook/conversation
Notas Técnicas:
- Os parâmetros são adicionados na ordem: evento → tipo mensagem
- A URL deve ser configurada para aceitar esses parâmetros dinâmicos
- Funciona com qualquer combinação de eventos/mensagens
Autenticação
[
{
"token": []
}
]
{
"token": {
"name": "token",
"type": "apiKey",
"in": "header"
}
}
Corpo da requisição
{
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID único do webhook (necessário para update/delete)",
"example": "123e4567-e89b-12d3-a456-426614174000"
},
"enabled": {
"type": "boolean",
"description": "Habilita/desabilita o webhook",
"example": true
},
"url": {
"type": "string",
"description": "URL para receber os eventos",
"example": "https://example.com/webhook"
},
"events": {
"type": "array",
"description": "Lista de eventos monitorados",
"items": {
"type": "string",
"enum": [
"connection",
"history",
"messages",
"messages_update",
"newsletter_messages",
"call",
"contacts",
"presence",
"groups",
"labels",
"chats",
"chat_labels",
"sender"
]
}
},
"excludeMessages": {
"type": "array",
"description": "Filtros para excluir tipos de mensagens",
"items": {
"type": "string",
"enum": [
"wasSentByApi",
"wasNotSentByApi",
"fromMeYes",
"fromMeNo",
"isGroupYes",
"isGroupNo"
]
}
},
"addUrlEvents": {
"type": "boolean",
"description": "Adiciona o tipo do evento como parâmetro na URL.\n- `false` (padrão): URL normal\n- `true`: Adiciona evento na URL (ex: `/webhook/message`)\n",
"default": false
},
"addUrlTypesMessages": {
"type": "boolean",
"description": "Adiciona o tipo da mensagem como parâmetro na URL.\n- `false` (padrão): URL normal \n- `true`: Adiciona tipo da mensagem (ex: `/webhook/conversation`)\n",
"default": false
},
"action": {
"type": "string",
"description": "Ação a ser executada:\n- add: criar novo webhook\n- update: atualizar webhook existente (requer id)\n- delete: remover webhook (requer apenas id)\nSe não informado, opera no modo simples (único webhook)\n",
"enum": [
"add",
"update",
"delete"
]
}
},
"required": [
"url"
]
},
"examples": {
"modo_simples": {
"summary": "Exemplo Modo Simples (Recomendado)",
"description": "Configuração básica sem complexidade",
"value": {
"enabled": true,
"url": "https://webhook.cool/example",
"events": [
"messages",
"newsletter_messages",
"connection"
],
"excludeMessages": [
"wasSentByApi"
]
}
},
"modo_avancado_criar": {
"summary": "Modo Avançado - Criar Webhook",
"description": "Criar novo webhook com ID automático",
"value": {
"action": "add",
"enabled": true,
"url": "https://api.exemplo.com/webhook",
"events": [
"messages",
"groups"
],
"excludeMessages": [
"wasSentByApi"
]
}
},
"modo_simples_com_urls": {
"summary": "Modo Simples com URLs Dinâmicas",
"description": "Alternativa ao modo avançado usando addUrlEvents",
"value": {
"enabled": true,
"url": "https://webhook.cool/api",
"events": [
"messages",
"connection",
"groups"
],
"excludeMessages": [
"wasSentByApi"
],
"addUrlEvents": true
}
}
}
}
}
}
Respostas
{
"200": {
"description": "Webhook configurado ou atualizado com sucesso",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Webhook"
}
}
}
}
},
"400": {
"description": "Requisição inválida",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Invalid action"
}
}
}
}
}
},
"401": {
"description": "Token inválido ou não fornecido",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "missing token"
}
}
}
}
}
},
"500": {
"description": "Erro interno do servidor",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"example": "Could not save webhook"
}
}
}
}
}
}
}
#/components/schemas/Webhook
{
"type": "object",
"description": "Configuração completa de webhook com filtros e opções avançadas",
"properties": {
"id": {
"type": "string",
"description": "Identificador opaco gerado pelo servidor. Não presuma formato UUID."
},
"enabled": {
"type": "boolean",
"description": "Webhook ativo/inativo",
"default": false
},
"url": {
"type": "string",
"format": "uri",
"description": "URL de destino dos eventos"
},
"events": {
"type": "array",
"items": {
"type": "string",
"enum": [
"connection",
"history",
"messages",
"messages_update",
"newsletter_messages",
"call",
"contacts",
"presence",
"groups",
"labels",
"chats",
"chat_labels",
"sender"
]
},
"description": "Tipos de eventos monitorados"
},
"addUrlTypesMessages": {
"type": "boolean",
"description": "Incluir na URLs o tipo de mensagem",
"default": false
},
"addUrlEvents": {
"type": "boolean",
"description": "Incluir na URL o nome do evento",
"default": false
},
"excludeMessages": {
"type": "array",
"items": {
"type": "string",
"enum": [
"wasSentByApi",
"wasNotSentByApi",
"fromMeYes",
"fromMeNo",
"isGroupYes",
"isGroupNo"
]
},
"description": "Filtros para excluir tipos de mensagens"
}
},
"required": [
"url",
"events"
],
"example": {
"id": "wh_9a8b7c6d5e",
"enabled": true,
"url": "https://webhook.cool/example",
"events": [
"messages",
"newsletter_messages",
"connection"
],
"addUrlTypesMessages": false,
"addUrlEvents": false,
"excludeMessages": []
}
}