Skip to main content

Send Reply Node

The Send Reply node sends messages through communication channels configured in a Human Communicator. Use it within dispatcher workflows to respond to humans, ask questions, or send notifications.

When to Use

  • Respond to messages - Reply to humans within a dispatcher conversation
  • Ask follow-up questions - Request more information
  • Confirm information - Verify collected data before proceeding
  • Send notifications - Alert humans about workflow events
  • Close conversations - Send final messages before ending
Send Reply is used within Ask a Person workflows. For standalone messages to external apps, use App Action.

Example: Conversation Flow

Use Send Reply to build a multi-step conversation:
├── Human Communicator
│   ├── [Action: Greeting]
│   │   └── Send Reply
│   │       "Hi {{customer_name}}! Thanks for reaching out.
│   │        How can I help you today?"
│   │
│   ├── [Event: Customer responds]
│   │   ├── LLM (understand request)
│   │   ├── Condition (can help automatically?)
│   │   │   ├── Met:
│   │   │   │   └── Send Reply
│   │   │   │       "I can help with that! {{llm_1.response}}"
│   │   │   └── Unmet:
│   │   │       └── Send Reply
│   │   │           "Let me connect you with our team.
│   │   │            Someone will reach out shortly."

Example: Information Collection

Ask for specific information:
├── Send Reply
│   "To process your request, I'll need a few details:

│    1. Your company name
│    2. Project deadline
│    3. Budget range

│    Let's start with your company name - what is it?"

├── [Wait for response]
├── Set Variable (company = response)

├── Send Reply
│   "Got it - {{company}}. When is your deadline?"

├── [Wait for response]
├── Set Variable (deadline = response)

├── Send Reply
│   "And finally, what's your budget range?"

Example: Confirmation Message

Verify collected information:
├── Send Reply
│   "Let me confirm what I have:

│    Company: {{collected.company}}
│    Deadline: {{collected.deadline}}
│    Budget: {{collected.budget}}

│    Is this correct? (Reply 'yes' to confirm or 'no' to make changes)"

├── [Wait for response]
├── Condition (response contains 'yes')
│   ├── Met: Send Reply ("Great! Processing your request...")
│   └── Unmet: Send Reply ("No problem. What would you like to change?")

Adding Buttons

For Slack and web widget, add interactive buttons: Configuration:
{
  "message": "Would you like to proceed?",
  "buttons": [
    {"text": "Yes, continue", "value": "yes", "style": "primary"},
    {"text": "No, cancel", "value": "no", "style": "danger"},
    {"text": "I have questions", "value": "questions"}
  ]
}
When the human clicks a button, the event handle receives the button value.

Formatting Messages

Plain Text

Hello!

Your request has been received.
We'll get back to you within 24 hours.

Reference: #{{reference_id}}

With Variables

Hi {{customer_name}},

Thanks for your order of {{order.items.length}} items.
Total: ${{order.total}}

Estimated delivery: {{order.estimatedDelivery}}

Channel-Specific Formatting

Email supports HTML:
<h2>Order Confirmation</h2>
<p>Your order <strong>#{{order.id}}</strong> has been confirmed.</p>
Slack supports markdown:
*Order Confirmation*
Your order `#{{order.id}}` has been confirmed.
Web Widget supports basic markdown:
## Order Confirmation
Your order **#{{order.id}}** has been confirmed.

Attachments

Include files in your message:
{
  "message": "Here's the report you requested.",
  "attachments": [
    {
      "filename": "report.pdf",
      "content": "{{execute_code_1.files[0]}}",
      "contentType": "application/pdf"
    }
  ]
}

Channel Selection

Auto (Default)

Uses the same channel the human is currently using:
  • If they emailed, reply via email
  • If they’re on Slack, reply on Slack

Force Specific Channel

Sometimes you need to use a specific channel:
{
  "message": "I've sent the detailed report to your email.",
  "channel": "email"
}
Forcing a channel requires the human to have that channel configured. If they haven’t provided an email, forcing email delivery will fail.

Tips

Keep messages concise. Long messages overwhelm users. Break complex information into multiple messages.
End questions clearly. Instead of “What’s your budget?” use “What’s your budget range? (e.g., 10k10k-50k)”
Use buttons when you want specific responses. Free-text works for open questions; buttons work for choices.
Don’t send too many messages in quick succession. Batch information into single messages when possible.

Settings

name
string
default:"Send Reply"
Display name shown on the canvas.
key
string
default:"send_reply_1"
Unique identifier for referencing outputs.
message
string
required
The message content to send. Supports variable interpolation and basic formatting.
channel
string
Which channel to use:
  • auto - Use the same channel the human is using
  • email - Force email delivery
  • slack - Force Slack delivery
  • web_widget - Force web widget delivery
attachments
array
Files to attach to the message.
buttons
array
Interactive buttons for quick responses (supported on Slack and web widget).

Outputs

messageId
string
Unique identifier for the sent message.
deliveryStatus
string
Status of delivery: sent, delivered, failed.
channel
string
Which channel was used.
timestamp
string
When the message was sent.