Enviar mensagens
Texto, imagem, áudio, vídeo e documento, para contatos e grupos, com cotação e simulação de digitação.
Todos os envios seguem o mesmo ritmo: cotar em POST /billing/quotes com o request final e executar com billing.quoteId. Nos exemplos abaixo mostramos a execução; a cotação é a mesma chamada trocando a rota (veja Cobrança e cotações e o guia Tratar cobrança, que traz uma função pronta quoteAndRun).
Permissão: messages:send. O número de origem é o session_id (veja Números).
Destinatário
to_jid aceita:
- Só dígitos com DDI e DDD, sem
+, espaços ou traços:5511987654321. O Zynzap completa para[email protected]. - Um JID completo:
[email protected]para contatos ou[email protected]para grupos (pegue o JID do grupo emListGroups).
Texto
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendMessage" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "5511987654321",
"text": "Olá, Ana! Seu pedido #1234 saiu para entrega. 🚚",
"simulate_typing": true
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'simulate_typing: truemostra "digitando..." por alguns segundos antes de enviar (mais natural). Ajuste o tempo comtyping.- O WhatsApp formata
*negrito*,_itálico_,~riscado~e```monoespaçado```. - O atalho
POST /messages/sendaceita o mesmo corpo.
Imagem
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendImageMessage" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "5511987654321",
"image_bytes": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"mimetype": "image/png",
"caption": "Seu comprovante"
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'image_bytes é o arquivo em Base64 (JPEG, PNG ou WebP). view_once: true envia como visualização única.
Áudio (mensagem de voz)
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendVoiceNote" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "5511987654321",
"audio_bytes": "T2dnUwACAAAAAAAAAAA...",
"mimetype": "audio/ogg; codecs=opus",
"duration_secs": 7
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'Use OGG com Opus para aparecer como áudio gravado (com a onda sonora). Converta com ffmpeg -i entrada.mp3 -c:a libopus -b:a 32k saida.ogg.
Vídeo
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendVideoMessage" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "5511987654321",
"video_bytes": "AAAAIGZ0eXBpc29tAAACAGlzb21pc28y...",
"mimetype": "video/mp4",
"caption": "Como usar o produto"
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'Documento
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendDocumentMessage" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "5511987654321",
"document_bytes": "JVBERi0xLjQKJ...",
"mimetype": "application/pdf",
"file_name": "boleto-1234.pdf",
"caption": "Segue o boleto do pedido #1234"
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'Para arquivos grandes ou reaproveitados, guarde-os na biblioteca e envie media_asset_id em vez de document_bytes.
Para um grupo
Use o JID do grupo ([email protected]) em to_jid. Liste os grupos do número com ListGroups (groups:read).
curl -X POST "https://api.zynzap.com.br/v1/rpc/SendMessage" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"session_id": "8c1f7a52-4d1e-4b8a-9a43-2f6f5d0c9e11",
"to_jid": "[email protected]",
"text": "Bom dia, equipe! A reunião de hoje é às 10h."
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'Acompanhar a entrega
ok: true significa que o WhatsApp aceitou a mensagem. Entregue, lida e reproduzida chegam depois no evento MessageStatusUpdated (por webhook ou pelo stream), com o message_id. Mensagens enviadas pelo número também geram MessageSent.
Responder dentro de uma conversa
Para responder quem escreveu, prefira SendConversationMessage (product:inbox + messages:send): a resposta entra no histórico do atendimento e, se o cliente escreveu nas últimas 24 horas, sai de graça. Veja Receber mensagens.
Envios em massa
Não faça laços de SendMessage para centenas de contatos: use campanhas, que respeitam intervalos, horários, regras de opt-out e o ritmo seguro para o número. Veja as boas práticas.