Delivery Methods

Delivery nodes send workflow results to one or more destinations. A workflow can include multiple delivery nodes, and each delivery node uses one of four methods.

📧
Email
Send results to one or more email addresses with subject templates
💬
Slack
Post to a Slack channel (3,000 char limit)
🔗
Webhook
POST JSON payload to an external URL
📄
Document Store
Save results to the knowledge base as a searchable document

Email

Email delivery sends the workflow result to one or more recipients.

Configuration:

Field Required Description
To Yes Recipient email address
CC No Carbon copy address
Subject No Subject line (defaults to "Workflow Result: {workflow name}")

The email body contains the full text output from the most recent action node. If the workflow produced a file attachment (PDF, DOCX), a note about the attachment is appended to the body.

Subject lines support Jinja2 templates for dynamic content — for example, Weekly Report: {{ trigger.payload.date }}.

Slack

Slack delivery posts the workflow result to a specified channel.

Configuration:

Field Required Description
Channel Yes Slack channel ID or name

How it works:

  1. The system first tries to send via the connected Slack integration (bot token from OAuth)
  2. If no Slack integration is connected, it falls back to a configured webhook URL
  3. Messages longer than 3,000 characters are automatically truncated with a note indicating truncation

The message is formatted with the workflow name as a bold header, followed by the result content.

Webhook

Webhook delivery POSTs a JSON payload to an external URL.

Configuration:

Field Required Description
URL Yes The endpoint to POST to
Headers No Custom HTTP headers (e.g., authorization tokens)

Payload format:

{
  "workflow_id": "abc-123",
  "workflow_name": "Daily Market Report",
  "result": "The full text output...",
  "has_file": false
}

The request has a 30-second timeout. If the endpoint returns a non-2xx status code, the delivery is marked as failed.

Document store

Document store delivery saves the workflow result as a document in the knowledge base, making it searchable in future conversations.

Configuration:

Field Required Description
Collection ID Yes Which document collection to save into
Filename No Custom filename (auto-generated from workflow name and timestamp if not set)

The document is saved as a markdown file by default. Once saved, it goes through the standard document processing pipeline — chunking, embedding, and synopsis generation — making the content available for semantic search.

Using templates in delivery

Delivery content (email subjects, webhook payloads) can use Jinja2 templates to include dynamic data from the workflow execution context. The same template syntax used in action node instructions works in delivery configuration:

{{ nodes.research_task.response }}
{{ trigger.payload.report_date }}

Delivery status tracking

Each delivery method reports its status independently. A workflow execution tracks delivery results as a JSON object:

{
  "email": "sent",
  "slack": "sent",
  "webhook": "failed: Connection refused"
}

A delivery can partially succeed — for example, email might succeed while the webhook fails. The execution still completes, but the delivery status reflects which methods succeeded and which failed with their error messages.