Communication Nodes

Communication nodes let your workflows send messages to people and systems. Use them to deliver email notifications, post updates to Slack channels, respond to users in real-time chat, or send custom HTTP responses to webhook callers.

All Communication Nodes

Email (SMTP)Action

Send emails via any SMTP server. Supports HTML and plain text bodies, attachments, CC/BCC, reply-to, and custom headers.

SlackAction

Post messages to Slack channels or direct messages. Supports Block Kit formatting, thread replies, and file uploads.

Chat ReplyAction

Send a response back to the user in the active chat session. Used with Chat trigger workflows and AI agent conversations.

Respond to WebhookAction

Send a custom HTTP response to the caller that triggered the workflow via a Webhook trigger. Configure status codes, headers, body, and content types.

Email (SMTP)

The Email node sends messages through an SMTP server. Configure your mail server credentials once and reuse them across workflows.

SettingDescription
ToOne or more recipient email addresses. Supports expressions for dynamic recipients.
FromSender email address and optional display name.
SubjectEmail subject line. Supports expression interpolation.
BodyHTML or plain text content. Use expressions to inject dynamic data.
CC / BCCOptional carbon copy and blind carbon copy recipients.
Reply-ToOptional reply-to address different from the sender.
AttachmentsAttach files from previous node outputs or from the sandboxed file system.
Email configuration example
To: {{ $json.customerEmail }}
From: [email protected]
Subject: Order #{{ $json.orderId }} Confirmed
Body (HTML):
  <h1>Thank you, {{ $json.customerName }}!</h1>
  <p>Your order has been confirmed and will ship within 2 business days.</p>

Bulk email

To send emails to multiple recipients, combine the Email node with a Loop node that iterates over a list of addresses. Each iteration sends one personalized email.

Slack

The Slack node posts messages to channels or users in your Slack workspace. Authenticate with a Slack Bot token stored in credentials.

SettingDescription
ChannelChannel name or ID. Use # prefix for public channels, or a user ID for DMs.
TextMessage content. Supports Slack markdown formatting.
BlocksOptional Block Kit JSON for rich message layouts with buttons, sections, and images.
ThreadOptional thread timestamp to reply within an existing thread.
File UploadUpload files from previous node outputs as Slack file attachments.
Slack message with Block Kit
Channel: #engineering-alerts
Text: Deployment complete
Blocks:
  [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Deployment successful*\nService: {{ $json.service }}\nVersion: {{ $json.version }}"
      }
    }
  ]

Chat Reply

The Chat Reply node sends a response back to the user in an active chat session. It is designed to work with the Chat trigger and AI Agent workflows where a real-time conversation is in progress.

The reply is delivered through NodeLoom's real-time messaging system. The user sees the response instantly in the chat widget or agent chat interface.

SettingDescription
MessageThe text to send back to the user. Supports expressions and Markdown formatting.

Chat context

The Chat Reply node automatically inherits the session context from the Chat trigger. You do not need to manually specify which conversation to reply to.

Respond to Webhook

The Respond to Webhook node sends a custom HTTP response back to the caller that triggered the workflow via a Webhook trigger. Use it to return processed data, confirmation messages, or redirect the caller to another URL.

Parameters

NameTypeDefaultDescription
respondWithstring"json"Response type: "json" (JSON body), "text" (plain text), "binary" (file download), "redirect" (HTTP redirect), or "noContent" (empty 204).
responseCodenumber200HTTP status code for the response (e.g. 200, 201, 400, 404).
responseBodystring | object""Static response body. Supports JSON objects or text strings.
responseBodyFieldstring""Expression referencing a field from upstream node output to use as the response body (e.g. {{ $json.result }}).
responseHeadersobject{}Custom response headers as key-value pairs.
contentTypestring"application/json"Content-Type header: "application/json", "text/plain", "text/html", or "custom".
customContentTypestring""Custom Content-Type value. Only used when contentType is "custom".
redirectUrlstring""URL to redirect the caller to. Only used when respondWith is "redirect".
binaryFieldstring""Field name containing binary data for file download responses. Only used when respondWith is "binary".

Example

Respond to Webhook configuration
// Return processed data as JSON
{
  "respondWith": "json",
  "responseCode": 200,
  "responseBody": {
    "status": "success",
    "data": "{{ $json.processedResult }}",
    "timestamp": "{{ $json.completedAt }}"
  },
  "responseHeaders": {
    "X-Request-Id": "{{ $json.requestId }}",
    "Cache-Control": "no-cache"
  }
}

// Redirect after processing
{
  "respondWith": "redirect",
  "responseCode": 302,
  "redirectUrl": "https://app.example.com/success?id={{ $json.orderId }}"
}

Webhook pairing

The Respond to Webhook node only works when the workflow is triggered by a Webhook trigger. Place it at the end of your workflow to send a response after all processing is complete.