## Before you start

This is the technical companion to step 6 of **Location Onboarding** — the actual phone wiring for a location. It spans three tools: **Twilio** (the phone numbers), **Retell** (where Zoey runs), and **Chatwoot** (where the team answers the transfers). You'll need access to all three.

One shared **Zoey** agent and one shared Twilio trunk already serve every location — you're only adding this location's numbers, not building anything new.

**Twilio, Retell, and Chatwoot logins live in Dashlane** — we don't store them in GroomingOps.

## 1. Buy two numbers in Twilio

Buy two local numbers for the location:

- **Zoey's line** — the number callers reach Zoey on.
- **The transfer line** — the number the team answers in Chatwoot when Zoey hands a caller over.

Only Zoey's line goes on the trunk (next). The transfer line is wired to Chatwoot instead.

## 2. Connect Zoey's number (Twilio → Retell)

1. In Twilio, add Zoey's number to the existing **groomingops-retell** SIP trunk (Trunk → Numbers → add). **Don't create a new trunk** — every location rides this one.
2. In Retell → Phone Numbers → **Connect via SIP trunking**: termination URI **groomingops-retell.pstn.twilio.com**, the trunk's SIP username and password (in Dashlane), Outbound Transport TCP. Set the inbound agent to the shared **Zoey** agent.
3. Set the number's **inbound webhook** to the same `/api/voice/inbound?token=…` URL every location uses — it figures out which location the call is for from the dialed number. Copy it from an existing number, or ask Brandon.
4. Set the **allowed inbound countries** in Retell so calls aren't rejected.

## 3. Connect the transfer number (Chatwoot Voice)

In Chatwoot, add the transfer number as a **Voice channel**, using the Twilio **Account SID and Auth Token** (in Dashlane). That's what makes the transfer ring in Chatwoot for whoever's covering.

**Do not put this number on the groomingops-retell trunk.** That trunk routes to Zoey, so a transfer would loop right back into her — it goes to Chatwoot, not the trunk.

## 4. Finish in the platform

1. Open the location → **Setup** → **Zoey setup**. Enter **Zoey's number** and the **human transfer number**.
2. Set the **Chatwoot inbox** ID: in Chatwoot → Settings → Inboxes, open this location's voice inbox — the ID is the last number in the URL. This makes the caller's pets, quote, and reason pop on the transferred call.
3. Get **every check green**, then flip **Go live**.
4. Turn on **call forwarding** from the location's published number into Zoey's number — that's the switch that puts her live. Then test-call: give a ZIP, ask for a price, then ask for a person and confirm it transfers (have someone in Chatwoot ready).

## Watch out for

- **A busy signal on a test call** means the number isn't connected in Retell yet — it's on the trunk, but Retell doesn't know it. Finish the Retell SIP step.
- **No inbound webhook** — Zoey answers but doesn't know which location she's on, so she can't transfer. (No busy signal — she just can't hand off.)
- **The transfer number must route to Chatwoot, not the trunk** — on the trunk, a transfer loops back into Zoey.
- **No Chatwoot inbox ID** — the transfer still rings a person, just without the caller-context pop.
- **Twilio, Retell, and Chatwoot logins are in Dashlane**, not in GroomingOps.
