Pular para o conteúdo

Status da mensagem

Após enviar uma mensagem, você pode consultar o status dela a qualquer momento pela API. O status reflete o andamento do processamento e entrega no WhatsApp.

Tabela de status

StatusDescrição
pendingA mensagem foi recebida pelo Turbo Notify e aguarda processamento.
sentA mensagem foi enviada ao WhatsApp com sucesso.
deliveredA mensagem foi entregue ao dispositivo do destinatário.
readA mensagem foi lida pelo destinatário.
failedO envio falhou. Consulte o objeto error ({code, message, hint}) para detalhes.

Consultar status

Para consultar o status de uma mensagem, faça uma requisição GET informando o message_id retornado no envio.

turbo-notify.sh
curl -X GET \
https://api.turbonotify.com/v1/messages/msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7/status \
-H "Authorization: Bearer SUA_CHAVE"

Exemplos de resposta

Pendente

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "status": {
    "state": "pending",
    "at": "2025-07-16T10:00:00Z",
    "error": null
  }
}

Enviada

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "status": {
    "state": "sent",
    "at": "2025-07-16T10:00:02Z",
    "error": null
  }
}

Entregue

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "status": {
    "state": "delivered",
    "at": "2025-07-16T10:00:05Z",
    "error": null
  }
}

Lida

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "status": {
    "state": "read",
    "at": "2025-07-16T10:01:12Z",
    "error": null
  }
}

Falha

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "status": {
    "state": "failed",
    "at": "2025-07-16T10:00:03Z",
    "error": {
      "code": "number_not_connected",
      "message": "The number is not connected to WhatsApp.",
      "hint": "The number was not connected to WhatsApp. Reconnect it, then send the message again."
    }
  }
}

Detalhes da falha

Quando o status é failed, o objeto error traz os detalhes. Ele tem a mesma estrutura do data.error dos webhooks *.failed, então o evento e a consulta descrevem a falha do mesmo jeito (veja Webhooks e Consultar mensagem):

CampoDescrição
error.codeCódigo estável, feito para o seu código: decida o tratamento por este valor (ex.: number_not_connected, whatsapp_send_failed, media_fetch_failed).
error.messageDescrição legível da falha, para os seus logs e para depuração. Pode trazer um diagnóstico do WhatsApp em inglês; identificadores pessoais (números, JIDs) nunca aparecem nela. Não decida o tratamento por este texto: ele pode mudar, o code é o que permanece estável.
error.hintstring: orientação acionável para corrigir, derivada do code. Ausente (chave omitida, nunca null) quando não há orientação para o code.

Neste endpoint o campo error está sempre presente: vem preenchido quando state é failed e null nos demais estados (pending/sent/delivered/read). Já em GET /v1/numbers/{ref}/messages/{id}, o campo é omitido quando não há falha.

Erros possíveis

StatusCódigo de erroDescrição
401not_authenticatedA chave de API está inválida ou ausente.
403insufficient_scopeA chave de API não possui o escopo messages:read (resposta inclui required_scope).
404not_foundA mensagem não foi encontrada, pertence a outra organização ou pertence a um número diferente do da URL (na rota atalho sem {ref}, o número principal): todos esses casos devolvem a mesma resposta, sem distinção.
404number_not_found(apenas na rota com {ref}) O alias ou o id informado na URL não corresponde a nenhum número cadastrado.
400invalid_number_id(apenas na rota com {ref}) O valor na URL começa com num_, mas não é um id de número válido.
500internal_errorErro interno inesperado no servidor.

Retenção

O status continua consultável por 12 meses, mesmo depois que o conteúdo da mensagem expira no prazo de retenção do seu plano: só o conteúdo expira. Os prazos por plano estão em Retenção.

Momento da mudança de status

O momento da mudança de estado mais recente vem no campo status.at, que avança a cada mudança (sent → delivered → read):

  • Em GET /v1/numbers/{ref}/messages/{id}/status o objeto status carrega {state, at}: o status.at é o instante em que o estado atual foi atingido.
  • Em GET /v1/numbers/{ref}/messages/{id} o mesmo status.at aparece dentro do objeto status. Não confunda com o at no nível raiz da mensagem: este é o momento em que a mensagem aconteceu (mensagem enviada: o envio real no WhatsApp; mensagem recebida: o recebimento) e não muda conforme a mensagem avança para delivered/read.
  • Nos eventos message.sent, message.delivered e message.read (webhook e polling via GET /v1/events) o instante da ação vem em data.at: o mesmo nome de campo em todos os eventos message.*.

Atualizações em tempo real

Para receber cada mudança de status sem consultar a API repetidamente, configure um webhook. Veja como em Eventos via webhook.