Skip to content

Delivering notifications to a channel

A notification lands in the workspace inbox on its own. Getting it to Slack, to a mailbox, to a chat app on somebody’s phone — that is a route, and this page is the recipe for each destination.

There is no list of supported notification channels, and no channel plugin. A route delivers by calling a tool on a connector the workspace already has.

That means the answer to “can it send to X?” is always the same question: is there a connector with a tool that sends to X? If yes, a route can use it today, and nothing in the platform needed to know about X in advance. If no, the answer is to add one — see when your channel is not here.

It also means the destination is only ever as good as the tool. The platform renders your template and makes the call; what happens after that belongs to the connector.

Whatever the destination, you write the same three things under Settings → Notifications:

  1. Match — which notifications this route is for.
  2. Deliver to — a tool, picked from the ones this workspace has. Tool names are <connector>__<tool>, and the picker shows them that way.
  3. Arguments — a JSON object matching that tool’s own input schema, with placeholders for the notification’s fields.
{
"channel": "alerts",
"markdown_text": "*{{title}}*\n{{body}}\n{{inbox.url}}"
}

Install the Slack connector under Settings → Connectors, then connect the Slack account it asks for. Confirm it works — a connector can be installed and list its tools while the account behind it was never connected.

Deliver to the Slack connector’s SLACK_SEND_MESSAGE
Arguments channel, and one of markdown_text or blocks
{
"channel": "alerts",
"markdown_text": "*{{title}}*\n{{body}}\n{{inbox.url}}"
}

Notes worth having before you write it:

  • The channel takes a name or an id, without the #. Use the id (C0ABC12345) for a private channel, or if your Slack is on Enterprise Grid, where name lookup fails. SLACK_LIST_ALL_CHANNELS finds ids.
  • Invite the app to the channel. Slack refuses to post to a channel the app is not in, and the error says so.
  • The message body field is markdown_text, not text. This is exactly the class of mistake the paragraph above warns about.
  • Slack auto-links what looks like a URL or an address, so a title containing an email arrives with it linked. That is Slack, not the platform.

Install the Teams connector and connect the account.

Deliver to the connector’s send-message tool
Arguments the target conversation or channel, and the message body

The shape is the same as Slack’s; only the field names differ. Read them off the tool in the Deliver to picker rather than assuming, then confirm with Send test.

Two connectors send mail — Gmail and Outlook — and either works as a route target. Email suits notifications that need to reach somebody who is not in your chat tool, and it carries more text comfortably than a chat message.

Deliver to the connector’s send-email tool
Arguments recipient, subject, body
{
"recipient": "ops@example.com",
"subject": "{{title}}",
"body": "{{body}}\n\nOpen it: {{inbox.url}}"
}

Install the WhatsApp connector and connect the account.

WhatsApp has rules the other channels do not, and they are the vendor’s, not the platform’s: recipients must have opted in, business-initiated messages outside a 24-hour window have to use a pre-approved template, and each message is priced. A notification route is business-initiated by definition, so plan on templates. Check the connector’s own tool descriptions for how it takes them.

The destination does not have to be a message at all. A route delivers through any tool, so any of these is a legitimate target:

Destination Tool Why
A tracker create-issue on a Jira, Asana or GitHub connector The notification becomes work somebody is assigned
A spreadsheet append-row on a Sheets connector A running log you can pivot
A CRM log-activity on a CRM connector The event lands on the customer record

The arguments are that tool’s, and {{title}} / {{body}} / {{subject}} / {{inbox.url}} are available in all of them.

If nothing installed can reach your destination, the answer is a connector that can — an MCP server exposing a send tool. That is the same door every channel above came through; none of them is special-cased in the platform.

This is deliberate. A platform with a fixed list of channels owes you a new release for every destination; one that delivers through tools grows a channel the day somebody writes a server for it. The cost is that the quality of a channel is the quality of its connector.

See Building apps for writing one.