Automations
An automation sends a message to a channel your team already uses when something happens on the platform. It is the answer to "a call finished, tell sales" without standing up a server to receive a webhook.
Automations run after the event, in the background. Nothing is added to the conversation itself, so a slow Slack cannot make a caller wait.
For an agent to look something up or act during a call, you want a tool, not an automation.
Connections
An automation sends to a connection: one configured destination, added under Settings - Integrations.
| Service | What you supply | What an automation can do |
|---|---|---|
| Slack | An incoming webhook URL | Post a message |
| Discord | An incoming webhook URL | Post a message |
| Telegram | A bot token and a chat id | Post a message |
| Webhook | Any URL that accepts a JSON POST | POST a JSON body built from your template |
| Microsoft 365 | Sign in to the mailbox | Send an email from it |
Cal.com, Google Calendar and Microsoft 365's calendar actions are connections too, but only an agent can use them, during a conversation. An automation fires on every matching event, and booking or cancelling a real appointment from a template each time a call ends is refused rather than allowed.
Add one connection per destination and name it after where it goes. A Slack incoming webhook URL is bound to a single channel, so "Sales" and "Support" are two connections, not one.
The generic Webhook connection is also how you reach anything else: point it at a Zapier, Make or n8n hook and the rest of that catalog is available without any further setup here.
Building a rule
A rule is three choices and a message.
- When - any event from the webhook catalog.
session.completedis the usual one; it carries the whole end-of-call report. - Send to - one of your connections.
- The message - written with
{{dotted.paths}}filled in from the event.
New call from {{variables.name}}
Outcome: {{analysis.summary}}
Cost: {{cost.total}}Anything in the event payload can be referenced. For session.completed that
includes session_uuid, workflow_uuid, status, transcript, variables,
analysis, latency and cost. A path that does not exist renders as an empty
string rather than failing, and each message field is truncated so a long
transcript cannot flood a channel. Fields nested inside a webhook's JSON body are not
truncated.
A playable recording link is not part of the event an automation receives. An
automation posts what it renders into a channel or a third-party endpoint, so a
playable link would be a credential forwarded out of your workspace and kept in
whatever received it. Send {{session_uuid}} instead and fetch the recording from
the session with your API key, and do not reference {{recording_url}} in a
template.
Narrowing when it fires
An optional condition, off by default:
- Only one agent - the rule ignores every other agent's calls.
Testing and history
Send test renders your template against your newest finished call, or against a sample event if there is none yet, and really delivers it, so what you verify is the whole path rather than a preview. Conditions are not applied to a test.
Every firing is recorded with its outcome, duration and any error, so a rule that stopped working is visible without reproducing the call that triggered it.
Automations are best effort. One unreachable destination is recorded as a failed run and does not stop the others, and a failure never affects the call itself.
Limits
- Up to 20 automations run per event.
- Each message field is truncated at 4,000 characters.
- The most recent 100 runs are kept per automation.