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

# Contact replied trigger

> Trigger a workflow when a contact sends an inbound message via SMS, WhatsApp, Email, Instagram, Messenger, or voice. Automate follow-up actions on replies.

Fires when a contact sends a message through any connected messaging channel. Use this to react to inbound SMS, WhatsApp, Email, Instagram DMs, Messenger messages, or voice transcripts.

## When it fires

The trigger fires immediately when a contact sends an inbound message through:

* **SMS** — An incoming text message to one of your workspace phone numbers
* **WhatsApp** — An incoming WhatsApp message to a connected number
* **Voice** — A transcribed turn from a contact during a voice call
* **Instagram** — A direct message on your connected Instagram account
* **Messenger** — A message on your connected Facebook Page
* **Email** — An incoming email to one of your agent's inbound email addresses

The trigger does **not** fire when a chat conversation is finalized (use [Conversation Ended](/workflows/triggers/conversation-completed) for that) or for outbound messages sent by your team or AI.

## Configuration

### Filters

| Filter field  | Operators                                                          | Description                                                                                                  |
| ------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| Reply channel | sms, whatsapp, voice, instagram, messenger, email                  | Only fire when the reply comes from a specific channel. Select the channel directly — no value field needed. |
| Message       | equals, not equals, contains, not contains, is empty, is not empty | Match against the message content. Comparisons are case-insensitive.                                         |

All filters use AND logic.

### Examples

**Only SMS replies:**

* Filter: Reply channel → sms

**Instagram messages containing "pricing":**

* Filter: Reply channel → instagram
* Filter: Message → contains → `pricing`

**Any reply with content (not empty):**

* Filter: Message → is not empty

**Any reply from any channel:**

* No filters. Leave it empty.

## Data available

| Variable                    | Description                       | Example               |
| --------------------------- | --------------------------------- | --------------------- |
| `{{contactId}}`             | The contact's ID                  | `a1b2c3d4-...`        |
| `{{firstName}}`             | Contact's first name              | `John`                |
| `{{lastName}}`              | Contact's last name               | `Doe`                 |
| `{{phone}}`                 | Contact's phone number            | `+14155551234`        |
| `{{email}}`                 | Contact's email                   | `john@example.com`    |
| `{{trigger.reply.message}}` | The message text the contact sent | `Yes, I'm interested` |
| `{{trigger.reply.channel}}` | Which channel the reply came from | `sms`                 |

## Deduplication

Uses the contact ID + conversation ID as the dedup key. Default window: 1 minute. If a contact sends multiple messages quickly in the same conversation, only the first one triggers the workflow.

## Use case examples

### Notify sales on any SMS reply

Every inbound SMS gets posted to Slack so the team can follow up.

1. **Trigger:** Contact replied → Reply channel: sms
2. **Action:** [Slack message](/workflows/actions/slack-message) — #sales channel
   * Message: *"SMS from `{{firstName}}` `{{lastName}}` (`{{phone}}`): `{{trigger.reply.message}}`"*

### Auto-tag engaged contacts

When a contact replies on any channel, mark them as engaged.

1. **Trigger:** Contact replied (no filters)
2. **Action:** [Update contact](/workflows/actions/update-contact) — Add "engaged" tag

### Route by channel

Different channels get different handling.

1. **Trigger:** Contact replied (no filters)
2. **Action:** [Condition](/workflows/actions/condition)
   * **Path: SMS** — `{{trigger.reply.channel}}` equals `sms` → [Slack message](/workflows/actions/slack-message) to #sms-replies
   * **Path: Instagram** — `{{trigger.reply.channel}}` equals `instagram` → [Slack message](/workflows/actions/slack-message) to #social
   * **Default** → [Slack message](/workflows/actions/slack-message) to #general

### Re-engage after reply

When a contact replies, schedule a follow-up call.

1. **Trigger:** Contact replied → any channel
2. **Action:** [Update contact](/workflows/actions/update-contact) — Add "engaged" tag
3. **Action:** [Wait](/workflows/actions/wait) — 10 minutes
4. **Action:** [Voice call](/workflows/actions/voice-call) — Follow-up agent
