Location Phone Setup (Twilio / Retell / Chatwoot)

Brandon Hall

Brandon Hall

Last updated on Jul 3, 2026

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 → SetupZoey 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.