Integration architecture

Five tools, one conversation

A patient calls or opens the chat. Ninety seconds later they have an appointment — and the CRM, the calendar, the spreadsheet and the reminder sequence have all updated themselves. This page explains exactly how, using live numbers from the running system.

Try it yourself →
8Appointments booked
56Integration steps run
18Messages automated
1,102msAvg step time

Three layers, one source of truth

Front doors call the core engine directly, so nothing sits in the middle of a live phone call. The connector layer hangs off the side and does the follow-up work after the patient has hung up. Click any box to see what it actually does.

Front doors

direct API — no middleman, no added latency

Core engine

your server · no subscription

Integrations

one connector manager · swappable
Why availability lives here and not in the CRM. The voice agent and the chatbot read from and write to the same appointment table, so they cannot double-book — the database rejects the second write outright. If the calendar lived inside GoHighLevel or HubSpot instead, sync lag would eventually put two patients in one slot.

What happens after the patient hangs up

These rules are live in the system right now. Each one produces a message in the outbox at the right moment — no queue workers, no third-party automation subscription.

RuleFiresChannelMessageStatus
Reminder — 24 hours before 24 hours before Sms Reminder: {patient_name}, you see {doctor_name} tomorrow at {time}. Reply C to confirm or R to reschedule. Active
Second reminder — 4 hours before 4 hours before Voice Courtesy call: {patient_name} has not confirmed their {time} appointment with {doctor_name}. Active
Email reminder — 3 hours before 3 hours before Email Reminder: {patient_name}, your appointment with {doctor_name} ({department_name}) is at {time} today, {date}. See you soon! Active
Booking confirmation immediately Sms Hi {patient_name}, your appointment with {doctor_name} ({department_name}) is confirmed for {date} at {time}. Reply R to reschedule. Active
Urgent triage alert to staff immediately Staff_alert URGENT: {patient_name} booked {doctor_name} at {time} on {date}. Flagged from the call: {flag}. Active
No-show recovery 1 hour after Sms We missed you today, {patient_name}. Reply R and we will find you another time with {doctor_name}. Active
Review request 2 hours after Sms Thanks for visiting us, {patient_name}. How was your appointment with {doctor_name}? Reply 1-5. Active

Where your tools plug in

HubSpot Live
Access token
configured
Portal ID
not set
Events
3
Last activity 1 week ago
Google Sheets Live
Google Sheet URL
configured
Service account
not set
Spreadsheet ID
not set
Events
13
Last activity 1 week ago
Zapier Ready
Webhook URL
not set
Trigger email
not set
Events
3
Last activity 1 week ago
GoHighLevel Ready
API key
not set
Location ID
not set
Calendar ID
not set
Events
19
Last activity 1 week ago
n8n Ready
Webhook URL
not set
Signing secret
not set
Events
3
Last activity 1 week ago

Live

Credentials present and actively syncing. The counts on the card are real.

Connected

A third-party tool subscribes to our events and receives them. We hold none of its credentials.

Ready

Built and tested against the vendor's live API, waiting on an account. Adding a key moves it to Live — no code change, no deployment.

On n8n, Zapier and Make. The webhook dispatcher sends a plain signed POST and accepts a plain callback, so it is not specific to any one of them — the same subscription serves all three, plus Power Automate or anything else you control. The correlation id travels out and back, which is how a journey crossing three tools still reads as one story in the activity feed.

Watch it run live →