End-to-end process for taking a new client from signed contract to live voice AI receptionist.
Paste this into a DM or email and wait for all answers before starting.
| Field | Example | Why |
|---|---|---|
| Legal / trading name | Smith & Sons Plumbing Ltd | Firm record + invoices |
| Phone number to use | "Brackstone gives me a new one" OR "forward my existing 0113 xxx" | Binds the Retell agent |
| Opening hours | Mon–Fri 8am–6pm, Sat 9am–2pm, closed Sun | Prompt + out-of-hours routing |
| Transfer number | Owner / manager mobile for emergencies | Retell live-transfer rules |
| Top 3–5 services | Boiler repair, bathroom install, emergency leak | Prompt grounding |
| Booking system in use | Cal.com link / paper diary / ServiceM8 | Integration path |
| Calendar URL (if any) | https://cal.com/smithplumbing/consult | Booking route |
| Login email | owner@smithplumbing.co.uk | Dashboard user |
| Agency ownership | Brackstone (default) or sub-agency | Platform agency ID |
admin or platform_admin role)~/.zshrcThis controls which AI prompt analyses their calls and which columns render on the dashboard. Get it right or you'll be re-onboarding.
| Client type | Vertical | Industry field |
|---|---|---|
| Solicitors / law firm | solicitors | solicitors |
| Plumber, electrician, builder, trades | bookings | other (custom: Plumbing / Trades) |
| Garage, MOT, bodyshop | bookings | automotive |
| Restaurant (table bookings) | bookings | other (custom: Restaurant) |
| Takeaway / delivery | bookings | other (custom: Takeaway) |
| Salon / barber / nails | bookings | other (custom: Salon) |
| Dental / private healthcare | solicitors (interim) | dental |
| Anything else | solicitors (interim) | other + custom fields |
Never write a prompt from scratch. Use the relevant template as a base:
| Vertical | Starting prompt |
|---|---|
| Solicitors | wikis/domains/voice-ai/pages/prompts/family-immigration-solicitors.md or personal-injury-solicitors.md |
| Plumber / trades | wikis/domains/voice-ai/pages/prompts/bathroom-kitchen-extension.md |
| Garage / MOT | wikis/domains/voice-ai/pages/prompts/mot-garage-bodyshop.md |
| Restaurant / takeaway | wikis/domains/voice-ai/pages/prompts/takeaways-restaurants.md |
| Salon | wikis/domains/voice-ai/pages/prompts/barbers-salons-nails.md |
| Dental | wikis/domains/voice-ai/pages/prompts/private-dentists.md |
Every template has {{variables}} at the top. Fill with the client's answers from §1:
{{business_name}} — trading name{{agent_name}} — receptionist persona (default: Sophie){{opening_hours}} — from intake form{{escalation_number}} — manager or owner mobile (NOT a client-supplied number mid-call){{booking_url}} / {{menu_url}} / {{price_list_url}} — where applicable{{delivery_radius}}, {{minimum_order}}, etc.)/voice-ai-demo to pick a tone-matched voice.Before connecting to the dashboard, hit the Retell Test button and run three calls covering the client's top intents. The agent should:
/admin/projects.| Field | What to enter |
|---|---|
| Firm name | Client's trading name |
| Slug | Lowercase, dashes, no spaces (e.g. smith-plumbing-leeds) — used in URLs |
| Platform agency | Brackstone (default) unless reselling |
| Contact name / email / phone | From intake form |
| Industry | From the table in §2 |
| Analysis vertical | From the table in §2 — this is the new dropdown |
| Custom industry fields | JSON block only if Industry = other |
Click Create. You're redirected to the project detail page. Note the firm_id in the URL — you'll need it for webhooks and Stripe.
Paste a JSON block like:
{
"label": "Plumbing",
"fields": [
{ "label": "Job Type", "type": "text" },
{ "label": "Postcode", "type": "text" },
{ "label": "Emergency", "type": "select", "options": ["Yes", "No"] }
]
}
Keep it to 3–5 fields. More than that and the dashboard table gets unreadable.
call_ended and call_analyzedClick Send test webhook in Retell. Within 10 seconds, a test row should appear at /calls for this project. If it doesn't:
webhook-retell signature mismatch or firm not found.| Option A | Option B | |
|---|---|---|
| Speed | 5 min | Depends on client's telco |
| Client control | Lower (they use our number) | Higher (their number) |
| Risk | Client has to update marketing | Forwarding can silently break |
| Default | Trades, takeaways, new businesses | Established firms with printed numbers |
/admin/billing → Attach subscription to firm.Trial expiry: automated email + dashboard lockout. Document the trial end date in your CRM.
Do not hand over until all of these pass.
Call the number yourself and run three scenarios from the client's vertical:
| Vertical | Scenario 1 | Scenario 2 | Scenario 3 |
|---|---|---|---|
| Solicitors | Family law new enquiry | Court hearing urgency-5 | FAQ about fees |
| Plumber | Emergency leak, kids in house | Routine boiler service quote | Out-of-area caller |
| Garage | MOT booking with reg | Breakdown call | Service quote enquiry |
| Restaurant | Booking party of 4 with allergy | Large-group enquiry (10+) | Menu question |
| Takeaway | Standard order + allergy | Delivery outside radius | Amend previous order |
| Salon | New booking with stylist request | Rebooking regular client | Price query |
ai_analysis_status reaches done within 2 minutesai_category for the scenarioSend the client:
/login.Watch the live calls data. Expect to refine, not to be done.
Daily for the first week, weekly after.
| Symptom | First place to look |
|---|---|
| Calls not appearing on dashboard | Retell webhook URL / signing secret mismatch. Check Retell agent settings, then Railway logs for signature mismatch. |
ai_analysis_status stuck on pending | AI worker not running or Anthropic API key expired. Check Railway logs for [ai-worker] tick error. |
| Booking-details column blank for bookings firm | firm.vertical is not bookings. Check via /admin/projects edit; the dropdown was introduced in PR #41 — older firms may still be on the fallback. |
| Wrong vertical prompt used | Same as above — firm.vertical takes precedence, falls back to firm.industry if unset. |
| Allergies not captured verbatim | Restaurant/takeaway prompt has been edited and dropped the verbatim rule. Restore from the wiki template. |
| Client says AI sounds robotic | Wrong voice picked, or first-message too long. Keep first message under 15 words and check voice tone matches the business. |
| Calls transferring to random numbers | Prompt-injection — check voice-agent-safety-jailbreak-resistance guardrails are still in the prompt. |
/admin/projects (create), /calls (per-firm call log), /queue (callback queue), /admin/billing.lib/ai-worker.js, lib/verticals/*.js, routes/admin-onboarding.js, views/calls.ejs.wikis/domains/voice-ai/pages/prompts/.wikis/domains/voice-ai/pages/ (e.g. uk-trades-plumbers-electricians.md).wikis/domains/voice-ai/pages/voice-ai-pricing-models.md.