Onboard a new pilot (Option A)¶
As of 2026-06-22 this is fully automated via the Apps Script + bridge approval flow. Used for first ~5 pilots. After ~5 pilots, switch to Option B (shared number + Diversion header).
The 6 things you need from the trade¶
Before submitting their row, get these answers on the call:
- Mobile — the phone Polly will catch missed calls from (E.164 or 07-prefixed UK)
- Mobile network — Vodafone / EE / O2 / Three / Sky / Tesco / GiffGaff / iD / Lebara / VOXI (informational; doesn't change MMI now we use the 5s no-answer code)
- Business name — exactly as Polly should say it (this is what callers hear)
- Callback name — the trade's first name as Polly should refer to them
- Email — for the welcome confirmation & quality reports
- Urgent keywords — anything beyond "gas leak / smell of gas / CO" that should trigger their safety carve-out (boiler-pressure-zero, water-coming-through-ceiling, locked-out, no heat in winter, etc.)
End-to-end flow (automated)¶
flowchart LR
A[Katie's call → YES] --> B[Fill Sheet row]
B --> C[🚀 YE Provision → Send for approval]
C --> D[Matt's audit email → tap Approve]
D --> E[Bridge auto-provisions ~60s]
E --> F[Trade welcome SMS sent]
F --> G[Trade taps vCard links → Polly ON]
G --> H[Pilot live]
Step-by-step¶
1. Fill the Call Log row¶
Open the Call Log Sheet, on the active row complete the 7 provisioning columns:
| Column | Value |
|---|---|
| Business name | Exact name (Polly will say it verbatim) |
| Callback name | Trade's first name |
| Mobile | UK mobile, 07… or +44 7… |
| Network | Vodafone / EE / O2 / Three / MVNO name |
| Urgent keywords | Comma-separated extras, blank for default |
| Callback email | Their inbox for the trade's records |
| Status | Leave empty — bridge writes back here |
2. Send the row for approval¶
Click 🚀 YE Provision → Send active row to Matt for approval (Apps Script menu).
You should see a toast "Row queued — Matt has been emailed". The Status column changes to queued.
3. Matt approves¶
Matt receives an email at hello@yourevenings.com titled "Pilot ready for approval:
- Approve → bridge runs the executor:
- Clones the Polly UK base assistant with token substitution (
{{business_name}},[business],[name]) - Buys a UK Twilio mobile number on the reusable regulatory bundle
- Binds the number to the cloned assistant via Vapi
- Sends the trade their welcome SMS (two vCard contact-download links)
- Writes
live+ the YE number back into the Sheet row - Reject → records
rejectedin the Sheet, no resources created.
Typical end-to-end time on approve: ~45 seconds.
4. The trade's setup (their action)¶
The welcome SMS reaches the trade's phone within seconds of approval. They:
- Tap each vCard link → scroll down → Create New Contact → Done (works on iOS & Android — see Forwarding codes for details).
- Open Contacts → tap "Polly ON" → green phone icon → carrier confirms "Call forwarding activated".
- Done — they're live.
5. Verify (do this yourself first time per pilot)¶
From any phone other than the trade's:
- Ring the trade's normal mobile.
- Do not pick up — let it ring out.
- After ~5 seconds the call diverts → Polly answers in her UK voice using the trade's business name.
- Play a fake job (name + postcode + callback + brief issue).
- Hang up. Within ~20 seconds the trade receives an SMS on their mobile from their dedicated YE number with the job details.
If steps 3-5 all work, the pilot is live.
6. Add the pilot to your radar¶
- Bookmark the Pilots dashboard for this trade.
- Set a calendar reminder for Day 6 to send the payment text — see Pricing.
7. Day 6 — payment close¶
See Pricing for the SMS template + Stripe flow.
When something goes wrong¶
| Symptom | Likely cause | Fix |
|---|---|---|
| Approval email never arrives | INTERNAL_REVIEW_EMAIL env or SMTP creds |
Check /api/provision-pilot/queue returned 200; check bridge logs |
Status stuck at queued |
Bridge crashed mid-execute | Check https://bridge.yourevenings.com/api/provision-pilot/status/<id>; rerun approve link (executor is idempotent per step) |
| Trade's friend gets voicemail instead of Polly | They tapped Polly ON but their carrier didn't process the MMI | Trade dials *#61# to check current forward target; should be their YE number. If empty, tap Polly ON again. |
| Polly answers but says wrong business name | Token replacement failed at clone time | Open the clone in Vapi dashboard, fix the system message, save (no need to re-buy the number) |
| No job SMS to trade after Polly hangs up | Vapi webhook failed | Check the Pilots dashboard → the call should appear with sms_failed flag and the error message; usually a Twilio balance or auth issue |
| Trade reports vCard contact won't save | Very rare on modern iOS/Android | Have them manually create a contact called "Polly ON" with phone field **61*<their_YE_number_in_07_form>**5#. Same for "Polly OFF" with ##002# |
What changed vs the original plan (2026-06-21 → 22)¶
- Provisioning is fully automated (was: Matt manually clones in Vapi dashboard + buys Twilio number by hand)
- Forwarding is delivered via vCard contact downloads (was: trade types MMI codes from SMS)
- A single 5-second no-answer rule is used (was: three separate codes for no-answer/unreachable/busy at default ring time, which lost to carrier voicemail)
- End-of-call SMS-to-trade is wired (was: only Telegram to Matt, no SMS to the trade at all)
- All operational logs persist to the bridge (was: Vapi dashboard only, 14-day retention)