n8n is the operator-editable visual studio for around-the-brain workflows — post-booking confirmations, lead-nurture cadences, weekly QA digests. The synchronous AI brain (router → sub-agent → tools) runs in-code; n8n handles the asynchronous, cross-conversation, operator-editable layer.Documentation Index
Fetch the complete documentation index at: https://docs.vorel.ai/llms.txt
Use this file to discover all available pages before exploring further.
n8n service status: not yet deployed on Railway. The template files ship in the repo
(
handoff/n8n-workflows/*.template.json) and the operator-side discoverability page lists
them, but n8n itself is not running yet. Deployment runbook:
handoff/docs/runbooks/n8n-setup.md (~30 min). Once deployed, per-tenant templates are
imported during onboarding.The 3 v1 templates
Post-booking confirmation
Trigger: Vorel webhook onbooking.created.
What it does: When the agent books an appointment, fan out — Slack notify the assigned user,
push to the tenant’s CRM, schedule a 24-hour-before reminder via Vorel’s outbound conversation
send. Appointment data comes from the webhook payload — no extra GET needed.
Vorel API surface:
POST /v1/crm/create-record(create the CRM record)POST /v1/conversations/:id/send(send the 24h-before reminder)
handoff/n8n-workflows/post-booking-confirmation.template.json.
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?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)
handoff/n8n-workflows/lead-nurture-3-day.template.json.
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)
handoff/n8n-workflows/weekly-qa-rollup.template.json.
Validity guarantee
Every shipped template’shttpRequest URLs are CI-validated against the live OpenAPI spec —
the test (apps/web/src/app/admin/automation/templates-validity.test.ts) cross-references each
URL against lib/openapi-spec.ts 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 on Railway, the operator runs through this on each new tenant:Stand up n8n on Railway
Per
handoff/docs/runbooks/n8n-setup.md. n8n runs as a 5th Railway service alongside web,
workers, Postgres, and Redis. Provisioning cost added: ~$5/month idle.Cloudflare Access in front of n8n
Configure Cloudflare Access on the n8n custom domain 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:
read
Import the template files
Each
.template.json file in handoff/n8n-workflows/ 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 (1–4 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 Cloudflare Access.
- 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