Recebendo documentos WhatsApp
Um PDF, planilha ou qualquer outro arquivo que um contato anexa chega como uma mensagem recebida contendo document: a referência de mídia compartilhada, mais o nome que o próprio dispositivo dele deu ao arquivo.
O que um documento recebido contém
Exemplo de código
{
"id": "wam_01kyd6s0qfxv8t4k7n1yze6rhc",
"direction": "inbound",
"from": { "phone_number": "+14155550100" },
"to": { "phone_number": "+13124495569" },
"status": "received",
"document": {
"id": "waf_01kyd5p6zs9yju2f0p5rtx8vgb",
"url": "https://platform.bird.com/v1/whatsapp/messages/wam_01kyd6s0qfxv8t4k7n1yze6rhc/media/waf_01kyd5p6zs9yju2f0p5rtx8vgb",
"mime_type": "application/pdf",
"filename": "invoice-A1B2C3.pdf"
},
"created_at": "2026-08-25T09:15:02Z"
}| Campo | O que contém |
|---|---|
| id | O arquivo armazenado, para passar como media_id ao buscar os bytes |
| url | Uma URL Bird, buscada com sua chave API |
| mime_type | O tipo de mídia que WhatsApp reportou para o arquivo, como application/pdf |
| filename | O nome que o remetente deu ao arquivo; ausente quando a mensagem não trouxe nenhum |
| caption | O texto que o contato digitou abaixo do documento; ausente quando ele não enviou nenhum |
filename é o único campo que o lado de envio e o lado de recebimento usam de forma diferente: em um envio, é o nome que você quer exibir no chat; em uma mensagem recebida, é o que o dispositivo do contato forneceu.
Buscando os bytes
Passe o ID da mensagem e o id da mídia para o método de mídia do canal. O guia buscando mídia recebida traz essa chamada em todas as linguagens, junto com as regras de redirecionamento e cabeçalho que ela segue, e define a janela de retenção em que o arquivo fica disponível.
Não grave filename em disco assim que chegar. É texto controlado por um atacante vindo de um remetente não autenticado: pode conter separadores de caminho, sequências de travessia, uma segunda extensão enganosa ou um nome que colide com um arquivo que você já possui. Gere sua própria chave de armazenamento a partir do id da mídia, mantenha filename como rótulo de exibição e decida o que fazer com o arquivo a partir de mime_type, não da extensão que o nome alega.
O payload do webhook
whatsapp.received contém o braço document no envelope de evento:
Exemplo de código
{
"type": "whatsapp.received",
"timestamp": "2026-08-25T09:15:02.336Z",
"data": {
"whatsapp_id": "wam_01kyd6s0qfxv8t4k7n1yze6rhc",
"workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
"direction": "inbound",
"from": { "phone_number": "+14155550100" },
"to": { "phone_number": "+13124495569" },
"document": {
"id": "waf_01kyd5p6zs9yju2f0p5rtx8vgb",
"url": "https://platform.bird.com/v1/whatsapp/messages/wam_01kyd6s0qfxv8t4k7n1yze6rhc/media/waf_01kyd5p6zs9yju2f0p5rtx8vgb",
"mime_type": "application/pdf",
"filename": "invoice-A1B2C3.pdf"
},
"tags": null,
"metadata": null
}
}Um fluxo de sinistros ou onboarding que coleta documentação pode rotear pelo mime_type aqui e enfileirar a busca, já que os bytes continuam disponíveis por toda a janela de retenção.
Pontos de atenção
- mime_type é o que WhatsApp reporta sobre o arquivo e não diz nada sobre o que há dentro dele. Escaneie tudo o que você aceitar de um contato e valide a estrutura interna do arquivo antes de analisá-lo.
- Legenda e nome de arquivo são campos diferentes. Um contato que digita uma nota ao anexar o arquivo preenche caption; filename ainda vem do dispositivo dele.
Próximos passos
- Como o recebimento funciona: o envelope de entrada, busca de mídia e o webhook whatsapp.received
- Mensagens de documento WhatsApp: o lado de envio do mesmo braço
- Recebendo imagens: o mesmo formato de mídia para a foto de um documento
- Eventos WhatsApp: a lista completa de eventos, via API ou webhooks
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Assista ao guiaConnecting WhatsApp to Bird: from buying a number to a live channelEntenda o conceitoWhat is the 24-hour customer service window on WhatsApp?Use a ferramentaWhatsApp message builderExplore a funcionalidadeWhatsApp
Experimente na prática e obtenha um resumo de implementação