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

# Trigger Nodes

> Entry points that start workflow execution in Tedro.

# Trigger Nodes

Trigger nodes are the entry points of every workflow. They define what event starts the workflow execution. Every workflow must have exactly one trigger node.

***

## trigger.inbound\_message

**Entrypoint for inbound WhatsApp messages.**

This is the primary trigger node used in production workflows. When a customer sends a WhatsApp message to your connected number, this node fires and passes the message data into the workflow.

### Configuration

No configuration required. This node is auto-configured when placed on the canvas.

### Outputs

The trigger node passes the following data to connected nodes:

| Output         | Type   | Description                                                    |
| -------------- | ------ | -------------------------------------------------------------- |
| `message.text` | string | The text content of the inbound message                        |
| `message.type` | string | Message type (text, image, document, etc.)                     |
| `contact`      | object | The sender's contact record (name, phone, tags, custom fields) |
| `conversation` | object | The active conversation context (ID, status, history)          |
| `timestamp`    | string | ISO 8601 timestamp of the inbound message                      |

### Connections

* **Inputs**: None (this is the entry point)
* **Outputs**: Single output handle connecting to the next node in the flow

### Example Use Case

Every customer-facing workflow starts with this node. When a customer sends "Hi, I need help with my order," the trigger captures the message and passes it to an AI Router or AI Respond node for processing.

***

## trigger.manual\_test

**Builder preview testing trigger.**

This node is used exclusively in the workflow builder for testing your workflow without sending real WhatsApp messages. It simulates an inbound message with test data you define.

### Configuration

| Option        | Type   | Required | Description                                             |
| ------------- | ------ | -------- | ------------------------------------------------------- |
| `testMessage` | string | Yes      | The simulated message text to send through the workflow |

### Outputs

Same output shape as `trigger.inbound_message` -- your workflow logic works identically with both trigger types.

| Output         | Type   | Description                          |
| -------------- | ------ | ------------------------------------ |
| `message.text` | string | The test message text you configured |
| `contact`      | object | A mock contact record                |
| `conversation` | object | A mock conversation context          |

### Connections

* **Inputs**: None (this is the entry point)
* **Outputs**: Single output handle connecting to the next node in the flow

### Example Use Case

While building a customer support workflow, use this node to test how your AI Respond node handles different message types (questions, complaints, greetings) without needing to send real WhatsApp messages. Switch to `trigger.inbound_message` before publishing.

<Note>
  The `trigger.manual_test` node is for builder preview only. Published workflows always use `trigger.inbound_message` as their entry point.
</Note>

***

## trigger.broadcast\_reply

**Starts when a contact replies to a broadcast message.**

This trigger fires when a contact sends a reply to a specific broadcast campaign. Use it to build follow-up workflows that handle responses to your outbound campaigns -- for example, processing opt-ins, answering questions about a promotion, or routing interested leads.

### Configuration

| Option        | Type   | Required | Description                                                          |
| ------------- | ------ | -------- | -------------------------------------------------------------------- |
| `broadcastId` | string | Yes      | The ID of the broadcast campaign this trigger listens for replies to |

### Outputs

| Output         | Type   | Description                                                      |
| -------------- | ------ | ---------------------------------------------------------------- |
| `message.text` | string | The text content of the reply message                            |
| `message.type` | string | Message type (text, image, document, etc.)                       |
| `contact`      | object | The replying contact's record (name, phone, tags, custom fields) |
| `conversation` | object | The conversation context                                         |
| `broadcast`    | object | The originating broadcast campaign details (name, ID, sent date) |
| `timestamp`    | string | ISO 8601 timestamp of the reply                                  |

### Connections

* **Inputs**: None (this is the entry point)
* **Outputs**: Single output handle connecting to the next node in the flow

### Example Use Case

You send a promotional broadcast about a new product. Contacts who reply with "interested" are routed through an AI Agent that provides product details and collects their order preferences. Connect this trigger to a `logic.switch` node to branch based on reply content.

