Pular para o conteúdo

Enviar reação

Sua aplicação pode enviar ou remover uma reação em uma mensagem específica.

O endpoint é roteado pelo message_id da mensagem-alvo na URL: não há campo to no corpo, pois o destinatário é inferido da mensagem original.

Esta página cobre o envio e a remoção de reações. Para listar as reações ativas de uma mensagem, veja Consultar reações.

Antes de enviar a reação, o Turbo Notify abre a conversa como uma pessoa faria: o número aparece online, o histórico de mensagens não lidas do chat de origem da mensagem-alvo é marcado como lido e só então a reação é enviada. Veja Marcar como lida.

Adicionar uma reação

POST /v1/messages/{message_id}/react: adiciona uma reação à mensagem identificada por {message_id} (formato msg_{hex32}). Esta rota opera sobre o número principal. Para enviar a reação a partir de um número extra, use a forma completa POST /v1/numbers/{ref}/messages/{message_id}/react com o alias do número no caminho da URL.

reaction.sh
curl -X POST \
https://api.turbonotify.com/v1/messages/msg_01993c5a1b24d3e9f01a2b3c4d5e6f70/react \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"reaction": "🎉"
}'

Após enviar, o Turbo Notify retorna aceite assíncrono:

Status HTTP: 202
{
  "message_id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
  "reaction_event_id": "op_reaction_a1b2c3d4e5f6",
  "status": {
    "state": "pending",
    "at": "2025-07-16T10:00:00Z"
  }
}

Remover uma reação

Para remover uma reação previamente enviada, envie a propriedade reaction como null (ou string vazia) no mesmo endpoint.

reaction.sh
curl -X POST \
https://api.turbonotify.com/v1/messages/msg_01993c5a1b24d3e9f01a2b3c4d5e6f70/react \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"reaction": null
}'

Após enviar, o Turbo Notify retorna aceite assíncrono:

Status HTTP: 202
{
  "message_id": "msg_01993c5a1b24d3e9f01a2b3c4d5e6f70",
  "reaction_event_id": "op_reaction_9f8e7d6c5b4a",
  "status": {
    "state": "pending",
    "at": "2025-07-16T10:00:05Z"
  }
}

A conclusão da operação chega via webhook como message.reacted (sucesso) ou message.react.failed (falha). O payload de falha inclui o message_id da mensagem-alvo, dispensando o uso de request_id para correlação.

Reação com número extra

Para enviar a reação a partir de um número extra cadastrado e ativo, use o alias desse número no caminho da URL. O destinatário continua sendo inferido a partir do message_id.

reaction.sh
curl -X POST \
https://api.turbonotify.com/v1/numbers/vendas-sp/messages/msg_01993c5a1b24d3e9f01a2b3c4d5e6f70/react \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"reaction": "🎉"
}'

Caso o alias informado na URL não esteja cadastrado como número extra ou não esteja ativo, a operação será rejeitada.

Saiba mais sobre números extras.

Erros possíveis

StatusCódigo de erroDescrição
400invalid_message_idO message_id na URL não está no formato msg_{hex32}.
402feature_not_availableO recurso não está disponível no plano contratado.
401not_authenticatedA chave de API está inválida ou ausente.
403insufficient_scopeA chave de API não possui o escopo messages:send (resposta inclui required_scope).
404number_not_foundO {ref} do caminho não corresponde a nenhum número da conta (na rota plana: a conta ainda não tem número principal).
400invalid_number_idO valor na URL começa com num_, mas não é um id de número válido.
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.
409number_not_connectedO número que envia não está conectado ao WhatsApp. Reconecte o número e tente de novo.
422message_not_reactableA mensagem alvo da reação ainda não foi enviada ao WhatsApp ou já foi apagada.
422sender_not_foundO alias/número informado não corresponde a nenhum remetente da conta.
422validation_errorO corpo da requisição está malformado ou não passou na validação. A resposta inclui details.errors com a lista de campos inválidos.
500internal_errorErro interno inesperado no servidor.

Uma mensagem inexistente e uma mensagem de outro número devolvem o mesmo not_found, nas duas rotas (a atalho sem {ref} e a aninhada /numbers/{ref}/messages/...). Se você sabe que a mensagem existe mas recebeu not_found, confira se está usando o id (ou o alias atual) do número que a enviou ou recebeu.