> ## Documentation Index
> Fetch the complete documentation index at: https://docs.messagefy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Mensagem de Reação

> Envie reações com emojis em mensagens existentes

# Mensagem de Reação

O tipo `REACTION` permite reagir a uma mensagem existente com um emoji. A reação aparece vinculada à mensagem original, como nas reações nativas do WhatsApp.

## Payload

```json theme={null}
{
  "channelId": "uuid-do-canal",
  "content": {
    "type": "REACTION",
    "to": {
      "type": "WHATSAPP",
      "number": "5511999999999"
    },
    "emoji": "\ud83d\udc4d",
    "targetMessageId": "20CFBA298FAB68AA75D3B369EDB5C805"
  }
}
```

## Campos

<ParamField body="content.type" type="string" required>
  Deve ser `"REACTION"`.
</ParamField>

<ParamField body="content.to" type="Address" required>
  Endereço do destinatário (dono da mensagem que será reagida). Veja [formatos de endereço](/mensagens/visao-geral#enderecamento-address).
</ParamField>

<ParamField body="content.emoji" type="string" required>
  Emoji da reação. Deve ser um emoji Unicode válido. Para remover uma reação, envie uma string vazia `""`.
</ParamField>

<ParamField body="content.targetMessageId" type="string" required>
  ID da mensagem que receberá a reação. Este ID é recebido nos webhooks de mensagem.
</ParamField>

<ParamField body="content.targetFromMe" type="boolean" default="false">
  Indica se a mensagem alvo (a que está sendo reagida) foi enviada pelo próprio canal. Use `true` ao reagir a uma mensagem que você mesmo enviou e `false` ao reagir a uma mensagem recebida.
</ParamField>

<ParamField body="content.targetParticipant" type="string">
  Autor da mensagem alvo. Obrigatório ao reagir, dentro de um grupo, a uma mensagem enviada por
  outro participante (ou seja, quando `targetFromMe` é `false`). Fora de grupos pode ser omitido.
  **Em grupos, use o LID do autor** (ex.: `252780317044848@lid`, recebido em `content.from.lid`
  nos webhooks) -- com o JID a reação pode não ser vinculada à mensagem correta.
</ParamField>

## Exemplos

### Reagir com emoji

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api-dev.messagefy.io/api/v1/message/SendMessage \
    -H "Content-Type: application/json" \
    -H "X-API-KEY: sua-api-key-aqui" \
    -d '{
      "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "content": {
        "type": "REACTION",
        "to": {
          "type": "WHATSAPP",
          "number": "5511999999999"
        },
        "emoji": "\ud83d\udc4d",
        "targetMessageId": "20CFBA298FAB68AA75D3B369EDB5C805"
      }
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api-dev.messagefy.io/api/v1/message/SendMessage",
      headers={
          "Content-Type": "application/json",
          "X-API-KEY": "sua-api-key-aqui"
      },
      json={
          "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "content": {
              "type": "REACTION",
              "to": {
                  "type": "WHATSAPP",
                  "number": "5511999999999"
              },
              "emoji": "\ud83d\udc4d",
              "targetMessageId": "20CFBA298FAB68AA75D3B369EDB5C805"
          }
      }
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://api-dev.messagefy.io/api/v1/message/SendMessage",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "X-API-KEY": "sua-api-key-aqui",
      },
      body: JSON.stringify({
        channelId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        content: {
          type: "REACTION",
          to: {
            type: "WHATSAPP",
            number: "5511999999999",
          },
          emoji: "\ud83d\udc4d",
          targetMessageId: "20CFBA298FAB68AA75D3B369EDB5C805",
        },
      }),
    }
  );
  const data = await response.json();
  console.log(data);
  ```
</CodeGroup>

### Emojis comuns para reações

| Emoji    | Unicode        | Uso comum                     |
| -------- | -------------- | ----------------------------- |
| Curtir   | `\ud83d\udc4d` | Confirmação, aprovação        |
| Coração  | `\u2764\ufe0f` | Aprovação entusiástica        |
| Risada   | `\ud83d\ude02` | Humor                         |
| Surpresa | `\ud83d\ude2e` | Surpresa                      |
| Tristeza | `\ud83d\ude22` | Empatia                       |
| Oração   | `\ud83d\ude4f` | Agradecimento                 |
| Check    | `\u2705`       | Confirmação, tarefa concluída |

### Remover uma reação

Para remover uma reação previamente enviada, envie o campo `emoji` como string vazia:

```json theme={null}
{
  "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "content": {
    "type": "REACTION",
    "to": {
      "type": "WHATSAPP",
      "number": "5511999999999"
    },
    "emoji": "",
    "targetMessageId": "20CFBA298FAB68AA75D3B369EDB5C805"
  }
}
```

<Note>
  Cada usuário pode ter apenas **uma reação** por mensagem. Ao enviar uma nova reação para a mesma mensagem, a reação anterior é automaticamente substituída.
</Note>

### Reação em mensagem de grupo

Para reagir, em um grupo, a uma mensagem enviada por outro participante, informe `targetParticipant` com o **LID** do autor da mensagem alvo e mantenha `targetFromMe` como `false`:

```json theme={null}
{
  "channelId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "content": {
    "type": "REACTION",
    "to": {
      "type": "WHATSAPP",
      "jid": "120363402110764959@g.us"
    },
    "emoji": "\u2705",
    "targetMessageId": "A5B4C3D2E1F09876543210ABCDEF1234",
    "targetFromMe": false,
    "targetParticipant": "252780317044848@lid"
  }
}
```

<Warning>
  Em grupos, sem o `targetParticipant` correto o WhatsApp n\u00e3o consegue vincular a rea\u00e7\u00e3o \u00e0 mensagem certa. Informe sempre o **LID** do autor da mensagem alvo (recebido em `content.from.lid` nos webhooks) ao reagir a mensagens de terceiros.
</Warning>

<Tip>
  Reações são uma forma leve de interagir sem enviar uma mensagem completa. Use-as para confirmar recebimento, aprovar solicitações ou sinalizar leitura de mensagens importantes.
</Tip>

## Resposta

```json theme={null}
{
  "packageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
```

## Recebimento

Quando um contato reage a uma mensagem, você recebe um webhook com `content.type` igual a `REACTION`. O conteúdo carrega o `emoji` da reação e o `targetMessageId` da mensagem reagida, além do envelope comum de mensagem recebida.

```json theme={null}
{
  "packageId": "019a1234-5678-7abc-def0-123456789ac3",
  "channelId": "019a1258-177c-7286-b060-9ee02a0800c7",
  "correlationId": null,
  "content": {
    "type": "REACTION",
    "emoji": "👍",
    "targetMessageId": "3EB08209536937A66D8434",
    "targetFromMe": true,
    "targetParticipant": null,
    "from": {
      "type": "WHATSAPP",
      "jid": "5511999998888@s.whatsapp.net",
      "number": "5511999998888",
      "name": "Cliente"
    },
    "to": {
      "type": "WHATSAPP",
      "jid": "5511988887777@s.whatsapp.net",
      "number": "5511988887777",
      "name": "Minha Empresa"
    },
    "messageId": "3EB08209536937A66D8436",
    "isFromMe": false,
    "isGroupMessage": false,
    "isForwarded": false,
    "isStatusMessage": false,
    "isHistoryMessage": false,
    "timestamp": "2026-07-23T14:37:00+00:00"
  },
  "timestamp": "2026-07-23T14:37:00.100+00:00",
  "providerMetadata": null
}
```

<ResponseField name="content.emoji" type="string">
  Emoji da reação recebida. Uma string vazia `""` indica que o contato **removeu** uma reação anterior.
</ResponseField>

<ResponseField name="content.targetMessageId" type="string">
  ID da mensagem que recebeu a reação. Corresponde ao `messageId` de uma mensagem enviada ou recebida anteriormente.
</ResponseField>

<ResponseField name="content.targetFromMe" type="boolean">
  Indica se a mensagem reagida foi enviada pelo próprio canal (`true`) ou por outro participante (`false`).
</ResponseField>

<ResponseField name="content.targetParticipant" type="string">
  JID do autor da mensagem alvo. Presente principalmente em grupos, quando a mensagem reagida não é sua.
</ResponseField>

<ResponseField name="content.from" type="Address">
  Endereço de quem reagiu. Para WhatsApp inclui `jid`, `number` e `name` (e `lid` quando disponível).
</ResponseField>

<ResponseField name="content.to" type="Address">
  Endereço do chat/destinatário (o próprio número em conversas individuais ou o JID do grupo).
</ResponseField>

<ResponseField name="content.messageId" type="string">
  ID desta mensagem de reação.
</ResponseField>

<ResponseField name="content.isFromMe" type="boolean">
  `true` quando a reação foi originada pelo próprio canal (por exemplo, eco de uma reação enviada por você).
</ResponseField>

<ResponseField name="content.isGroupMessage" type="boolean">
  `true` quando a reação ocorreu em um grupo.
</ResponseField>

<ResponseField name="content.isBroadcast" type="boolean">
  `true` se a reação foi enviada para uma lista de transmissão (broadcast list).
</ResponseField>

<ResponseField name="content.isAnnounceGroup" type="boolean">
  `true` se a reação foi enviada para um grupo de avisos da comunidade.
</ResponseField>

<ResponseField name="content.isCommunityNotices" type="boolean">
  `true` se a reação foi enviada para o grupo de avisos da comunidade.
</ResponseField>

<ResponseField name="content.isNewsletter" type="boolean">
  `true` se a reação foi enviada para um canal/newsletter.
</ResponseField>

<Note>
  O envelope do webhook (`packageId`, `channelId`, `correlationId`, `timestamp`, `providerMetadata`) é comum a todos os tipos. Veja o formato completo em [Recebendo Eventos](/recebendo-eventos).
</Note>
