Skip to main content

Eventos do Webhook

Quando a Meta envia um webhook para POST https://grwthy.com/whatsapp/webhook, o payload é verificado e processado. Existem duas categorias de eventos: mensagens recebidas e atualizações de status.

Estrutura do Payload

Todos os payloads de webhook seguem o formato da Meta Cloud API:
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WABA_ID",
      "changes": [
        {
          "field": "messages",
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "5511999999999",
              "phone_number_id": "123456789012345"
            },
            "contacts": [
              {
                "profile": { "name": "João Silva" },
                "wa_id": "5511888888888"
              }
            ],
            "messages": [],
            "statuses": []
          }
        }
      ]
    }
  ]
}

Mensagens Recebidas

Quando um usuário envia uma mensagem para o seu número WhatsApp, o array messages contém os objetos de mensagem recebida.

Tipos de Mensagem

TipoDescrição
textMensagem de texto simples
imageImagem com legenda opcional
documentArquivo de documento
audioMensagem de áudio ou nota de voz
videoVídeo com legenda opcional
locationLocalização compartilhada
contactsCartões de contato compartilhados
interactiveResposta de botão ou seleção de lista
reactionReação com emoji a uma mensagem
stickerMensagem de figurinha

Exemplo: Mensagem de Texto

{
  "messages": [
    {
      "id": "wamid.abc123",
      "from": "5511888888888",
      "timestamp": "1704067200",
      "type": "text",
      "text": {
        "body": "Olá!"
      }
    }
  ]
}
Mensagens recebidas são registradas com direção inbound e status received.

Atualizações de Status

Quando uma mensagem enviada muda de status, o array statuses contém os objetos de atualização.

Fluxo de Status

queued → sent → delivered → read

                   failed
StatusDescrição
sentMensagem aceita pelos servidores do WhatsApp
deliveredMensagem entregue no dispositivo do destinatário
readDestinatário abriu a mensagem
failedMensagem não pôde ser entregue

Exemplo: Status Delivered

{
  "statuses": [
    {
      "id": "wamid.abc123",
      "status": "delivered",
      "timestamp": "1704067260",
      "recipient_id": "5511888888888"
    }
  ]
}

Exemplo: Status Failed

{
  "statuses": [
    {
      "id": "wamid.abc123",
      "status": "failed",
      "timestamp": "1704067260",
      "recipient_id": "5511888888888",
      "errors": [
        {
          "code": 131047,
          "title": "Re-engagement message",
          "message": "More than 24 hours have passed since the last message"
        }
      ]
    }
  ]
}
Atualizações de status atualizam automaticamente o registro correspondente da mensagem no Grwthy.