Missed-call recovery gets the homeowner talking again. That is necessary. It is not sufficient.
The next failure mode is familiar: three texts land while two techs are on jobs, the owner is under a sink in Middletown, and nobody decides who rolls where until the evening debrief. By then the emergency went to a competitor and the soft-booked water heater slipped a week.
This post is about the dispatcher layer — the thin set of rules and automations between "we caught the lead" and "the right truck is moving." It is distinct from missed-call recovery. Capture is not dispatch.
What a human dispatcher actually does
Strip the job title down to decisions:
- Urgency — active leak / no heat / no water vs. quote request vs. maintenance.
- Fit — plumbing only, or gas/HVAC ticket that needs a different license.
- Zone — who is closest without wrecking the rest of the day's board.
- Capacity — who has a gap, who is already in overtime, who has the right parts on the truck.
- Promise — what ETA or window you can say out loud without lying.
- Record — job lands in the board/CRM with address, issue, and next step.
If your "dispatcher" is the owner answering texts between solder joints, you do not have a dispatcher. You have a bottleneck wearing a tool belt.
The minimum viable AI dispatcher
You do not need a sci-fi agent running the company. You need structured intake + rules + a human confirm on edge cases.
1. Classify on the way in
Every new lead (phone transcript, SMS, web form, chat) gets tags:
CRITICAL— active water damage, sewage backup, CO/gas smell (gas = licensed protocol, not a casual text)SAME_DAY— no hot water, toilet-down in a single-bath house, business-closed riskSCHEDULE— replace quotes, remodel rough-ins, non-urgent leaksPARTS_QUOTE— needs estimate onlySPAM_VENDOR— drop
Missed-Call Recovery DFY already classifies urgency from real transcripts before owner alert (store, $299). Reuse that tag; do not re-invent a second brain.
2. Zone board, not vibes
Maintain a simple zone map for your service area — even a spreadsheet:
| Zone | Towns (examples) | Default tech / truck |
|---|---|---|
| Shore core | Asbury Park, Neptune, Ocean Grove, Bradley Beach, Belmar | Truck A |
| North corridor | Red Bank, Shrewsbury, Eatontown, Long Branch | Truck B |
| West / Rt 9 | Freehold, Howell, western townships | Truck C |
Automation suggests the default truck from zip or town. A human can override when Truck A is already buried.
3. Capacity signal
Pull next open window from your scheduling tool (Housecall Pro, ServiceTitan, Jobber, Google Calendar — whatever you actually use). The bot should never invent an ETA. It proposes:
- "Earliest CRITICAL window: Tech Maya, ~2:15–3:45p, zone Shore core"
- "SCHEDULE offer: Thursday 8–12"
Owner or lead tech taps Approve / Reassign / Call customer.
4. Customer promise templates
Short, honest SMS after approve:
- CRITICAL: "We can have a plumber to [town] between 2:15 and 3:45 today. Reply YES to lock it."
- SCHEDULE: "Next open rough-in window is Thursday 8–12 in your area. Want it?"
No "we will be there in 20 minutes" unless a human typed that.
Where this sits in the stack
Missed call / web lead
↓
Capture + urgency classify → owner alert
↓
Dispatcher rules (zone + capacity + license fit)
↓
Human approve (first 30 days: always)
↓
Board update + customer confirm SMS
↓
On job: notes → Quote-to-Invoice ($199 DFY) when priced work starts
↓
Permit path when change-out needs UCC packet (PermitPilot pilot)
Internal links that already exist on this site:
- Missed call problem + recovery
- HVAC estimate follow-up (sibling vertical)
- Permit prep hours → minutes
- Chatbot buy/don't-buy guide — dispatch is not a website widget
What not to automate
- Gas leak / CO / structural emergency protocols — call the right emergency line; your SMS bot is not the fire department.
- Price promises on complex repipes — route to estimate.
- Anything that changes truck route without a human when you only have two techs and both are mid-job.
AI dispatch fails when shops skip the approve step in week one. Keep the human in the loop until the classify accuracy is boring.
Cost framing (no fantasy ROI)
| Piece | Ballpark |
|---|---|
| Missed-call DFY setup | $299 one-time (store) |
| Quote-to-invoice DFY | $199 one-time (store) |
| SMS/phone API | usually low tens of dollars/month at trades volume |
| Full custom dispatcher on your FSM | scoped project — automation work starts at $2,500 on our services menu |
| Full-time dispatcher hire | market wages + burden (often five figures/year fully loaded) |
Most four-truck shops should not jump to custom software on day one. Wire capture + classify + approve-to-board first. Add richer FSM integration when the rules are stable.
14-day pilot plan
Days 1–3: Export last month of calls and jobs. List your true CRITICAL definitions.
Days 4–7: Turn on missed-call text-back with human approve. Tag every lead.
Days 8–10: Publish the zone table. Assign default trucks.
Days 11–14: Add "suggested next window" from the calendar. Measure: time-to-first-response, % CRITICAL booked same day, owner minutes spent dispatching.
If owner dispatch time does not drop, the rules are wrong — fix the board before buying more software.
Bottom line
An AI plumber dispatcher is not a voice clone that sweet-talks customers while your trucks sit idle. It is urgency tags + zone defaults + capacity reads + human approve.
Capture the call. Then decide the truck. That second sentence is where shops still leak money after they "get a chatbot."
Talk to Peter about wiring dispatch on top of missed-call recovery.