Skip to main content

message.status_updated

Enviado toda vez que o status de uma mensagem muda. Cada transição de status gera um evento independente.
{
  "event": "message.status_updated",
  "timestamp": "2025-01-15T10:30:00.000Z",
  "data": {
    "dispatchId": "uuid-do-message-delivery",
    "campaignId": "uuid-da-campanha",
    "campaignName": "Promoção Black Friday 2025",
    "uid": "user-001",
    "phone": "+5511999999999",
    "status": "delivered",
    "statusTimestamp": "2025-01-15T10:30:00.000Z",
    "channel": "rcs",
    "failureReason": null,
    "metadata": {}
  }
}

Campos do Payload

CampoTipoDescrição
eventstringTipo do evento. Sempre message.status_updated
timestampstringISO 8601 — momento em que o evento foi gerado
data.dispatchIdstringID único do message delivery
data.campaignIdstringID da campanha (mesmo enviado no dispatch)
data.campaignNamestringNome da campanha
data.uidstring | nullID externo do destinatário (enviado no dispatch via uid)
data.phonestringNúmero do destinatário
data.statusstringStatus atual. Ver tabela abaixo
data.statusTimestampstringISO 8601 — quando o status ocorreu no provedor
data.channelstringCanal de entrega: rcs ou sms
data.failureReasonstring | nullMotivo da falha (somente quando status = "failed")
data.interactionobject | nullDados de interação do usuário (somente para clicked e responded)
data.metadataobjectReservado para uso futuro

Status Possíveis

StatusCanalDescrição
sentrcs ou smsMensagem enviada/confirmada pelo provedor
carrier-sendedsmsSMS aceito pela operadora para entrega
deliveredrcs ou smsMensagem entregue ao dispositivo
readrcsMensagem lida pelo destinatário
clickedrcsDestinatário clicou em botão de ação (ACTION) ou URL
respondedrcsDestinatário respondeu com texto livre ou botão REPLY
failedrcs ou smsFalha na entrega. Ver failureReason
O campo failureReason é preenchido apenas quando status = "failed". Em todos os outros eventos (delivered, read, clicked, etc.) o campo é null, independentemente de a mensagem ter falhado anteriormente.

Fluxos de Eventos por Cenário

RCS — Bloqueado por duplicidade

Quando uma mensagem é bloqueada antes de ser enviada (ex: número já recebeu a mesma mensagem recentemente).
{
  "data": {
    "status": "failed",
    "channel": "rcs",
    "failureReason": "Bloqueado por duplicidade",
    "interaction": null
  }
}

RCS — Entrega normal com leitura

sent → delivered → read

RCS — Destinatário clica em botão de ação (openUrl, call)

sent → delivered → read → clicked
{
  "data": {
    "status": "clicked",
    "channel": "rcs",
    "failureReason": null,
    "interaction": {
      "type": "click",
      "text": "APROVEITE",
      "postbackData": "https://www.puravida.com.br/campanhas/health-monday"
    }
  }
}

RCS — Destinatário responde com botão REPLY

sent → delivered → read → responded
{
  "data": {
    "status": "responded",
    "channel": "rcs",
    "failureReason": null,
    "interaction": {
      "type": "reply",
      "text": "Garanta já a sua.",
      "postbackData": "Eu quero a webcam"
    }
  }
}

RCS — Destinatário responde com texto livre

{
  "data": {
    "status": "responded",
    "channel": "rcs",
    "failureReason": null,
    "interaction": {
      "type": "text",
      "text": "Olá, quero mais informações"
    }
  }
}
clicked é acionado por botões do tipo ACTION (openUrl, call). responded é acionado por botões do tipo REPLY ou quando o destinatário digita texto livre. Para todos os demais status (sent, delivered, read, failed), o campo interaction é null.

Campo interaction

Presente somente nos eventos clicked e responded.
CampoTipoDescrição
interaction.typestring"click" (botão ACTION), "reply" (botão REPLY) ou "text" (texto livre)
interaction.textstringTexto do botão clicado ou mensagem digitada
interaction.postbackDatastring | undefinedURL (click) ou valor de postback do botão REPLY

RCS → Fallback SMS — Dispositivo sem suporte RCS, SMS entregue

Quando o dispositivo não suporta RCS, o provedor automaticamente reenvia via SMS quando o template utilizado na campanha estiver com fallback ativo. O campo channel muda de rcs para sms a partir do evento de fallback.
[rcs] sent
[rcs] failed          ← "Aparelho não possui suporte ao RCS."
[sms] sent            ← SMS despachado pelo provedor
[sms] carrier-sended  ← SMS aceito pela operadora
[sms] delivered       ← SMS entregue ao dispositivo
{ "data": { "status": "failed",          "channel": "rcs", "failureReason": "Aparelho não possui suporte ao RCS." } }
{ "data": { "status": "sent",            "channel": "sms", "failureReason": null } }
{ "data": { "status": "carrier-sended",  "channel": "sms", "failureReason": null } }
{ "data": { "status": "delivered",       "channel": "sms", "failureReason": null } }

RCS → Fallback SMS — SMS não entregue pela operadora

[rcs] sent
[rcs] failed          ← "Aparelho não possui suporte ao RCS."
[sms] sent            ← SMS despachado pelo provedor
[sms] carrier-sended  ← SMS aceito pela operadora
[sms] failed          ← Operadora não conseguiu entregar
{ "data": { "status": "failed",          "channel": "rcs", "failureReason": "Aparelho não possui suporte ao RCS." } }
{ "data": { "status": "sent",            "channel": "sms", "failureReason": null } }
{ "data": { "status": "carrier-sended",  "channel": "sms", "failureReason": null } }
{ "data": { "status": "failed",          "channel": "sms", "failureReason": null } }

Diferença entre sent e carrier-sended (canal SMS)

StatusMomento
sentConfirmação do provedor de que o SMS foi despachado
carrier-sendedConfirmação da operadora de que o SMS foi recebido para entrega
deliveredConfirmação de que o SMS chegou ao dispositivo
Implemente seu handler de webhook de forma idempotente. Uma mesma mensagem pode gerar eventos de sent e carrier-sended em sequência rápida — ambos são válidos e distintos.

Eventos de Resposta do Destinatário

Além de atualizações de status de entrega, eventos responded e clicked indicam que o destinatário interagiu com a mensagem.
InteraçãoStatusDescrição
Botão ACTION clicadoclickedO destinatário clicou em um link ou iniciou uma ligação
Botão REPLY clicadorespondedO destinatário escolheu uma resposta rápida
Texto digitadorespondedO destinatário enviou uma mensagem de texto livre