English
Notify
Sends a message to a Slack, Teams or generic webhook. The shortcut for "tell the team".
Posts a short message to a Slack channel, a Microsoft Teams channel or any endpoint that accepts JSON. It is the shortcut for "tell the team": you write a title and a message, and the node builds the payload each destination expects and sets the Content-Type. For anything else — another method, custom headers, authentication, files — use HTTP request.
The webhook URL works like a password: anyone who has it can post. It is never written to the step data, the step summary or the logs, and it cannot be computed from an expression.
At a glance
- Type:
notify.send· version 1 - Category: Actions
- Kind: Step — one stage of a run
- Effect: Writes outside (
external_write) — writes outside Mankomail; described instead of performed during a test run - Needs a carrier email: No
- Connection: None
- Inputs:
main - Outputs:
main
Parameters
target
Destination
- Type: One choice (
options) - Required: Yes
- Default:
slack - Options:
slack— Slack: A Slack incoming webhook URL. The message lands in the channel picked when the webhook was created.teams— Microsoft Teams: A Teams connector URL. The message is posted as a simple card.generic— Generic webhook: A{ title, message, execution }JSON payload to any endpoint.
webhookUrl
Webhook URL — The URL given by Slack, Teams or your tool. It is as good as a password: it appears neither in the step data nor in the logs.
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 2000 characters at most
- Example:
https://hooks.slack.com/services/… - Expressions:
{{ }}not accepted
title
Title — Optional. The first line, highlighted. Accepts {{ }} expressions.
- Type: Text (
string) - Required: No
- Default:
""(empty) - 200 characters at most
- Example:
New request from {{ email.from.name }} - Expressions:
{{ }}accepted
message
Message — The body of the notification. Accepts {{ }} expressions — name the subject, the sender, what the AI understood.
- Type: Long text (
text) - Required: Yes
- Default:
""(empty) - 4000 characters at most
- Example:
{{ email.from.email }}: {{ email.subject }} - Expressions:
{{ }}accepted
Outputs
main— Taken once the webhook has accepted the message (status below 400).
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.<step>.target }}—string. The destination used: slack, teams or generic.{{ data.<step>.status }}—number. The HTTP status returned by the webhook.{{ data.<step>.ok }}—boolean. true when the status is below 400 (always true when the step succeeds).{{ data.<step>.simulated }}—boolean. true in a test run: nothing was posted.{{ data.<step>.hasTitle }}—boolean. true when a title was sent.{{ data.<step>.messageChars }}—number. The length of the message sent, in characters.{{ data.<step>.summary }}—string. A one-line summary, for exampleSlack: notification sent (HTTP 200).
Example
A support workflow warns the #support channel when the AI marks a request as urgent.
text
target slack
webhookUrl https://hooks.slack.com/services/…
title Urgent request from {{ email.from.name }}
message {{ email.from.email }}: {{ email.subject }}The message lands in the channel picked when the Slack incoming webhook was created, and the step summary reads Slack: notification sent (HTTP 200).
Payload sent to each destination
The node always sends a POST with Content-Type: application/json. Title and message are trimmed first.
Slack — the title becomes a first line in bold:
json
{ "text": "*New request from Ada*\nada@example.com: Invoice 4812" }Without a title, text is the message alone.
Microsoft Teams — a minimal MessageCard:
json
{
"@type": "MessageCard",
"@context": "https://schema.org/extensions",
"summary": "New request from Ada",
"title": "New request from Ada",
"text": "ada@example.com: Invoice 4812"
}Without a title, title is left out and summary is the first line of the message (cut at 200 characters).
Generic webhook — the message plus identifiers of the run, so the receiving system can trace it back:
json
{
"title": "New request from Ada",
"message": "ada@example.com: Invoice 4812",
"execution": { "id": "<execution id>", "workflowId": "<workflow id>" }
}Without a title, title is left out. Only identifiers are sent, never email content beyond what you wrote in the message.
Tips
- Empty message. If the message is empty once expressions are resolved, the step fails with
node_nothing_to_dorather than posting a blank notification. An empty webhook URL fails withnode_invalid_param. - Errors. A status of 400 or more always fails the step with
http_error_status. 429 and 5xx are retried automatically; other 4xx (a revoked Slack webhook answers 404) are final. Network errors and timeouts are retried. - Duplicates on retry. Incoming webhooks have no idempotency key: a retry after an incident can post the same message twice.
- Limits. Title up to 200 characters, message up to 4,000. The webhook has 10 seconds to answer.
- Allowed addresses. The webhook URL goes through the same guard as HTTP request:
httporhttpson ports 80 and 443 only, no private or internal addresses. - Test runs. Nothing is posted. The step succeeds with status 200,
simulated: trueand the summarySlack: would have sent the notification.The simulated-effect line of the run detail describes the request it would have sent, target URL included. See Test runs.