Pular para o conteúdo principal
O evento messages é entregue sempre que um cliente envia algo para o seu número: texto, mídia, localização, contato, reação ou a resposta de um botão. O conteúdo fica em value.messages, e os dados de quem enviou em value.contacts:
O campo type indica qual objeto vem junto: text traz text, image traz image, location traz location, e assim por diante.

Mensagens com mídia

Imagem, áudio, vídeo, documento e figurinha seguem o mesmo formato, mudando apenas o nome do objeto. O conteúdo não vem no payload: o que chega é o identificador do arquivo.
O campo caption aparece apenas quando o cliente escreveu uma legenda, e voice: true identifica o áudio gravado na hora, em vez de um arquivo enviado da galeria.
A url que vem no payload não pode ser aberta diretamente: ela exige o token da Meta no cabeçalho e expira em poucos minutos. Use o id da mídia com os endpoints da Datafy.
Para obter o arquivo, use o id:

Localização

Quando o cliente escolhe um local salvo, o objeto também traz name e address.

Respostas de botões e listas

A resposta de um botão ou de uma lista chega com type: "interactive", e o identificador que você definiu no envio vem em id. Os formatos estão em Enviar botões e Enviar lista.

Confirmar o recebimento

Depois de processar, marque a mensagem como lida para o cliente ver os dois tiques azuis, usando o messages[].id. Veja Marcar como lida. A referência completa dos tipos de mensagem está na documentação de webhooks da Meta.