Pular para o conteúdo principal

Download de Midias Recebidas

Conceituacao

Quando um contato envia uma imagem, audio, video ou documento pelo WhatsApp, a Ogmma API processa a midia automaticamente e disponibiliza uma URL para download no payload do webhook.

Este guia mostra como acessar e baixar essas midias no N8N, com exemplos praticos e fluxos completos.

Pre-requisito

Certifique-se de que voce ja configurou o recebimento de webhooks no N8N antes de continuar.


Como Funciona

Quando uma mensagem com midia e recebida, a Ogmma executa o seguinte fluxo automaticamente:

Contato envia imagem/audio/video/documento pelo WhatsApp
|
v
Ogmma Worker recebe a mensagem
|
v
Worker baixa a midia do WhatsApp
|
v
Worker faz upload para o armazenamento (S3)
|
v
Mensagem salva no banco com URL da midia
|
v
Webhook "message.received" disparado com mediaUrl pronta
|
v
N8N recebe o evento com a URL para download

Voce nao precisa interagir com o WhatsApp diretamente. A midia ja esta disponivel para download quando o webhook chega ao N8N.


Payload do Webhook com Midia

Quando o evento message.received contem uma midia, o campo mediaUrl vem preenchido:

Exemplo: Imagem

{
"event": "message.received",
"timestamp": "2025-01-15T10:45:00.000Z",
"data": {
"messageId": "665f2b3c4d5e6f7a8b9c0d1e",
"conversationId": "665e0b1a2c3d4e5f6a7b8c9d",
"channelId": "665d9a0b1c2d3e4f5a6b7c8d",
"from": "5511999998888",
"type": "image",
"content": "Segue o comprovante de pagamento",
"mediaUrl": "https://oapi.ogmma.com.br/v1/media/665f2b3c4d5e6f7a8b9c0d1e",
"contact": {
"id": "665c8901a2b3c4d5e6f7a8b9",
"name": "Joao Silva",
"phone": "5511999998888"
}
}
}

Exemplo: Audio

{
"event": "message.received",
"timestamp": "2025-01-15T10:46:30.000Z",
"data": {
"messageId": "665f3c4d5e6f7a8b9c0d1e2f",
"conversationId": "665e0b1a2c3d4e5f6a7b8c9d",
"channelId": "665d9a0b1c2d3e4f5a6b7c8d",
"from": "5511999998888",
"type": "audio",
"content": "",
"mediaUrl": "https://oapi.ogmma.com.br/v1/media/665f3c4d5e6f7a8b9c0d1e2f",
"contact": {
"id": "665c8901a2b3c4d5e6f7a8b9",
"name": "Joao Silva",
"phone": "5511999998888"
}
}
}

Exemplo: Documento

{
"event": "message.received",
"timestamp": "2025-01-15T10:48:00.000Z",
"data": {
"messageId": "665f4d5e6f7a8b9c0d1e2f30",
"conversationId": "665e0b1a2c3d4e5f6a7b8c9d",
"channelId": "665d9a0b1c2d3e4f5a6b7c8d",
"from": "5511999998888",
"type": "document",
"content": "Contrato assinado",
"mediaUrl": "https://oapi.ogmma.com.br/v1/media/665f4d5e6f7a8b9c0d1e2f30",
"contact": {
"id": "665c8901a2b3c4d5e6f7a8b9",
"name": "Joao Silva",
"phone": "5511999998888"
}
}
}

Campos Relevantes

CampoTipoDescricao
data.typestringTipo da mensagem: text, image, video, audio, document
data.mediaUrlstring | nullURL para download da midia. null para mensagens de texto.
data.contentstringLegenda (caption) da midia, se houver. Vazio para audios sem legenda.

Endpoint de Download

GET /v1/media/:messageId

Este endpoint retorna a midia associada a uma mensagem.

PropriedadeValor
URLhttps://oapi.ogmma.com.br/v1/media/{messageId}
MetodoGET
AutenticacaoNao requerida
Resposta302 Redirect para URL temporaria de download

Como funciona:

  1. Recebe o messageId da mensagem
  2. Busca a mensagem no banco de dados
  3. Gera uma nova URL temporaria de download (presigned URL)
  4. Redireciona (HTTP 302) para a URL temporaria
Sem autenticacao

O endpoint /v1/media/:messageId nao requer autenticacao. Basta acessar a URL com o messageId e o download comeca automaticamente. Isso facilita o uso em nodes HTTP do N8N e em tags HTML (<img>, <audio>, <video>).

Exemplo com cURL

curl -L "https://oapi.ogmma.com.br/v1/media/665f2b3c4d5e6f7a8b9c0d1e" \
--output imagem.jpg

