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

# Reaction Component

> React with an emoji to the user's message instead of sending a new one

## Overview

The **Reaction** component lets your agent react with a single emoji to the user message it's replying to — the same tap-and-hold reaction a person would leave, instead of (or as well as) a text reply.

<Warning>
  **Renders no message content.** Reaction doesn't produce a bubble in the chat — it attaches an emoji to the message it's reacting to. A reply that's *only* a reaction block sends no text at all.
</Warning>

## Format

```
::: reaction
emoji=👍
:::
```

* `emoji` — a single emoji to react with. One emoji only, and at most one reaction per reply.

<Note>
  The parser is flexible on the separator — it accepts `=` or `:`:

  ```
  emoji=👍
  emoji: 👍
  ```
</Note>

## Why use it

Reaction can be the agent's **entire response** — that's the point. It's ideal for acknowledging or concluding a conversation without sending another message that invites a reply. If the user says "thanks, that's all I needed," reacting 👍 closes the loop; sending "You're welcome!" as text just prompts another reply.

```
::: reaction
emoji=👍
:::
```

## Platform support

Reaction only works on channels that support native message reactions. Elsewhere the block is ignored — nothing is sent or rendered.

| Platform                                | Support                                                                                                                   |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| WhatsApp                                | Full support                                                                                                              |
| Instagram                               | Full support                                                                                                              |
| Facebook Messenger                      | Fixed reaction set only: like, love, haha, wow, sad, angry, dislike, smile. Only emoji that map to one of these are sent. |
| Slack                                   | Common emoji only, mapped to Slack reaction names. Requires the Slack app to have the `reactions:write` bot scope.        |
| iMessage                                | Mapped to the closest tapback: love, like, dislike, laugh, emphasize, or question.                                        |
| Web chat (WebChat, LuaPop, Lua Desktop) | Rendered as an emoji badge on the user's message. On older clients the block is stripped and nothing is rendered.         |
| Email, SMS, Teams, and other channels   | Ignored — the block is stripped and nothing is sent or rendered.                                                          |

<Warning>
  **Slack requires `reactions:write`.** Without this bot scope, Slack reactions silently fail to send. See [Required bot scopes](/channels/slack#required-bot-scopes).
</Warning>

## Tell your agent to use it

Components are never used automatically — instruct the agent in its **persona** or a **skill context**:

```yaml theme={null}
persona: |
  You are a support assistant for Acme.

  When the user says goodbye or indicates they're done, don't send
  another message — just react to their message instead:

  ::: reaction
  emoji=👍
  :::
```

## Best practices

<AccordionGroup>
  <Accordion title="Use it to end a conversation cleanly">
    A closing "You're welcome!" or "Glad I could help!" invites another reply. Reacting 👍 to a goodbye acknowledges it without extending the exchange.
  </Accordion>

  <Accordion title="Stick to common emoji">
    Slack maps emoji to a fixed set of reaction names and Messenger maps to a fixed reaction set (like/love/haha/wow/sad/angry/dislike/smile). Uncommon or highly specific emoji may not have a mapping on those channels and won't be sent.
  </Accordion>

  <Accordion title="Don't rely on it as your only channel-specific logic">
    On unsupported channels the block is silently dropped — no error, no fallback text. If the reaction is meaningful to the interaction (not just a nicety), pair it with persona instructions that also work as plain text on channels without reaction support.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Nothing happens">
    Confirm the channel supports reactions (WhatsApp, Instagram, Facebook Messenger, Slack, or iMessage). On any other channel the block is stripped silently — this is expected, not a bug.
  </Accordion>

  <Accordion title="Reaction not appearing on Slack">
    Check that the Slack app has the `reactions:write` bot scope under **OAuth & Permissions**. See [Required bot scopes](/channels/slack#required-bot-scopes).
  </Accordion>

  <Accordion title="Wrong tapback on iMessage / wrong reaction on Messenger">
    Both channels map your emoji to a fixed set rather than sending it as-is. iMessage maps to the closest tapback (love, like, dislike, laugh, emphasize, question); Messenger maps to like, love, haha, wow, sad, angry, dislike, or smile. If your emoji doesn't map cleanly, pick one closer to those sets.
  </Accordion>

  <Accordion title="Agent never reacts">
    The agent only uses the component if you instruct it in the persona or skill context with the exact format shown above.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Response Formatting" icon="list" href="/formatting/introduction">
    Explore the other components
  </Card>

  <Card title="Slack Channel" icon="slack" iconType="brands" href="/channels/slack">
    Connect Slack and configure bot scopes
  </Card>
</CardGroup>
