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 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:
- The system first tries to send via the connected Slack integration (bot token from OAuth)
- If no Slack integration is connected, it falls back to a configured webhook URL
- 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.
Related pages
- Node Types — delivery node configuration in context
- Workflow Concepts — how delivery fits in the execution flow
- Execution Monitoring — viewing delivery status in the timeline