Mídias
Envie arquivos em Base64, guarde na biblioteca de mídias, reutilize por media_asset_id e baixe mídias recebidas.
A API trabalha com JSON: arquivos vão em Base64 nos campos bytes (por exemplo image_bytes, document_bytes, file). O corpo inteiro pode ter até 12 MiB, então o arquivo em si fica em torno de 9 MiB.
Enviar uma mídia direto na mensagem
| Operação | Campo do arquivo | Observações |
|---|---|---|
SendImageMessage | image_bytes + mimetype | caption opcional; view_once para visualização única. |
SendVideoMessage | video_bytes + mimetype | MP4 (H.264/AAC) é o formato mais compatível. |
SendVoiceNote | audio_bytes + mimetype | OGG/Opus aparece como mensagem de voz; informe duration_secs. |
SendDocumentMessage | document_bytes + mimetype + file_name | Ou media_asset_id de um arquivo da biblioteca (um dos dois). |
SendConversationMessage | media_bytes + mimetype | Ou media_asset_id. message_type diz o tipo (image, video, voice, document, sticker). |
Veja exemplos completos em Enviar mensagens.
Biblioteca de mídias
Para reutilizar o mesmo arquivo (catálogo, boleto padrão, vídeo de boas-vindas), guarde-o uma vez na biblioteca (product:media) e use o id devolvido:
curl -X POST "https://api.zynzap.com.br/v1/rpc/UploadMedia" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"file": "JVBERi0xLjQKJ...",
"mime": "application/pdf",
"original_filename": "catalogo-verao.pdf"
}
}'{
"asset": {
"id": "d4c3b2a1-0f9e-4d8c-b7a6-5e4d3c2b1a09",
"kind": "document",
"mime": "application/pdf",
"size_bytes": "482113",
"original_filename": "catalogo-verao.pdf",
"created_at_unix_ms": "1760280000000"
}
}Depois, envie por media_asset_id (sem repetir os bytes):
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",
"media_asset_id": "d4c3b2a1-0f9e-4d8c-b7a6-5e4d3c2b1a09",
"mimetype": "application/pdf",
"file_name": "catalogo-verao.pdf",
"caption": "Nosso catálogo de verão"
},
"billing": {
"quoteId": "0b8f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a6b"
}
}'ListMedia lista a biblioteca (filtre por kind) e DeleteMedia exclui. O armazenamento conta no plano (STORAGE_ALLOWANCE_REACHED quando acabar).
Baixar arquivos
GetMediaUrl devolve, na API pública, o caminho autenticado /media/{id}. Baixe com a mesma chave:
curl "https://api.zynzap.com.br/v1/media/d4c3b2a1-0f9e-4d8c-b7a6-5e4d3c2b1a09" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-o arquivo.binO download tem até 64 MiB e vem como anexo (Content-Disposition: attachment). Mídias inexistentes ou de outra conta respondem 404 MEDIA_NOT_FOUND.
Mídias recebidas
Quando um cliente manda uma mídia, o evento MessageReceived traz media (tipo, tamanho, nome) e o histórico do atendimento guarda a referência. Para baixar:
- No atendimento (
product:inbox):GetConversationMediaUrlcom oidda mensagem do histórico devolve umaurltemporária (válida porexpires_in_secs), além demime,file_nameesize_bytes. - Visualização única (
messages:view_once):GetViewOnceMediadevolve os bytes emmedia_bytesuma única vez (available: truesó na chamada que ganhou a visualização).ListViewOnceMedialista as recebidas.
curl -X POST "https://api.zynzap.com.br/v1/rpc/GetConversationMediaUrl" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"message_id": "7e6d5c4b-3a29-4180-9f8e-7d6c5b4a3928"
}
}'