Pular para o conteúdo

Enviar mensagens pela API

Administrador

Envia uma mensagem para um número e, se não houver atendimento aberto com ele, abre um. Autenticação: token de escopo full (Tokens). Limite: 60 chamadas por minuto por empresa.

Campo Tipo Obrigatório Descrição
number string sim Número com DDI e DDD, só dígitos: 5522999990001.
body string sim (ou mídia) Texto da mensagem.
whatsappId número não ID da conexão por onde enviar. Sem ele, usa a conexão padrão.
quotedMsg string não ID de uma mensagem para citar.
medias arquivo(s) não Em multipart/form-data, um ou mais arquivos.
closeAfterSend boolean não Envia e encerra o atendimento. closeSubject define o assunto (padrão “Fechado automaticamente pela API”).
registerAsClosed ou openTicket: false boolean não Registra a mensagem num atendimento já encerrado, sem aparecer na fila. Útil para avisos (fatura, visita). subject define o assunto (padrão “Integracao externa”).
wabaTemplate objeto API oficial { "name", "languageCode", "bodyParameters": [], "previewBody" }. Obrigatório fora da janela de 24 horas.
action menu ou buttons não Menu interativo (API oficial) com menuOptions, menuButtonText, menuHeader, menuFooter, menuType (list, button, cta_url, auto).

Booleanos aceitam true, 1, "yes" e "sim".

{ "ticketId": 456, "status": "closed", "closed": true, "messages": [ { "id": "...", "body": "...", "type": "chat" } ] }
Mensagem Causa
Invalid number format. Only numbers is allowed. number com espaços, + ou traços.
whatsapp #N not found whatsappId inexistente ou de outra empresa.
ERR_CREATING_TICKET Falha ao abrir o atendimento (conexão desconectada, por exemplo).
Informe ao menos uma opcao para enviar menu WABA. action: menu sem menuOptions.
401 ERR_SESSION_EXPIRED Token inválido.
429 Limite de 60 por minuto.
Janela do terminal
curl -X POST https://app.altchat.com.br/api/messages/send \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"number": "5522999990001",
"body": "Olá! Sua fatura de outubro está disponível: https://central.provedor.com.br/fatura/123",
"whatsappId": 1,
"registerAsClosed": true,
"subject": "Aviso de fatura"
}'

GET /api/messages/status?id=ID_DA_MENSAGEM (limite de 300 por minuto):

{ "id": "...", "ticketId": 456, "fromMe": true, "ack": 2, "status": "delivered", "failureReason": null, "createdAt": "...", "updatedAt": "..." }
ack status
-1 failed (veja failureReason)
0 pending
1 sent
2 delivered
3 read
4 played (áudio ouvido)

Um ERP típico chama a API em três momentos: ao gerar a fatura (aviso com link), ao agendar visita técnica (confirmação) e ao bloquear por inadimplência (aviso com link de pagamento). Para cada tipo, cadastre o texto como um modelo no ERP com variáveis ({NOME}, {VENCIMENTO}, {LINK}) e envie com registerAsClosed: true. Em conexões da API oficial, mantenha um template aprovado equivalente e use wabaTemplate quando o cliente não escreveu nas últimas 24 horas.