# 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

```json
[
  {
    "token": []
  }
]
```

```json
{
  "token": {
    "name": "token",
    "type": "apiKey",
    "in": "header"
  }
}
```

## Corpo da requisição

```json
{
  "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

```json
{
  "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"
            }
          }
        }
      }
    }
  }
}
```

## Guias relacionados

[Autenticação](/docs/authentication) · [Erros e retries](/docs/errors-and-retries) · [Server URL](/docs/server-url)
