Skip to main content

Workflows

Workflows let you react to events — an inbound call, a new booking, a missed call — and take action across conversations and over time. You drag nodes onto a canvas, connect them, pick a trigger, and the workflow runs automatically every time that trigger fires. No code, no servers, no scheduler to babysit.

This is where you handle "what happens before someone reaches the assistant" (call routing, time-of-day logic) and "what happens after the conversation" (reminders 24 hours before a booking, missed-call follow-ups, Slack pings on a qualified lead).

Triggers

A workflow is bound to one trigger. The trigger decides when the workflow fires.

TriggerFires when
inbound_callA new phone call hits a phone widget — runs before the assistant picks up, so it can route the call elsewhere.
inbound_chatA new chat session starts on a chat widget.
booking_createdAn appointment was just booked (by the assistant, a tool, or a workflow step).
booking_missedA scheduled appointment was missed.
manualYou fire the workflow manually from the dashboard or the API — useful for testing.

If two workflows match an inbound call, the one with the lower priority number wins.

The 11 node types

Drag any of these from the palette, click to configure, and connect with edges.

NodeWhat it does
StartEvery workflow begins here.
EndStops the run.
Set attributeStores a value in the run's working memory for later steps to use.
If timeBranches on time of day, day of week, timezone, and holidays. Outputs yes / no.
Forward callForwards the inbound call to a phone number you supply.
Wait secondsPauses the run for N seconds before continuing.
Wait until event offsetPauses until a chosen time on the trigger payload, plus or minus an offset. Set offset to -86400 for "24 hours before the booking".
Send SMSSends an SMS via your connected Twilio account, with template variables.
Place callPlaces an outbound call from a phone widget you own.
Book pool slotBooks an appointment on a Calendar Pool.
Call webhookSends a POST / PUT / GET request to any URL. Use it to ping Slack, write to your CRM, or trigger anything in Zapier / Make.

Each runs to completion in milliseconds except the Wait nodes — those suspend the workflow and resume it later (resolution: about one minute). A single run is capped at 200 steps, which protects you from accidental loops.

Template variables

Send SMS, Place call, Book pool slot, and Call webhook all support {{key}} substitution. Values come from the trigger payload (e.g. the booking that fired the workflow) and any attributes you set with Set attribute earlier in the run. Missing keys render as empty strings.

Hi {{customer_first_name}}, your appointment at {{location_name}}
is on {{appointment_date}} at {{appointment_time}}. Reply YES to confirm.

Four business use cases

Dental clinic — 24-hour reminder. A workflow listens for booking_created. The first node is Wait until event offset with offset -86400 seconds — it suspends until 24 hours before the appointment time. The second node sends an SMS through Twilio with the patient's name, date, and time. Outcome: no-show rate dropped from 18% to 6% in the first month.

Real estate brokerage — after-hours call routing. A workflow on inbound_call runs an If-time check against the brokerage's business hours in Pacific time, Monday through Friday. In hours it ends without changing routing — the assistant picks up. Out of hours, a Forward call node sends the caller to the on-call agent's mobile. Outcome: every inbound lead reaches a human, day or night, and the brokerage cancelled its $400/month answering service.

E-commerce — missed-call recovery. A workflow on booking_missed waits 5 minutes (Wait seconds), then sends an SMS apologising for the missed contact with a self-service rebooking link. If the customer doesn't rebook in 24 hours, a Call webhook node pushes them into the team's HubSpot follow-up list. Outcome: 22% of missed appointments self-recover.

Fintech — qualified-lead Slack ping. A workflow on booking_created for the demo Calendar Pool calls a Slack webhook with the lead's company, deal size, and the AE who got assigned. The Slack message includes a "Take it" button that the AE clicks to confirm. Outcome: AEs see their assignments instantly; pipeline reviews stay in one channel.

Example: 24-hour reminder workflow

{
"trigger": "booking_created",
"nodes": [
{ "id": "start", "type": "start" },
{
"id": "wait_24h",
"type": "wait_until_event_offset",
"data": { "event_field": "appointment_datetime", "offset_seconds": -86400 }
},
{
"id": "send_reminder",
"type": "send_sms",
"data": {
"to": "{{customer_phone}}",
"message": "Hi {{customer_first_name}}, reminder: your appointment is on {{appointment_date}} at {{appointment_time}}. Reply YES to confirm."
}
},
{ "id": "end", "type": "end" }
],
"edges": [
{ "source": "start", "target": "wait_24h" },
{ "source": "wait_24h", "target": "send_reminder" },
{ "source": "send_reminder", "target": "end" }
]
}

Building one in the dashboard

  1. Open Automation → Workflows → New workflow.
  2. Pick a trigger (or a starter template — there are presets for after-hours routing, booking reminders, and Slack pings).
  3. Drag nodes onto the canvas. Click each to set its configuration in the right-hand panel.
  4. Connect them with edges. For If-time nodes, drag two edges and label them yes / no.
  5. Save. The workflow is live immediately.

Monitoring runs

The Runs tab on each workflow lists every execution with its status (running, waiting, done, failed, cancelled). Click a run to see every step's input, output, and timing — useful when a reminder didn't send or a routing decision went the wrong way.

Limits and good practice

  • A single run is capped at 200 steps to protect against loops.
  • Wait nodes resolve at roughly one-minute resolution. Don't rely on a Wait seconds of 5 to fire at the exact second.
  • Failed steps don't auto-retry. For critical webhooks, point them at a queue (Zapier, Make, your own buffer) instead of your production system.

Where to next