Guia completo de integração com WhatsApp
Sistema de gerenciamento multi-instância do WhatsApp que permite:
Quando configurados, os seguintes eventos são notificados via webhook:
{
"event": "status_change",
"instancia_id": 100,
"instancia_nome": "Minha Instância",
"status": {
"anterior": "connected",
"atual": "disconnected"
},
"timestamp": "2025-01-15T12:34:30-03:00"
}
{
"id": 123,
"mensagem_id": "ABC123",
"instancia_id": 100,
"mensagem": "Conteúdo da mensagem",
"origem": "5511999999999",
"destino": "5511888888888",
"enviado": true,
"erro": null,
"tipo_envio": "MENSAGEM_ENVIADA", // ou "MENSAGEM_RECEBIDA"
"grupo": false,
"lido": false,
"created_at": "2025-01-15T12:34:30-03:00"
}
POST /api/v1/whatsapp/instancia/criar
Cria uma nova instância do WhatsApp para uso
Parâmetro | Tipo | Obrigatório | Descrição |
---|---|---|---|
nome | string | Sim | Nome para identificar a instância (máx. 255 caracteres) |
webhook_url | string | Não | URL para receber webhooks (ativa automaticamente as notificações) |
curl -X POST "https://apifacil.dev/api/v1/whatsapp/instancia/criar" \
-H "Authorization: seu_token" \
-H "Content-Type: application/json" \
-d '{
"nome": "Minha Instância"
}'
{
"error": false,
"message": "Instância criada com sucesso",
"data": {
"instancia_id": "123",
"nome": "Minha Instância",
"status": "inactive",
"token": "abc123def456"
}
}
Código | Descrição |
---|---|
200 | Instância criada com sucesso |
403 | Limite de instâncias atingido |
422 | Erro de validação nos dados |
GET /api/v1/whatsapp/instancia/listar
Retorna todas as instâncias do usuário
curl -X GET "https://apifacil.dev/api/v1/whatsapp/instancia/listar" \
-H "Authorization: seu_token"
{
"error": false,
"data": [
{
"id": "123",
"nome": "Minha Instância",
"public_token": "abc123def456",
"status": "active",
"whatsapp_status": "connected",
"created_at": "2024-01-01T10:00:00Z"
},
{
"id": "124",
"nome": "Instância 2",
"public_token": "xyz789",
"status": "inactive",
"whatsapp_status": "disconnected",
"created_at": "2024-01-02T15:30:00Z"
}
]
}
Status | Descrição |
---|---|
active | Instância ativa e pronta para uso |
inactive | Instância criada mas não iniciada |
connected | WhatsApp conectado e operacional |
disconnected | WhatsApp desconectado |
Campo | Tipo | Descrição |
---|---|---|
id | string | Identificador único da instância |
nome | string | Nome da instância |
public_token | string | Token público para operações |
status | string | Status atual da instância |
whatsapp_status | string | Status da conexão WhatsApp |
GET /api/v1/whatsapp/instancia/{id}/status
Retorna o status detalhado de uma instância específica
Parâmetro | Tipo | Descrição |
---|---|---|
id | string | ID da instância |
curl -X GET "https://apifacil.dev/api/v1/whatsapp/instancia/123/status" \
-H "Authorization: seu_token"
{
"error": false,
"data": {
"status_banco": "connected",
"tem_qrcode": false
}
}
Estado | Descrição | Próximas Ações |
---|---|---|
connected | WhatsApp conectado | Pronto para uso |
disconnected | Desconectado | Reconectar ou gerar novo QR |
GET /api/v1/whatsapp/instancia/{id}/qrcode
Obtém o QR Code para conexão do WhatsApp
O QR Code é válido por 20 segundos. Após esse período, será necessário gerar um novo.
curl -X GET "https://apifacil.dev/api/v1/whatsapp/instancia/123/qrcode" \
-H "Authorization: seu_token"
{
"error": false,
"data": {
"qrcode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...",
"sessao_ativa": false
}
}
POST /api/v1/whatsapp/instancia/{id}/iniciar
Inicia uma instância específica do WhatsApp
curl -X POST "https://apifacil.dev/api/v1/whatsapp/instancia/123/iniciar" \
-H "Authorization: seu_token"
{
"error": false,
"message": "Sessão iniciada com sucesso"
}
POST /api/v1/whatsapp/instancia/{id}/pausar
Pausa temporariamente uma instância do WhatsApp
curl -X POST "https://apifacil.dev/api/v1/whatsapp/instancia/123/pausar" \
-H "Authorization: seu_token"
{
"error": false,
"message": "Sessão pausada com sucesso"
}
POST /api/v1/whatsapp/instancia/{id}/desconectar
Desconecta completamente uma instância do WhatsApp e limpa os dados da sessão
Esta operação é mais agressiva que pausar. Ela remove todos os dados da sessão e requer um novo QR Code para reconexão.
curl -X POST "https://apifacil.dev/api/v1/whatsapp/instancia/123/desconectar" \
-H "Authorization: seu_token"
{
"error": false,
"message": "Instância desconectada com sucesso"
}
Ação | Pausar | Desconectar |
---|---|---|
Dados da Sessão | Mantidos | Removidos |
Reconexão | Rápida | Requer novo QR Code |
Notificações | Preservadas | Removidas |
DELETE /api/v1/whatsapp/instancia/{id}
Remove permanentemente uma instância do WhatsApp
curl -X DELETE "https://apifacil.dev/api/v1/whatsapp/instancia/123" \
-H "Authorization: seu_token"
{
"error": false,
"message": "Instância deletada com sucesso"
}
POST /api/v1/whatsapp/instancia/verificar-numero
Verifica se um número está registrado no WhatsApp
Este endpoint permite verificar se um número de telefone está registrado no WhatsApp antes de tentar enviar mensagens. Se não for informada uma instância, será utilizada a primeira instância do usuário.
Parâmetro | Tipo | Obrigatório | Descrição |
---|---|---|---|
telefone | string | Sim | Número a ser verificado (formato: DDI + DDD + número) |
instancia | string | Não | ID da instância a ser utilizada. Se não informado, usa a primeira instância |
curl -X POST "https://apifacil.dev/api/v1/whatsapp/instancia/verificar-numero" \
-H "Authorization: seu_token" \
-H "Content-Type: application/json" \
-d '{
"telefone": "5511999999999",
"instancia": "123"
}'
{
"error": false,
"data": {
"exists": true,
"number": "5511999999999"
},
"message": "Verificação realizada com sucesso"
}
GET /api/v1/whatsapp/notificacoes
Lista todas as notificações do WhatsApp
Parâmetro | Tipo | Obrigatório | Descrição |
---|---|---|---|
data_inicial | string | Não | Data inicial para filtro (Y-m-d) |
data_final | string | Não | Data final para filtro (Y-m-d) |
instancia_id | integer | Não | ID da instância para filtrar |
tipo_envio | string | Não | Tipo de envio (ex: MENSAGEM_ENVIADA, MENSAGEM_RECEBIDA) |
per_page | integer | Não | Quantidade de registros por página (padrão: 15) |
curl -X GET "https://apifacil.dev/api/v1/whatsapp/notificacoes?data_inicial=2024-01-01&data_final=2024-01-31" \
-H "Authorization: seu_token"
{
"error": false,
"data": {
"current_page": 1,
"data": [
{
"id": 123,
"mensagem_id": "ABC123",
"instancia_id": 100,
"mensagem": "Conteúdo da mensagem",
"origem": "5511999999999",
"destino": "5511888888888",
"enviado": true,
"erro": null,
"tipo_envio": "MENSAGEM_ENVIADA",
"grupo": false,
"lido": false,
"created_at": "2024-01-15T12:34:30Z",
"updated_at": "2024-01-15T12:34:30Z"
}
],
"first_page_url": "http://api.exemplo.com/api/v1/whatsapp/notificacoes?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://api.exemplo.com/api/v1/whatsapp/notificacoes?page=1",
"next_page_url": null,
"path": "http://api.exemplo.com/api/v1/whatsapp/notificacoes",
"per_page": 15,
"prev_page_url": null,
"to": 1,
"total": 1
}
}
GET /api/v1/whatsapp/notificacoes/{id}
Retorna os detalhes de uma notificação específica
curl -X GET "https://apifacil.dev/api/v1/whatsapp/notificacoes/123" \
-H "Authorization: seu_token"
{
"error": false,
"data": {
"id": 123,
"mensagem_id": "ABC123",
"instancia_id": 100,
"mensagem": "Conteúdo da mensagem",
"origem": "5511999999999",
"destino": "5511888888888",
"enviado": true,
"erro": null,
"tipo_envio": "MENSAGEM_ENVIADA",
"grupo": false,
"lido": false,
"created_at": "2024-01-15T12:34:30Z",
"updated_at": "2024-01-15T12:34:30Z"
}
}
Tipo | Descrição |
---|---|
MENSAGEM_ENVIADA | Mensagem enviada com sucesso |
MENSAGEM_RECEBIDA | Mensagem recebida de um contato |
ERRO_PROCESSAMENTO | Erro durante o processamento da mensagem |
MENSAGEM_GRUPO_RECEBIDO | Mensagem recebida em um grupo |
AUDIO_RECEBIDO | Áudio recebido |
IMAGEM_RECEBIDA | Imagem recebida |
VIDEO_RECEBIDO | Vídeo recebido |
DOCUMENTO_RECEBIDO | Documento recebido |
Para utilizar a API de WhatsApp, é necessário:
O envio de mensagens só funcionará após a configuração completa de uma instância e a sincronização bem-sucedida com seu WhatsApp.
POST /api/v1/whatsapp/enviar-mensagem
Envia uma mensagem de texto via WhatsApp
Parâmetro | Tipo | Descrição |
---|---|---|
telefone | string | Número do WhatsApp com DDD |
mensagem | string | Texto da mensagem |
instancia | string | ID da instância do WhatsApp (opcional) |
O número de telefone deve incluir o código do país. Exemplos:
{
"telefone": "5511999999999", // Inclui código do país (55) + DDD (11) + número
"mensagem": "Olá! Esta é uma mensagem de teste.",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/enviar-mensagem" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"telefone": "5511999999999",
"mensagem": "Olá! Esta é uma mensagem de teste.",
"instancia": "12345"
}'
{
"error": false,
"data": {
"queue": "mensagem_em_fila",
"message": "Mensagem em fila para envio"
}
}
O link fornecido no campo "url" deve estar presente no texto da mensagem para que o preview funcione corretamente.
POST /api/v1/whatsapp/enviar-preview
Envie mensagens com preview personalizado de links
Envie mensagens de texto com preview personalizado de links para seus contatos no WhatsApp.
POST /api/v1/whatsapp/enviar-preview
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
telefone | string | Número do WhatsApp (com DDD) | Sim |
mensagem | string | Texto da mensagem | Sim |
url | string | URL para gerar o preview | Sim |
titulo | string | Título personalizado para o preview | Não |
descricao | string | Descrição personalizada para o preview | Não |
imagem_url | string | URL da imagem para o preview | Não |
instancia | string | ID da instância do WhatsApp | Não |
tipo_imagem | string | Tamanho do preview da imagem (small, medium ou large) | Não |
{ "telefone": "5511999999999", "mensagem": "Confira este link interessante! https://exemplo.com", "url": "https://exemplo.com", "titulo": "Título Personalizado", "descricao": "Descrição personalizada do link", "imagem_url": "https://exemplo.com/imagem.jpg", "tipo_imagem": "medium" }
curl -X POST https://apifacil.com/api/v1/whatsapp/enviar-preview \ -H 'Content-Type: application/json' \ -H 'Authorization: sua_chave_de_api' \ -d '{ "telefone": "5511999999999", "mensagem": "Confira este link interessante! https://exemplo.com", "url": "https://exemplo.com", "titulo": "Título Personalizado", "descricao": "Descrição personalizada do link", "imagem_url": "https://exemplo.com/imagem.jpg", "tipo_imagem": "medium" }'
{ "error": false, "data": { "queue": true, "message": "Mensagem em fila para envio" } }
Dica: Se não forem fornecidos título, descrição ou imagem, o sistema tentará extraí-los automaticamente da URL fornecida.
POST /api/v1/whatsapp/enviar-foto
Envia uma imagem via WhatsApp
Parâmetro | Tipo | Descrição |
---|---|---|
telefone | string | Número do WhatsApp com DDD |
link | string | URL da imagem |
nome | string | Nome da imagem |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"telefone": "5551999999999",
"link": "https://example.com/imagem.jpg",
"nome": "imagem.jpg",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/enviar-foto" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"telefone": "5551999999999",
"link": "https://example.com/imagem.jpg",
"nome": "imagem.jpg",
"instancia": "12345"
}'
POST /api/v1/whatsapp/enviar-foto-64
Envie imagens codificadas em Base64 para seus contatos no WhatsApp
Este endpoint permite enviar fotos em formato Base64 diretamente para seus contatos no WhatsApp, sem a necessidade de hospedar a imagem em um servidor externo.
POST /api/v1/whatsapp/enviar-foto-64
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
telefone | string | Número do WhatsApp (com DDD) | Sim |
foto_base64 | string | Imagem em formato Base64 | Sim |
nome | string | Nome ou legenda da foto | Sim |
instancia | string | ID da instância do WhatsApp | Não |
{ "telefone": "5511999999999", "foto_base64": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG...", "nome": "Imagem de produto", "instancia": "abcd1234" }
curl -X POST https://apifacil.com/api/v1/whatsapp/enviar-foto-64 \ -H 'Content-Type: application/json' \ -H 'Authorization: sua_chave_de_api' \ -d '{ "telefone": "5511999999999", "foto_base64": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG...", "nome": "Imagem de produto", "instancia": "abcd1234" }'
{ "error": false, "data": { "queue": true, "message": "Foto em fila para envio" } }
Dica: A imagem deve estar codificada em Base64 sem o prefixo "data:image/jpeg;base64,". Os formatos mais compatíveis com WhatsApp são JPG e PNG.
POST /api/v1/whatsapp/enviar-arquivo
Envia um arquivo via WhatsApp
Parâmetro | Tipo | Descrição |
---|---|---|
telefone | string | Número do WhatsApp com DDD |
link | string | URL do arquivo |
nome | string | Nome do arquivo |
mensagem | string | Texto opcional para o arquivo |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"telefone": "5551999999999",
"link": "https://example.com/documento.pdf",
"nome": "documento.pdf",
"mensagem": "Confira o documento.",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/enviar-arquivo" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"telefone": "5551999999999",
"link": "https://example.com/documento.pdf",
"nome": "documento.pdf",
"mensagem": "Confira o documento.",
"instancia": "12345"
}'
Endpoint para enviar arquivos codificados em base64 através do WhatsApp. Este método é útil quando você já tem o arquivo em formato base64 e não quer fazer upload para um servidor externo.
Parâmetro | Tipo | Descrição |
---|---|---|
arquivo_base64 | string | Arquivo codificado em base64 (sem o prefixo data:...) |
tipo_arquivo | string | Extensão do arquivo (pdf, doc, xlsx, etc) |
nome | string | Nome do arquivo que aparecerá no WhatsApp |
telefone | string | Número do telefone no formato DDDNúmero |
mensagem | string | Mensagem opcional que acompanha o arquivo |
instancia | string | ID da instância (opcional) |
{
"arquivo_base64": "JVBERi0xLjcKCjEgMCBvYmogICUgZW50...",
"tipo_arquivo": "pdf",
"nome": "documento.pdf",
"telefone": "11999999999",
"mensagem": "Segue o documento solicitado",
"instancia": "123"
}
curl --location 'https://apifacil.dev/api/v1/whatsapp/enviar-arquivo-64' \
--header 'Authorization: seu_token_aqui' \
--header 'Content-Type: application/json' \
--data '{
"arquivo_base64": "JVBERi0xLjcKCjEgMCBvYmogICUgZW50...",
"tipo_arquivo": "pdf",
"nome": "documento.pdf",
"telefone": "11999999999",
"mensagem": "Segue o documento solicitado",
"instancia": "123"
}'
{
"error": false,
"data": {
"queue": "msg_123456",
"message": "Arquivo em fila para envio"
}
}
O tipo do arquivo informado deve corresponder ao conteúdo real do arquivo base64. A API valida o MIME type do arquivo para garantir a segurança.
POST /api/v1/whatsapp/enviar-audio
Envia uma mensagem de voz via WhatsApp
Parâmetro | Tipo | Descrição |
---|---|---|
telefone | string | Número do WhatsApp com DDD |
audio_url | string | URL do arquivo de áudio (MP3/MP4) |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"telefone": "5511999999999",
"audio_url": "https://example.com/audio.mp3",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/enviar-audio" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"telefone": "5511999999999",
"audio_url": "https://example.com/audio.mp3",
"instancia": "12345"
}'
POST /api/v1/whatsapp/enviar-audio-64
Envie arquivos de áudio codificados em Base64 para seus contatos no WhatsApp
Este endpoint permite enviar áudios em formato Base64 diretamente para seus contatos no WhatsApp, sem a necessidade de hospedar o arquivo em um servidor externo.
POST /api/v1/whatsapp/enviar-audio-64
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
telefone | string | Número do WhatsApp (com DDD) | Sim |
audio_base64 | string | Arquivo de áudio em formato Base64 | Sim |
instancia | string | ID da instância do WhatsApp | Não |
{ "telefone": "5511999999999", "audio_base64": "UklGRiSAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YTAAAAA...", "instancia": "abcd1234" }
curl -X POST https://apifacil.com/api/v1/whatsapp/enviar-audio-64 \ -H 'Content-Type: application/json' \ -H 'Authorization: sua_chave_de_api' \ -d '{ "telefone": "5511999999999", "audio_base64": "UklGRiSAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YTAAAAA...", "instancia": "abcd1234" }'
{ "error": false, "data": { "queue": true, "message": "Áudio em fila para envio" } }
Dica: O áudio deve estar codificado em Base64. Para áudios enviados via WhatsApp, recomenda-se o formato OGG, que tem melhor compatibilidade.
Envie uma mensagem com lista de opções interativa para um número do WhatsApp.
POST /api/v1/whatsapp/enviar-lista
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
telefone | string | Número do WhatsApp com código do país | Sim |
text | string | Texto principal da mensagem | Não |
footer | string | Texto do rodapé da mensagem | Não |
buttonText | string | Texto do botão que abre a lista | Não |
sections | array | Array de seções com opções | Sim |
instancia | string | ID da instância do WhatsApp | Não |
{
"telefone": "5511999999999",
"text": "Escolha uma opção do menu",
"footer": "Selecione abaixo",
"buttonText": "Ver Menu",
"sections": [
{
"title": "Menu Principal",
"rows": [
{
"title": "Opção 1",
"description": "Descrição da opção 1"
},
{
"title": "Opção 2",
"description": "Descrição da opção 2"
}
]
},
{
"title": "Outras Opções",
"rows": [
{
"title": "Opção 3",
"description": "Descrição da opção 3"
}
]
}
],
"instancia": "123"
}
curl -X POST \
'https://apifacil.dev/api/v1/whatsapp/enviar-lista' \
-H 'Authorization: seu_token' \
-H 'Content-Type: application/json' \
-d '{
"telefone": "5511999999999",
"text": "Escolha uma opção do menu",
"footer": "Selecione abaixo",
"buttonText": "Ver Menu",
"sections": [
{
"title": "Menu Principal",
"rows": [
{
"title": "Opção 1",
"description": "Descrição da opção 1"
},
{
"title": "Opção 2",
"description": "Descrição da opção 2"
}
]
},
{
"title": "Outras Opções",
"rows": [
{
"title": "Opção 3",
"description": "Descrição da opção 3"
}
]
}
],
"instancia": "123"
}'
{
"error": false,
"data": {
"queue": "true",
"message": "Lista em fila para envio"
}
}
GET /whatsapp/grupos
Lista todos os grupos que a instância participa
Parâmetro | Tipo | Descrição |
---|---|---|
instancia | string | ID da instância do WhatsApp (opcional) |
curl -X GET "https://apifacil.dev/api/v1/whatsapp/grupos?instancia=12345" \
-H "Authorization: seu_token_aqui"
{
"error": false,
"data": [
{
"id": "123456789-group@g.us",
"name": "Nome do Grupo",
"participants": 50,
"isAdmin": true
}
]
}
POST /whatsapp/grupo/enviar-mensagem
Envia uma mensagem para um grupo específico
Parâmetro | Tipo | Descrição |
---|---|---|
grupo_id | string | ID do grupo (obtido via listagem) |
mensagem | string | Texto da mensagem |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"grupo_id": "123456789-group@g.us",
"mensagem": "Olá grupo!",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/grupo/enviar-mensagem" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"grupo_id": "123456789-group@g.us",
"mensagem": "Olá grupo!",
"instancia": "12345"
}'
POST /whatsapp/grupo/enviar-arquivo
Envia um arquivo para um grupo específico
Parâmetro | Tipo | Descrição |
---|---|---|
grupo_id | string | ID do grupo (obtido via listagem) |
link | string | URL do arquivo |
nome | string | Nome do arquivo |
mensagem | string | Texto opcional para o arquivo |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"grupo_id": "123456789-group@g.us",
"link": "https://example.com/documento.pdf",
"nome": "documento.pdf",
"mensagem": "Confira o documento.",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/grupo/enviar-arquivo" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"grupo_id": "123456789-group@g.us",
"link": "https://example.com/documento.pdf",
"nome": "documento.pdf",
"mensagem": "Confira o documento.",
"instancia": "12345"
}'
POST /whatsapp/grupo/enviar-preview
Envia uma mensagem com preview de link para um grupo específico
Parâmetro | Tipo | Descrição |
---|---|---|
grupo_id | string | ID do grupo (obtido via listagem) |
mensagem | string | Texto da mensagem |
url | string | URL que será exibida no preview |
titulo | string | Título do preview (opcional) |
descricao | string | Descrição do preview (opcional) |
imagem_url | string | URL da imagem do preview (opcional) |
tipo_imagem | string | Tamanho da imagem (small, medium, large) - padrão: medium |
instancia | string | ID da instância do WhatsApp (opcional) |
{
"grupo_id": "123456789-group@g.us",
"mensagem": "Confira este link interessante!",
"url": "https://exemplo.com",
"titulo": "Título do Link",
"descricao": "Descrição do conteúdo",
"imagem_url": "https://exemplo.com/imagem.jpg",
"tipo_imagem": "medium",
"instancia": "12345"
}
curl -X POST "https://apifacil.dev/api/v1/whatsapp/grupo/enviar-preview" \
-H "Authorization: seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"grupo_id": "123456789-group@g.us",
"mensagem": "Confira este link interessante!",
"url": "https://exemplo.com",
"titulo": "Título do Link",
"descricao": "Descrição do conteúdo",
"imagem_url": "https://exemplo.com/imagem.jpg",
"tipo_imagem": "medium",
"instancia": "12345"
}'
Sistema de automação de conversas no WhatsApp com suporte a fluxos complexos, timeout de conversas e bloqueio de interações.
{
"name": string, // Nome do fluxo
"instancia_id": number, // ID da instância WhatsApp
"type": string, // Tipo do template: "default" ou "ia"
"assistant_prompt": string, // Prompt para templates do tipo "ia"
"template": {
"questions": [
{
"id": number,
"text": string, // Texto da pergunta
"timeout": number, // Tempo limite em segundos (padrão: 300)
"expirationMessage": string, // Mensagem quando timeout expirar
"responses": [
{
"matches": string[], // Palavras que ativam esta resposta
// Use "*" para aceitar qualquer resposta
"action": {
"type": "text" | "api" | "nextQuestion" | "executeTemplate",
// Configurações de bloqueio (opcional)
"blockChat": boolean, // Bloqueia novas interações
"blockTimeout": number, // Duração do bloqueio em segundos
"unblockKeywords": string[], // Palavras para desbloquear
"unblockMessage": string, // Mensagem ao desbloquear
// Para type: "text"
"message": string, // Mensagem a enviar
"storeAs": string, // Nome para salvar resposta
// Para type: "nextQuestion"
"nextQuestionId": number, // ID da próxima pergunta
// Para type: "api"
"url": string, // URL da API
"method": string, // Método HTTP
"headers": object, // Headers adicionais
"body": object, // Corpo da requisição
"responsePath": string, // Caminho para mensagem na resposta
"nextMessage": string, // Mensagem após chamada API
// Para type: "executeTemplate"
"templateId": number // ID do template a executar
}
}
]
}
]
},
"triggers": string[], // Palavras que iniciam o fluxo
"active": boolean // Status do template
}
Abaixo está um exemplo de um menu interativo completo com múltiplos níveis e funcionalidades:
{
"name": "Menu Completo",
"instancia_id": 1,
"template": {
"expirationMessage": "Sua sessão expirou por inatividade. Por favor, inicie a conversa novamente.",
"questions": [
{
"id": 0,
"text": "👋 Olá! Como posso ajudar?\n\n1 - FAQ/Dúvidas Frequentes\n2 - Falar com Suporte\n3 - Horários de Funcionamento\n4 - Nossos Endereços\n5 - Fazer um Pedido",
"timeout": 300,
"responses": [
{
"matches": ["1", "faq", "duvidas", "dúvidas"],
"action": {
"type": "nextQuestion",
"nextQuestionId": 1
}
},
{
"matches": ["3", "horario", "horário", "funcionamento"],
"action": {
"type": "text",
"message": "📅 Nossos horários:\n\n▫️ Segunda a Sexta: 09h às 18h\n▫️ Sábado: 09h às 13h\n▫️ Domingo e Feriados: Fechado"
}
}
]
}
]
},
"triggers": ["oi", "olá", "ola", "menu", "início", "inicio"]
}
{
"matches": ["3", "atendente", "humano"],
"action": {
"type": "text",
"message": "👩💼 Transferindo para um atendente...",
"blockChat": true,
"blockTimeout": 3600,
"unblockKeywords": ["cancelar", "sair"],
"unblockMessage": "Atendimento cancelado. Digite 'menu' para voltar."
}
}
{
"matches": ["*"],
"action": {
"type": "api",
"url": "https://api.exemplo.com/pedidos",
"method": "POST",
"storeAs": "endereco",
"body": {
"produto": "{produto}",
"endereco": "{current}",
"telefone": "{phone}"
},
"nextMessage": "✅ Pedido realizado com sucesso!\nNúmero do pedido: #{numero_pedido}"
}
}
Use estas variáveis em mensagens e chamadas API:
Variável | Descrição |
---|---|
{current} | Resposta atual do usuário |
{phone} | Número do usuário (sem @s.whatsapp.net) |
{storedVariables.NOME} | Variáveis salvas com storeAs |
Dados automáticos incluídos em chamadas API:
{
"whatsapp": {
"numero": string, // Número do usuário
"nome_contato": string // Nome do contato
},
"conversa": {
"timestamp": string, // Data/hora atual
"instancia_id": string // ID da instância
},
"metadata": {
"plataforma": "WhatsApp",
"versao_bot": "1.0",
"origem": "bot_whatsapp"
}
}
Header | Valor | Obrigatório |
---|---|---|
Authorization | {seu-token} | Sim |
curl -X GET "https://api.apifacil.com/v1/bot/templates" \
-H "Authorization: {seu-token}"
{
"error": false,
"data": [
{
"id": 1,
"instancia_id": 1,
"name": "Atendimento",
"template": {
"questions": [
{
"id": 0,
"text": "Como posso ajudar?",
"responses": [...]
}
]
},
"triggers": ["atendimento", "suporte"],
"active": true,
"created_at": "2024-01-01T00:00:00.000000Z",
"updated_at": "2024-01-01T00:00:00.000000Z"
}
]
}
Header | Valor | Obrigatório |
---|---|---|
Authorization | {seu-token} | Sim |
Content-Type | application/json | Sim |
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
name | string | Nome do template (max: 255) | Sim |
type | string | Tipo do template ("default" ou "ia") | Sim |
template | object | Configuração do template (obrigatório se type="default") | Condicional |
assistant_prompt | string | Prompt para IA (obrigatório se type="ia") | Condicional |
triggers | array | Palavras-chave que ativam o template | Sim |
instancia_id | integer | ID da instância do WhatsApp | Sim |
{
"questions": [
{
"id": number, // ID único da questão
"text": string, // Texto da pergunta
"timeout": number, // Tempo limite em segundos (opcional)
"responses": [
{
"matches": string[], // Palavras/números que ativam esta resposta
"action": {
"type": string, // "text", "api", "nextQuestion" ou "executeTemplate"
"message": string, // Para type "text"
"url": string, // Para type "api"
"method": string, // Para type "api"
"nextId": number, // Para type "nextQuestion"
"templateId": number // Para type "executeTemplate"
}
}
]
}
]
}
{
"name": string, // Nome do fluxo do bot (ex: "Menu Completo")
"instancia_id": number, // ID da instância do WhatsApp
"template": {
"questions": [ // Array de perguntas/etapas do fluxo
{
"id": number, // Identificador único da pergunta
"text": string, // Texto que será enviado ao usuário
"timeout": number, // (Opcional) Tempo limite em segundos
"responses": [ // Array de possíveis respostas
{
"matches": string[], // Array de palavras/frases que ativam esta resposta
// Use "*" para aceitar qualquer resposta
"action": { // Ação a ser executada quando houver match
"type": string, // Tipo da ação:
// - "text": Envia uma mensagem
// - "nextQuestion": Vai para próxima pergunta
// - "api": Faz uma chamada API
// - "executeTemplate": Executa outro template
// Campos específicos por tipo de ação:
"message": string, // Para type "text": mensagem a ser enviada
"nextQuestionId": number, // Para type "nextQuestion": ID da próxima pergunta
"blockChat": boolean, // (Opcional) Bloqueia novas interações
"blockTimeout": number, // (Opcional) Tempo do bloqueio em segundos
"blockMessage": string, // (Opcional) Mensagem durante bloqueio
"expireMessage": string, // (Opcional) Mensagem ao expirar bloqueio
"storeAs": string, // (Opcional) Salva resposta com este nome
"url": string, // Para type "api": URL da API
"method": string, // Para type "api": Método HTTP
"headers": object, // Para type "api": Headers da requisição
"body": object, // Para type "api": Corpo da requisição
"nextMessage": string // Para type "api": Mensagem após chamada
}
}
]
}
]
},
"triggers": string[], // Palavras-chave que iniciam o fluxo
"active": boolean // Status de ativação do template
}
Variável | Descrição |
---|---|
{current} | Resposta atual do usuário |
{phone} | Número do telefone do usuário |
{variavel_salva} | Qualquer variável salva com storeAs |
curl -X POST "https://api.apifacil.com/v1/bot/template" \
-H "Authorization: {seu-token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Atendimento",
"type": "default",
"instancia_id": 1,
"template": {
"questions": [
{
"id": 0,
"text": "Como posso ajudar?\n1 - Suporte\n2 - Vendas",
"timeout": 300,
"responses": [
{
"matches": ["1", "suporte"],
"action": {
"type": "text",
"message": "Você será atendido em breve"
}
}
]
}
]
},
"triggers": ["atendimento", "suporte", "ajuda"]
}'
curl -X POST "https://api.apifacil.com/v1/bot/template" \
-H "Authorization: {seu-token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Atendimento IA",
"type": "IA",
"instancia_id": 1,
"assistant_prompt": "Você é um assistente de atendimento que deve responder de forma cordial e profissional...",
"triggers": ["atendimento", "suporte"]
}'
curl -X POST "https://api.apifacil.com/v1/bot/template" \
-H "Authorization: {seu-token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Atendimento",
"instancia_id": 1,
"template": {
"questions": [
{
"id": 0,
"text": "Como posso ajudar?\n1 - Suporte\n2 - Vendas",
"timeout": 300,
"responses": [
{
"matches": ["1", "suporte"],
"action": {
"type": "text",
"message": "Você será atendido em breve"
}
},
{
"matches": ["2", "vendas"],
"action": {
"type": "nextQuestion",
"nextId": 1
}
}
]
},
{
"id": 1,
"text": "Qual produto você tem interesse?",
"responses": [
{
"matches": ["*"],
"action": {
"type": "api",
"url": "https://sua-api.com/vendas",
"method": "POST"
}
}
]
}
]
},
"triggers": ["atendimento", "suporte", "ajuda"]
}'
{
"error": false,
"data": {
"id": 1,
"name": "Atendimento",
"instancia_id": 1,
"template": {...},
"triggers": ["atendimento", "suporte", "ajuda"],
"active": true,
"created_at": "2024-01-01T00:00:00.000000Z",
"updated_at": "2024-01-01T00:00:00.000000Z"
}
}
Header | Valor | Obrigatório |
---|---|---|
Authorization | {seu-token} | Sim |
Content-Type | application/json | Sim |
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
name | string | Nome do template | Não |
template | object | Configuração do template | Não |
triggers | array | Palavras-chave | Não |
active | boolean | Status do template | Não |
curl -X PUT "https://api.apifacil.com/v1/bot/template/1" \
-H "Authorization: {seu-token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Atendimento Atualizado",
"active": true,
"triggers": ["atendimento", "suporte"]
}'
Header | Valor | Obrigatório |
---|---|---|
Authorization | {seu-token} | Sim |
Content-Type | application/json | Sim |
Parâmetro | Tipo | Descrição | Obrigatório |
---|---|---|---|
phone | string | Número com DDI e DDD (ex: 5511999999999) | Sim |
instancia_id | integer | ID da instância do WhatsApp | Sim |
curl -X POST "https://api.apifacil.com/v1/bot/template/1/execute" \
-H "Authorization: {seu-token}" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"instancia_id": 1
}'
Header | Valor | Obrigatório |
---|---|---|
Authorization | {seu-token} | Sim |
curl -X DELETE "https://api.apifacil.com/v1/bot/template/1" \
-H "Authorization: {seu-token}"