<Note>
  Each broadcast reply trigger is linked to a specific campaign. To handle replies from different broadcasts, create separate workflows with their own `trigger.broadcast_reply` nodes.
</Note>

***

## Channel-Specific Triggers

The following triggers restrict workflow execution to messages from a single channel. Use these when your workflow logic is channel-specific -- for example, a workflow that only handles WhatsApp messages differently from other channels.

<Note>
  For workflows that should handle messages from any channel, use `trigger.inbound_message` instead. Channel-specific triggers are useful when you need different automation logic per channel.
</Note>

***

## trigger.whatsapp\_message

**Channel: WhatsApp** -- Starts only when a WhatsApp message arrives.

This trigger fires exclusively for inbound WhatsApp messages. Use it when your workflow contains WhatsApp-specific logic, such as template sending or WhatsApp-specific formatting.

### Configuration

No configuration required. Auto-configured when placed on the canvas.

### Outputs

Same output shape as `trigger.inbound_message`.

| Output         | Type   | Description                                       |
| -------------- | ------ | ------------------------------------------------- |
| `message.text` | string | The text content of the WhatsApp message          |
| `message.type` | string | Message type (text, image, document, audio, etc.) |
| `contact`      | object | The sender's contact record                       |
| `conversation` | object | The active conversation context                   |
| `timestamp`    | string | ISO 8601 timestamp                                |

### Connections

* **Inputs**: None (entry point)
* **Outputs**: Single output handle

***

## trigger.instagram\_message

**Channel: Instagram** -- Starts only when an Instagram DM arrives.

This trigger fires exclusively for inbound Instagram direct messages. Use it for Instagram-specific automation flows.

### Configuration

No configuration required. Auto-configured when placed on the canvas.

### Outputs

| Output         | Type   | Description                             |
| -------------- | ------ | --------------------------------------- |
| `message.text` | string | The text content of the Instagram DM    |
| `message.type` | string | Message type (text, image, video, etc.) |
| `contact`      | object | The sender's contact record             |
| `conversation` | object | The active conversation context         |
| `timestamp`    | string | ISO 8601 timestamp                      |

### Connections

* **Inputs**: None (entry point)
* **Outputs**: Single output handle

<Note>
  Instagram messages have a **1,000 character limit** and do not support rich formatting or buttons. Plan your automation responses accordingly.
</Note>

***

## trigger.messenger\_message

**Channel: Messenger** -- Starts only when a Facebook Messenger message arrives.

This trigger fires exclusively for inbound Messenger messages. Use it for Messenger-specific automation flows.

### Configuration

No configuration required. Auto-configured when placed on the canvas.

### Outputs

| Output         | Type   | Description                               |
| -------------- | ------ | ----------------------------------------- |
| `message.text` | string | The text content of the Messenger message |
| `message.type` | string | Message type (text, image, video, etc.)   |
| `contact`      | object | The sender's contact record               |
| `conversation` | object | The active conversation context           |
| `timestamp`    | string | ISO 8601 timestamp                        |

### Connections

* **Inputs**: None (entry point)
* **Outputs**: Single output handle

***

## trigger.livechat\_message

**Channel: Live Chat** -- Starts when a live chat message arrives from a website visitor.

This trigger fires exclusively for messages from your website's live chat widget. Use it for website-specific automation, such as greeting visitors or qualifying leads from your site.

### Configuration

No configuration required. Auto-configured when placed on the canvas.

### Outputs

| Output         | Type   | Description                                                             |
| -------------- | ------ | ----------------------------------------------------------------------- |
| `message.text` | string | The text content of the live chat message                               |
| `message.type` | string | Message type (text, image, document, etc.)                              |
| `contact`      | object | The visitor's contact record (includes pre-chat form data if collected) |
| `conversation` | object | The active conversation context                                         |
| `timestamp`    | string | ISO 8601 timestamp                                                      |

### Connections

* **Inputs**: None (entry point)
* **Outputs**: Single output handle

<Note>
  Live Chat has no messaging window restrictions. Automated responses can be sent at any time during an active visitor session.
</Note>
