ZynzapAPI

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:

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: true mostra "digitando..." por alguns segundos antes de enviar (mais natural). Ajuste o tempo com typing.
  • O WhatsApp formata *negrito*, _itálico_, ~riscado~ e ```monoespaçado```.
  • O atalho POST /messages/send aceita 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.