n8n is optional and operator-run: it stands up in its own container, separate from the agent
hot path, behind operator-only SSO. It is not currently running at a public URL. The around-the-brain
templates are available as importable workflow exports; the operator builds the real workflow in
the n8n UI per-tenant during onboarding using these as a node-graph reference. Standing up the n8n
service per-tenant follows the operator setup runbook.
The 3 v1 templates
Post-booking confirmation
Trigger: Vorel webhook onbooking.created.
What it does: When the agent books an appointment, the workflow verifies the webhook HMAC,
re-reads the full appointment from the Vorel API, then fans out: Slack notify the assigned user,
push to the tenant’s CRM, schedule a 24-hour-before reminder via Vorel’s outbound conversation
send.
Vorel API surface:
GET /v1/appointments/:id(re-read the full booking from the webhook’sdata.booking_id)POST /v1/crm/create-record(create the CRM record)POST /v1/conversations/:id/send(send the 24h-before reminder)
Lead nurture (3-day)
Trigger: n8n schedule trigger, daily 09:00 cron (0 9 * * *).
What it does: Daily, find leads stale-qualified for 3+ days, send a re-engagement WhatsApp
template via Vorel’s outbound conversation send; escalate to human handoff after 7 days.
Vorel API surface:
GET /v1/leads?status=qualified&stale_for_days=3(the canonical cohort filter)POST /v1/conversations/:id/send(re-engagement message)POST /v1/leads/:id/handoff(escalate after 7 days)PATCH /v1/leads/:id(mark the nurture state)
Weekly QA rollup
Trigger: n8n schedule trigger, Monday 09:00 cron (0 9 * * 1).
What it does: Aggregate QA scores + hallucination flags + handoff reasons from the prior
7 days; format the rollup; email or Slack the digest to the operator.
Vorel API surface:
GET /v1/analytics/weekly-rollup(the single-snapshot endpoint that returns the entire digest payload)
Validity guarantee
Every shipped template’shttpRequest URLs are CI-validated against the live OpenAPI spec: a
CI test cross-references each URL against the spec’s paths and fails the build on any mismatch. A
renamed or removed Vorel endpoint catches at template-test time, not at operator-import time.
How operator deployment works
When n8n is stood up, the operator runs through this on each new tenant:Gate n8n behind operator SSO
Put the n8n domain behind operator SSO so only the operator team (Vorel employees) can reach
it. n8n is not customer-facing.
Issue a per-tenant Vorel API key
From
/(dashboard)/settings/integrations/api-keys (or operator-console issuance for tenants who
haven’t set up their team yet). Pick the minimum scope set the workflows need: - Post-booking
confirmation: crm:write + conversations:write - Lead nurture: read + leads:write +
conversations:write - Weekly QA rollup: readImport the template files
Each workflow template imports cleanly into n8n. Configure credentials (the API key) + the cron
timezone (per the tenant’s local time).
Wire webhook subscriptions
For webhook-triggered workflows (post-booking-confirmation), wire the Vorel-side webhook
subscription at
/admin/tenants/[id]/integrations/webhooks so the right event types POST into
the right n8n webhook URL.Customising templates per tenant
Each template is deliberately small (roughly 4–7 nodes) so operators can fork them per-tenant:- Per-vertical messaging: clinic-pack tenants may want a different post-booking copy than real-estate tenants. Fork the template, swap the message body, keep the API call shape.
- Per-tenant escalation channels: Slack vs. Teams vs. email. Replace the notification node, leave the rest.
- Per-tenant SLAs: change the cron schedule (daily 09:00 → daily 17:00) per the tenant’s business rhythm.
Building custom workflows beyond the v1 set
Tenants can request bespoke workflows during onboarding. Common patterns:- CRM-side triggers. Subscribe to
lead.qualifiedand pre-populate a downstream system. - VIP routing. Subscribe to
conversation.createdand route VIPs to a specific human channel via the customer’sregular_statuslead attribute. - Cancellation-recovery. Subscribe to
booking.cancelled, wait 1h, send a re-book offer. - Capacity alerts. Cron: count
booking.createdevents in the last hour against a threshold; alert ops when capacity exceeds expected.
/v1/* API. Delivered the same way: operator-imported per-tenant.
Why n8n vs. building it ourselves
We considered three alternatives:- In-app workflow editor: too much surface area for too little payoff at this stage. We’d be reinventing what n8n already does well.
- Pure code (TS workers): fastest for one-off integrations, but not editable per-tenant without a code deploy. Defeats the operator-centric model.
- Zapier / Make: strong consumer brands; weaker self-host story; price model gets ugly at per-tenant volumes.
What’s NOT supported
- Customer-facing workflow editing. n8n is operator-team-only behind operator SSO.
- Vorel-managed scheduling. Crons live in n8n; we don’t run a cron service today.
- Auto-deployment of templates. Operators import per-tenant manually. Templated provisioning is a roadmap item if customer count outgrows the manual flow.
Related docs
- Automation: the in-code vs. n8n split
- API Reference: the surface n8n consumes
- Webhooks: how
booking.createdetc. fire - Authentication: per-tenant API key issuance