Criar envio em massa avançado
POST /sender/advanced
Cria um novo envio em massa com configurações avançadas, permitindo definir múltiplos destinatários e mensagens com delays personalizados.
Status de grupo: com groupStatus: true numa mensagem, ela é publicada no status do grupo (number com @g.us), como o POST /send/status com group, em vez de ir para o chat. As outras mensagens do envio seguem normais. Só text, image e video; em texto, background_color e font escolhem a cor e a fonte. Se alguma mensagem com groupStatus não for para um grupo ou tiver outro tipo, o envio não é criado e o 400 diz qual (messages[índice]). 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",
"properties": {
"delayMin": {
"type": "integer",
"description": "Delay mínimo entre mensagens (segundos)",
"minimum": 0,
"example": 3
},
"delayMax": {
"type": "integer",
"description": "Delay máximo entre mensagens (segundos)",
"minimum": 0,
"example": 6
},
"info": {
"type": "string",
"description": "Descrição ou informação sobre o envio em massa",
"example": "Campanha de lançamento"
},
"scheduled_for": {
"type": "integer",
"description": "Timestamp em milissegundos (date unix) ou minutos a partir de agora para agendamento",
"example": 1
},
"messages": {
"type": "array",
"description": "Lista de mensagens a serem enviadas",
"items": {
"type": "object",
"required": [
"number",
"type"
],
"properties": {
"number": {
"type": "string",
"description": "ID do chat ou número do destinatário.",
"example": "5511999999999"
},
"type": {
"type": "string",
"enum": [
"text",
"image",
"document",
"audio",
"ptt",
"myaudio",
"sticker",
"video",
"videoplay",
"contact",
"location",
"poll",
"list",
"button",
"carousel"
],
"description": "Tipo da mensagem:\n- text: Mensagem de texto\n- image: Imagem\n- document: Documento/arquivo\n- audio: Áudio\n- ptt: Mensagem de voz\n- myaudio: Áudio (opção alternativa)\n- sticker: Figurinha\n- video: Vídeo\n- videoplay: Vídeo com autoplay/loop no WhatsApp\n- contact: Contato\n- location: Localização\n- poll: Enquete\n- list: Lista de opções\n- button: Botões interativos\n- carousel: Carrossel de cartões com imagens e botões\n"
},
"text": {
"type": "string",
"description": "Texto da mensagem (quando type é \"text\") ou legenda para mídia"
},
"file": {
"type": "string",
"description": "URL da mídia (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)"
},
"linkPreview": {
"type": "boolean",
"description": "Se deve gerar preview de links (quando type é text). 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)"
},
"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 esta 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
}
}
}
}
},
"required": [
"messages"
],
"example": {
"delayMin": 3,
"delayMax": 6,
"info": "teste avançado",
"scheduled_for": 1,
"messages": [
{
"number": "5511999999999",
"type": "text",
"text": "First message"
},
{
"number": "5511999999999",
"type": "button",
"text": "Promoção Especial!\nConfira nossas ofertas incríveis",
"footerText": "Válido até 31/12/2024",
"file": "https://exemplo.com/banner-promocao.jpg",
"choices": [
"Ver Ofertas|https://loja.exemplo.com/ofertas",
"Falar com Vendedor|reply:vendedor",
"Copiar Cupom|copy:PROMO2024"
]
},
{
"number": "5511999999999",
"type": "list",
"text": "Escolha sua categoria preferida:",
"listButton": "Ver Categorias",
"choices": [
"[Eletrônicos]",
"Smartphones|eletronicos_smartphones",
"Notebooks|eletronicos_notebooks",
"[Roupas]",
"Camisetas|roupas_camisetas",
"Sapatos|roupas_sapatos"
]
},
{
"number": "5511999999999",
"type": "document",
"file": "https://example.com/doc.pdf",
"docName": "Documento.pdf"
},
{
"number": "5511999999999",
"type": "carousel",
"text": "Conheça nossos produtos",
"choices": [
"[Smartphone XYZ\nO mais avançado smartphone da linha]",
"{https://exemplo.com/produto1.jpg}",
"Copiar Código|copy:PROD123",
"Ver no Site|https://exemplo.com/xyz",
"[Notebook ABC\nO notebook ideal para profissionais]",
"{https://exemplo.com/produto2.jpg}",
"Copiar Código|copy:NOTE456",
"Comprar Online|https://exemplo.com/abc"
]
}
]
}
}
}
}
}
Respostas
{
"200": {
"description": "Mensagens adicionadas à fila com sucesso",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"folder_id": {
"type": "string",
"description": "ID da pasta/lote criado"
},
"count": {
"type": "integer",
"description": "Total de mensagens adicionadas à fila"
},
"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",
"description": "Descrição do erro",
"example": "Formato de número inválido"
}
}
}
}
}
},
"401": {
"description": "Não autorizado - token inválido ou ausente",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Mensagem de erro",
"example": "Token inválido ou ausente"
}
}
}
}
}
},
"500": {
"description": "Erro interno do servidor",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Detalhes do erro interno"
}
}
}
}
}
}
}