escopo: messages:send
Envia uma mensagem de texto via WhatsApp (UAZAPI ou Meta Cloud). O campo `to` aceita um telefone ou o código de um grupo ou comunidade do WhatsApp (`<id>@g.us`).
- Envio para grupo: use em `to` o código do grupo, por exemplo `{ "to": "120363322649858630@g.us", "message": "Bom dia, pessoal!" }`. O código aparece em `external_chat_id` de GET /api/v1/contacts?is_group=true. A resposta traz também `group_jid` com o grupo que recebeu a mensagem.
- Envio para comunidade: use em `to` o código da comunidade, por exemplo `{ "to": "120363302307113947@g.us", "message": "Aviso para todos" }`. A mensagem vai para o grupo de avisos da comunidade, e `group_jid` na resposta traz o código desse grupo de avisos.
- Grupo e comunidade só saem por conexão UAZAPI ativa e conectada cujo número participa do grupo; conexão pela API oficial da Meta não envia para grupos. Sem `connection_id`, a API usa a única conexão que participa do grupo; se houver mais de uma, usa a última conexão em que o grupo conversou e, sem ela, responde 422 `CONNECTION_REQUIRED` para você escolher.
- Um grupo de que o número da conexão já saiu ainda pode aparecer como grupo da empresa: nesse caso o provedor recusa e a resposta é 502 `PROVIDER_ERROR` com o detalhe do provedor.
Modelo de envio
{
"to": "5548999990000",
"message": "Olá! Seu pedido foi confirmado.",
"connection_id": "<opcional — UUID da conexão>"
}Resposta (200)
{
"success": true,
"data": {
"wamid": "<id-da-meta-ou-provider>",
"provider": "uazapi",
"message_id": "<uuid>",
"contact_id": "<uuid>"
}
}Erros
| Status | Código | Quando ocorre |
|---|---|---|
| 400 | MISSING_FIELD | Campo obrigatório ausente no corpo (to, message) |
| 400 | INVALID_PHONE | Número de telefone não pôde ser normalizado |
| 403 | CONTACT_OPTED_OUT | Contato pediu para não receber mensagens (opted_out_at) |
| 403 | CONTACT_BLOCKED | Contato bloqueado |
| 403 | EXTERNAL_AI_DISABLED | IA externa desligada para o contato (o operador assumiu o atendimento). Só volta quando alguém religar pelo menu de IA no inbox; templates por /api/v1/send/template não são afetados |
| 403 | GROUP_ANNOUNCE_ONLY | Grupo em que só administradores enviam e o número da conexão não é administrador |
| 404 | NOT_FOUND | connection_id enviado não pertence à empresa |
| 404 | GROUP_NOT_FOUND | Código de grupo ou comunidade em `to` não encontrado nesta empresa (ou o grupo de avisos da comunidade ainda não foi sincronizado) |
| 409 | AMBIGUOUS_CONTACT | O telefone ou o código de grupo está associado a mais de um contato |
| 422 | CONNECTION_REQUIRED | Envio para grupo sem conexão possível: o connection_id informado não participa do grupo ou está desconectado, nenhuma conexão UAZAPI ativa e conectada participa dele, ou há mais de uma e é preciso escolher pelo connection_id |
| 502 | PROVIDER_ERROR | Falha no envio pelo provedor (UAZAPI/Meta), ou falha ao consultar as comunidades no provedor |
| 502 | DELIVERY_UNCERTAIN | A Meta respondeu com erro, mas a mensagem pode ter chegado — não reenvie automaticamente. A mensagem fica registrada no histórico como `failed` com `error_type: "delivery_uncertain"`; confira com o contato antes de reenviar |
| 503 | CONTACT_STATE_UNAVAILABLE | Não foi possível ler o estado do contato (indisponibilidade transitória) — re-tente após Retry-After; não é um estado do contato |
Exemplo
curl -s -X POST -H "Authorization: Bearer <sua-key>" -H "Content-Type: application/json" \
-d '{"to":"5548999990000","message":"Olá! Seu pedido foi confirmado.","connection_id":"<opcional — UUID da conexão>"}' \
https://www.prosalab.com/api/v1/send/message