A plumbing customer is in one of two states. Either water is going somewhere it should not and they are frightened, or they booked you three weeks ago for a bathroom and have mentally moved on. Treating those two people the same way is the most common mistake in trade messaging.
The emergency thread
For an emergency call, the customer's actual question is never 'what will this cost'. It is 'is someone coming, and when'. Every minute without that answer is a minute they spend calling your competitors.
Answer it in two messages: one immediately on booking, one when the van actually moves. The second one is the one that stops them ringing round.
export const emergency = { booked: (c: Ctx) => `${c.company}: got you — ${c.tech} is assigned and we're aiming for ` + `${c.window}. If water's still running, turn off the stop tap: ${c.link}`, // Sent when the van actually moves, not when the job was booked. enRoute: (c: Ctx) => `${c.tech} is on the way to you now, about ${c.etaMins} minutes. ` + `He'll call from outside if he can't get parking.`, delayed: (c: Ctx) => `${c.company}: the job before yours ran over — ${c.tech} is now looking ` + `at ${c.newEta}. Sorry. Still coming today, and still the same price.`,};The stop-tap link is worth more than it looks
A short page showing where a stop tap usually is, sent in the first thirty seconds, sometimes ends the emergency before you arrive. Customers do not resent that — they remember that you helped before you were paid, and it is the single most-forwarded message most plumbers send.
Quote approval, in writing, before the spanner comes out
The classic plumbing dispute is 'you never said it would be that much'. A photo of the actual problem plus a number, approved by reply, ends that argument permanently — and the thread is the record.
export const approval = { quote: (c: Ctx) => `${c.tech} at ${c.address}: it's the ${c.diagnosis} — photo attached. ` + `${c.price} including parts and labour. Reply YES and I'll start now.`, variation: (c: Ctx) => `Opened it up and found ${c.extra} behind the panel — photo attached. ` + `That's ${c.extraPrice} on top of the ${c.price}. Reply YES to go ahead, ` + `or NO and I'll make it safe and leave it for you to think about.`,};Send the photo. A blue-bubble thread carries full-resolution images, and a picture of a corroded joint does more to justify a price than any amount of explanation. The reply is your authorisation.
The scheduled job needs the opposite treatment
A bathroom booked three weeks out is a no-show risk, not an urgency problem. That is a confirmation job, and the pattern is the same as any appointment reminder: confirm at a week, remind the day before, arrive when you said.
- A week out: confirm the date and say what access you need — 'we'll need the drive clear from 8'.
- The day before: the arrival window and the tech's name.
- Morning of: en route, with a real ETA.
- After: what was done, what to watch for, and how to leave a review.
Never send an arrival window you do not believe
'Between 8 and 12' that becomes 2pm costs you more goodwill than 'between 12 and 4' would have. Emergency work overruns — that is the trade. The message that saves the relationship is the delay message, sent before the customer notices, not after they call.
Where the repeat money is
Most plumbers are found once in a crisis and then forgotten. The thread is what stops that: your number sits in their Messages app under a real conversation about their house, which is a far stronger claim on the next job than a fridge magnet.
One useful message a year is enough — a genuine 'your boiler service is due, want me to book it in' beats any promotion. Anything more frequent than that and you are a nuisance, so read quiet hours and frequency before you build a campaign.
For the review request that turns a good job into more work, use the review requests playbook — and send it while the customer is still standing in a bathroom that finally works.
Next step
Browse the other industry playbooks, compare the services that can send this on the providers page, or tag your links with the UTM builder.