Criar nova campanha (Simples)
POST /sender/simple
Cria uma campanha para enviar a mesma mensagem a vários destinatários com intervalo controlado. Acompanhe a execução em GET /sender/stats.
Status de grupo: com groupStatus: true, a campanha publica a mensagem no status de cada grupo da lista, como o POST /send/status com group, em vez de mandar no chat. Todos os numbers precisam ser grupos (@g.us): se houver algum que não é, a campanha não é criada e o 400 lista quais são. Só text, image e video; em texto, background_color e font escolhem a cor e a fonte. Áudio e outros tipos retornam 400. Agendamento, pausa, cancelamento, GET /sender/listmessages e GET /sender/stats funcionam como numa campanha comum. Cada status fica registrado na conversa do grupo com messageType: "GroupStatusMessage" (no celular ele não aparece na conversa, só no status): não dá para reagir, editar, fixar nem responder a ele.
Autenticação
[
{
"token": []
}
]
{
"token": {
"name": "token",
"type": "apiKey",
"in": "header"
}
}
Corpo da requisição
{
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"numbers",
"type",
"delayMin",
"delayMax",
"scheduled_for"
],
"properties": {
"numbers": {
"type": "array",
"description": "Lista de números para envio",
"items": {
"type": "string"
},
"example": [
"5511999999999@s.whatsapp.net"
]
},
"type": {
"type": "string",
"description": "Tipo da mensagem",
"enum": [
"text",
"image",
"video",
"videoplay",
"audio",
"document",
"contact",
"location",
"list",
"button",
"poll",
"carousel"
]
},
"folder": {
"type": "string",
"description": "Nome da campanha de envio",
"example": "Campanha Janeiro"
},
"delayMin": {
"type": "integer",
"description": "Delay mínimo entre mensagens em segundos",
"minimum": 1,
"example": 10
},
"delayMax": {
"type": "integer",
"description": "Delay máximo entre mensagens em segundos",
"minimum": 1,
"example": 30
},
"scheduled_for": {
"type": "integer",
"description": "Timestamp em milissegundos ou minutos a partir de agora para agendamento",
"example": 1706198400000
},
"info": {
"type": "string",
"description": "Informações adicionais sobre a campanha"
},
"delay": {
"type": "integer",
"description": "Delay fixo entre mensagens (opcional)"
},
"mentions": {
"type": "string",
"description": "Menções na mensagem em formato JSON"
},
"text": {
"type": "string",
"description": "Texto da mensagem"
},
"linkPreview": {
"type": "boolean",
"description": "Habilitar preview de links em mensagens de texto. O preview será gerado automaticamente a partir da URL contida no texto."
},
"linkPreviewTitle": {
"type": "string",
"description": "Título personalizado para o preview do link (opcional). Vazio usa o título do link; só com espaço (`\" \"`), o preview sai sem título."
},
"linkPreviewDescription": {
"type": "string",
"description": "Descrição personalizada para o preview do link (opcional). Vazia usa a descrição do link; só com espaço (`\" \"`), o preview sai sem descrição."
},
"linkPreviewImage": {
"type": "string",
"description": "URL ou dados base64 da imagem para o preview do link (opcional)"
},
"linkPreviewLarge": {
"type": "boolean",
"description": "Se deve usar preview grande ou pequeno (opcional, padrão false)"
},
"file": {
"type": "string",
"description": "URL da mídia ou arquivo (quando type é image, video, audio, document, etc.). Com type button, a mídia do cabeçalho (imagem, vídeo ou documento)."
},
"docName": {
"type": "string",
"description": "Nome do arquivo (quando type é document, ou do documento no botão)"
},
"fullName": {
"type": "string",
"description": "Nome completo (quando type é contact)"
},
"phoneNumber": {
"type": "string",
"description": "Número do telefone (quando type é contact)"
},
"organization": {
"type": "string",
"description": "Organização (quando type é contact)"
},
"email": {
"type": "string",
"description": "Email (quando type é contact)"
},
"url": {
"type": "string",
"description": "URL (quando type é contact)"
},
"latitude": {
"type": "number",
"description": "Latitude (quando type é location)"
},
"longitude": {
"type": "number",
"description": "Longitude (quando type é location)"
},
"name": {
"type": "string",
"description": "Nome do local (quando type é location)"
},
"address": {
"type": "string",
"description": "Endereço (quando type é location)"
},
"footerText": {
"type": "string",
"description": "Texto do rodapé (quando type é list, button, poll ou carousel)"
},
"buttonText": {
"type": "string",
"description": "Texto do botão (quando type é list, button, poll ou carousel)"
},
"listButton": {
"type": "string",
"description": "Texto do botão da lista (quando type é list)"
},
"selectableCount": {
"type": "integer",
"description": "Quantidade de opções selecionáveis (quando type é poll)"
},
"choices": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lista de opções (quando type é list, button, poll ou carousel). Para carousel, use formato específico com [texto], {imagem} e botões"
},
"groupStatus": {
"type": "boolean",
"description": "Publica a mensagem no status do grupo em vez de mandar no chat. Só para grupos (`@g.us`) e só `text`, `image` ou `video`.",
"example": false
},
"background_color": {
"type": "integer",
"minimum": 1,
"maximum": 19,
"description": "Índice da cor de fundo do status em texto (com `groupStatus`).",
"example": 7
},
"font": {
"type": "integer",
"enum": [
0,
1,
2,
6,
7,
8,
9,
10
],
"description": "Fonte do status em texto (com `groupStatus`).",
"example": 1
}
}
}
}
}
}
Respostas
{
"200": {
"description": "campanha criada com sucesso",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"folder_id": {
"type": "string",
"description": "ID único da campanha criada"
},
"count": {
"type": "integer",
"description": "Quantidade de mensagens agendadas"
},
"status": {
"type": "string",
"description": "Status da operação",
"example": "queued"
}
}
}
}
}
},
"400": {
"description": "Erro nos parâmetros da requisição",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
}
}
}
},
"401": {
"description": "Erro de autenticação",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
}
}
}
},
"409": {
"description": "Conflito - campanha já existe",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
}
}
}
},
"500": {
"description": "Erro interno do servidor",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
}
}
}
}
}