ZynzapAPI

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çãoCampo do arquivoObservações
SendImageMessageimage_bytes + mimetypecaption opcional; view_once para visualização única.
SendVideoMessagevideo_bytes + mimetypeMP4 (H.264/AAC) é o formato mais compatível.
SendVoiceNoteaudio_bytes + mimetypeOGG/Opus aparece como mensagem de voz; informe duration_secs.
SendDocumentMessagedocument_bytes + mimetype + file_nameOu media_asset_id de um arquivo da biblioteca (um dos dois).
SendConversationMessagemedia_bytes + mimetypeOu 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"
  }
}'
Resposta
{
  "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.bin

O 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): GetConversationMediaUrl com o id da mensagem do histórico devolve uma url temporária (válida por expires_in_secs), além de mime, file_name e size_bytes.
  • Visualização única (messages:view_once): GetViewOnceMedia devolve os bytes em media_bytes uma única vez (available: true só na chamada que ganhou a visualização). ListViewOnceMedia lista 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"
  }
}'