O flag -L faz o cURL seguir o redirect 302 automaticamente.

Respostas

StatusDescricao
302Redirect para URL temporaria de download
400Mensagem nao possui midia
404Mensagem nao encontrada
500Erro interno ao servir midia

Passo a Passo no N8N

Passo 1: Receber o Webhook

Use o Webhook node configurado para message.received (veja Receber Webhooks).

Passo 2: Verificar se a Mensagem tem Midia

Adicione um IF node para verificar se a mensagem contem midia:

CampoValor
Condicao{{ $json.data.mediaUrl }} is not empty
[Webhook] --> [IF: tem mediaUrl?]
--> Sim: [Download da midia]
--> Nao: [Processar mensagem de texto]

Passo 3: Baixar a Midia

Adicione um HTTP Request node para baixar o arquivo:

CampoValor
MethodGET
URL{{ $json.data.mediaUrl }}
Response FormatFile
Output Fielddata
Redirect automatico

O N8N segue redirects HTTP 302 automaticamente. Voce so precisa apontar para a mediaUrl e o download acontece.

Passo 4: Usar o Arquivo

Apos o download, o arquivo fica disponivel como binario no campo data. Voce pode:

  • Salvar no Google Drive: Conecte um node Google Drive com Upload File
  • Enviar por e-mail: Use um node Email com o arquivo como anexo
  • Salvar em disco: Use um node Write Binary File
  • Processar com IA: Envie para OpenAI Vision, Google Cloud Vision, etc.
  • Encaminhar para outro canal: Use o endpoint de envio de imagem da Ogmma API

Workflow Completo: Salvar Midias no Google Drive

Este exemplo salva automaticamente todas as midias recebidas em uma pasta do Google Drive.

Arquitetura

[Webhook: message.received]
|
v
[IF: tem mediaUrl?]
|
+--> Sim: [HTTP Request: download] --> [Google Drive: upload]
|
+--> Nao: [No Operation]

Configuracao Detalhada

1. Webhook Node

CampoValor
HTTP MethodPOST
Pathogmma-media
Response ModeImmediately
Response Code200

2. IF Node

CampoValor
Condicao{{ $json.data.type }} is not equal to text

3. HTTP Request Node (Download)

CampoValor
MethodGET
URL{{ $json.data.mediaUrl }}
Response FormatFile
Output Fielddata

4. Google Drive Node (Upload)

CampoValor
OperationUpload
File Name{{ $('Webhook').item.json.data.contact.name }}_{{ $('Webhook').item.json.data.messageId }}.jpg
Parent FolderID da pasta no Google Drive
Binary Propertydata

Workflow Completo: Rotear por Tipo de Midia

Este exemplo processa cada tipo de midia de forma diferente.

Arquitetura

[Webhook: message.received]
|
v
[IF: tem mediaUrl?]
|
+--> Nao: [Processar texto]
|
+--> Sim: [Switch: tipo de midia]
|
+--> image --> [HTTP Request: download] --> [Salvar/Processar imagem]
+--> audio --> [HTTP Request: download] --> [Transcrever audio]
+--> document --> [HTTP Request: download] --> [Salvar documento]
+--> video --> [HTTP Request: download] --> [Salvar video]

Switch Node

CampoValor
ModeRules
Data TypeString
Value{{ $json.data.type }}

Regras

#OperacaoValorSaida
1Equalsimage"Imagem"
2Equalsaudio"Audio"
3Equalsdocument"Documento"
4Equalsvideo"Video"

Tipos de Midia Suportados

Tipo (data.type)Formatos ComunsDescricao
imageJPG, PNG, WebP, GIFFotos e imagens
audioOGG, MP3, AAC, M4AMensagens de voz e audios
videoMP4, 3GPVideos gravados ou encaminhados
documentPDF, DOCX, XLSX, CSV, TXTDocumentos e arquivos

Troubleshooting

mediaUrl retorna 404

  • messageId invalido? Verifique se o messageId do payload esta correto
  • Mensagem foi deletada? A midia pode ter sido removida do sistema

mediaUrl retorna 400

  • A mensagem existe mas nao possui midia (tipo text). Verifique o campo type antes de tentar o download.

Download retorna arquivo corrompido

  • Verifique se o Response Format do HTTP Request node esta como File (nao JSON ou Text)
  • Certifique-se de que o Output Field esta preenchido (ex: data)

Arquivo muito grande / timeout

  • O N8N tem limites de tamanho de arquivo dependendo do plano
  • Para arquivos grandes (videos longos, documentos pesados), considere salvar diretamente no Google Drive ou S3 usando os nodes nativos

Proximo Passo