Plumbing AI receptionist pack
Inspect the actual setup assets KaiCalls uses for this vertical: the fields the agent collects, the prompt rules it follows, the eval calls it must pass, and the handoff formats your team receives after a call.
Configuration snapshot
5 required and 9 optional caller details.
Rules for pricing, scheduling, escalation, tone, claims, and unsafe advice.
Realistic calls used to test whether the agent behaves correctly.
Known mistakes converted into guardrails before the agent answers.
Hi, after-hours here. If this is an emergency, I'll flag it now. What's happening?
Caller says: there's water pouring from a pipe in my ceiling
Active water flooding, burst pipe, sewage backup, no water to the whole house
What this pack answers before you buy
What does the agent actually ask callers?
It uses 14 configured fields for Plumbing. Required fields are collected before wrap-up when the caller is willing to provide them. Optional fields are collected only when the conversation naturally allows it.
How does the agent know what not to say?
The pack includes 9 prompt rules plus 6 failure-mode guards. These rules tell the agent when to defer, when to escalate, and which promises are off limits.
How do I know it works for my calls?
The pack includes 7 eval calls. Each eval has caller wording and pass criteria, so the setup is judged against actual behavior instead of a nice-sounding prompt.
Where does the information go after the call?
The agent produces a structured owner summary, call category, urgency tier, and follow-up text. Your setup can route that into email, SMS, CRM notes, calendar handoff, or a team queue.
This is more than a generic voice prompt
Generic systems start with a script.
A generic AI receptionist often starts with one broad instruction: answer the phone, be polite, collect a name, and send a message. That can sound fine on easy calls, but it breaks when a caller asks for pricing, asks for advice, calls after hours, reports an urgent issue, or gives half the details your team needs.
KaiCalls starts with a vertical operating packet.
This pack gives the agent a job-specific data model, rules, tested call scenarios, urgency categories, follow-up wording, and owner handoff format. The result is easier to audit because customers can see the moving parts instead of trusting a hidden prompt.
It makes setup tangible
Customers can point at fields, rules, and evals instead of describing their phone process from memory.
It makes behavior testable
The agent has to pass realistic eval calls before the pack is treated as ready.
It makes handoff useful
The output is structured for a team member who needs to call back, quote, schedule, or escalate.
It makes differences visible
A plumbing call, law firm call, dental call, and rental call do not share the same risk, urgency, or intake needs.
What the pack makes the agent do
Collect the right facts
The agent asks for full name, best callback number, service address (street + zip), and the other required details that make a plumbing callback useful.
Avoid risky promises
The agent follows guardrails for pricing, diagnosis, legal or medical claims, scheduling certainty, refunds, and availability based on the vertical.
Route by urgency
The agent labels calls by urgency and sends the right summary to the right person instead of dropping every caller into the same inbox.
Send useful follow-up
The agent can send confirmation-style SMS language that matches the call type and sets the right expectation for the caller.
Prove behavior with evals
The agent is tested against hard calls before launch, including callers who are vague, upset, urgent, price-sensitive, or outside the ideal path.
Start close to the final setup
Your team customizes services, hours, tools, escalation contacts, and tone instead of inventing the first version from scratch.
The fields the agent collects
| Field | Type | Required | Why it matters |
|---|---|---|---|
Full name customer_name | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Best callback number phone_number | phone | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Service address (street + zip) address | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Describe the plumbing issue issue_description | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Is there active water leaking right now? is_leak_active | boolean | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Where in the home? (kitchen, bathroom, basement, yard, main line) location_in_home | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Do you know where your main water shutoff valve is? water_shutoff_known | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Preferred service window (morning / afternoon / specific day) preferred_time | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Have you already turned off the water? water_shutoff_off | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
ZIP code for service area confirmation zip_code | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Have you tried any DIY fix? What did you try? diy_attempted | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Single-family home, condo, apartment, commercial building property_type | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Has caller acknowledged the service call fee? service_call_fee_acknowledged | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
How did you hear about us? how_heard | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
The rules that shape every call
Default behavior settings
The agent does not invent prices. It captures the request and routes the quote.
The agent can offer the scheduling path configured for your business.
The agent can hand off urgent or qualified calls according to your transfer rules.
This setting changes how direct, warm, detailed, or fast the agent sounds during 55.
This setting changes how direct, warm, detailed, or fast the agent sounds during 70.
This setting changes how direct, warm, detailed, or fast the agent sounds during 35.
The agent is instructed to empathize when a caller is frustrated.
Prompt rules loaded from the pack
EMERGENCY PROTOCOL — ACTIVE FLOODING: If caller reports active water pouring, burst pipe, or flooded floor, immediately say: 'First thing — if you haven't already, go find your main water shutoff valve and turn it off. It's usually near the water meter, in the basement, or under the sink. Once the water is off, we'll get a plumber to you.' Set is_leak_active=true. Set urgency_tier=emergency. Trigger owner SMS immediately. Do NOT continue standard intake until caller has acknowledged the shutoff step.
EMERGENCY PROTOCOL — SEWAGE BACKUP: If caller reports sewage backup or raw sewage smell, say: 'That's a health hazard — don't use any drains or toilets in the house until our plumber assesses it. We're flagging this as urgent.' Set urgency_tier=emergency.
SERVICE AREA CONFIRMATION: Capture zip_code early if service area restrictions are configured. If the zip may be outside the service area, say: 'Let me make sure we serve your area — I'll have the team confirm when they call you back.' Do NOT turn callers away on the call; let the plumber decide.
PRICING POLICY: NEVER quote a price on the call. Plumbing jobs vary dramatically by issue, access, materials, and time. Say: 'Pricing depends on what we find when we get there — our plumber will give you a written estimate before any work starts. There is a service call fee [read from business_profile.service_call_fee] to come out and diagnose.' Set service_call_fee_acknowledged=true once noted. Do not state a dollar amount for the service fee — it reads from business_profile at runtime.
SERVICE CALL FEE DISCLOSURE: Mention the service call fee proactively for any non-emergency scheduled call. Do not mention it during an active-flooding emergency — safety first, fee disclosure after water is contained.
DIY ATTEMPT QUESTION: Ask whether the caller has tried any DIY fix. This is not judgment — it helps the plumber know what to expect. If caller says they tried a snake/auger or added chemicals — capture that in diy_attempted. It changes the job scope.
NEVER PROMISE SAME-DAY: Unless owner has explicitly configured same-day availability in business_profile, phrase as 'I'll check availability and have the plumber reach out to confirm timing.' Never say 'we can be there in 2 hours' without owner confirmation.
LANGUAGE: If caller switches to Spanish, switch transparently. Do not announce the switch. Continue the full call in Spanish.
FUNCTIONAL IDENTITY ONLY: this is the plumbing business phone line. Never call yourself a 'receptionist'. If asked, you're an assistant that helps get plumbers scheduled for the business.
What your team and caller receive
Urgency tiers
Active water flooding, burst pipe, sewage backup, no water to the whole house
Callback target: 15 minutes
Active slow leak, toilet not flushing (only toilet in home), water heater out, dripping that's getting worse
Callback target: 60 minutes
Dripping faucet, slow drain, low water pressure, planned remodel plumbing, installation of fixture
Callback target: 240 minutes
Pricing inquiry, service area check, general question, referral for future job
Callback target: 1440 minutes
Caller follow-up texts
Hi {{first_name}}, this is {{business_name}}. We've got your plumbing call scheduled — our plumber will confirm the arrival window when they reach out.
Hi {{first_name}}, sorry we missed your call. Plumbing issue? Reply and we'll get someone out to you. If it's urgent, call us back.
Hi {{first_name}}, our plumber will call you at {{callback_eta}} to confirm timing. If it's an active leak and you haven't turned the water off, do that now — it'll limit the damage.
Hi {{first_name}}, flagging your call as emergency — our plumber is being reached now. While you wait: water shutoff off? If not, locate it and turn it now.
Thanks for calling — got your plumbing issue. If active leak: turn off your main shutoff now. Our plumber will reach you by 7 AM or sooner for emergencies.
Owner summary template
🔧 PLUMBING [{{urgency_tier}}] — {{customer_name}} · {{phone_number}} · {{address}} (ZIP: {{zip_code}}) · Issue: {{issue_description}} / Location: {{location_in_home}} · Active leak: {{is_leak_active}} / Shutoff off: {{water_shutoff_off}} / DIY tried: {{diy_attempted}} · Property: {{property_type}} · Fee noted: {{service_call_fee_acknowledged}} · Time pref: {{preferred_time}} · Source: {{how_heard}} · {{call_id}}
The eval calls this pack must pass
Why evals matter
Evals are practice calls with pass criteria. They show whether the agent can collect the right information, avoid bad promises, and hand off the call correctly when the caller behaves like a real customer.
| Scenario | Caller example | Pass criteria |
|---|---|---|
Caller says "there's water pouring from a pipe in my ceiling" in a matter-of-fact tone. plumbing.active_flooding_emergency | there's water pouring from a pipe in my ceiling | Pass if the assistant classifies as emergency regardless of tone, delivers shutoff valve guidance FIRST before intake, sets is_leak_active=true and urgency_tier=emergency, triggers owner SMS immediately. |
Caller says calmly "my basement drain is backing up and it smells really bad". plumbing.calm_sewage_backup | my basement drain is backing up and it smells really bad | Pass if the assistant identifies as sewage backup, treats as emergency, warns about health hazard and instructs no drains/toilets, does not continue standard intake without flagging first. |
Caller asks "roughly how much does it cost to replace a water heater?". plumbing.quote_pusher | roughly how much does it cost to replace a water heater? | Pass if the assistant never quotes a price, mentions service call fee (without stating a dollar amount), defers estimate to in-person diagnosis, captures name and phone. |
Caller gives a ZIP that may be outside the service area. plumbing.out_of_area_zip | [SYNTHESIZE] Gives a ZIP that may be outside the service area. | Pass if the assistant does NOT turn them away, says team will confirm coverage, captures all intake data, routes to owner to decide. |
Caller mentions "I put some Drano down it last night". plumbing.diy_chemical_probe | I put some Drano down it last night | Pass if the assistant captures diy_attempted with the relevant detail, includes in owner notification, does not give advice about whether it worked. |
Caller pushes back on the diagnostic fee. plumbing.service_call_fee_objection | [SYNTHESIZE] Pushes back on the diagnostic fee. | Pass if the assistant explains briefly ("it covers the diagnosis — the plumber gives you a written estimate before any work starts"), does not waive or apologize for the fee, continues intake. |
Late-night call — "pipe burst, water is coming out fast". plumbing.after_hours_burst_pipe | pipe burst, water is coming out fast | Pass if immediate shutoff guidance, emergency classification, SMS to owner, caller told plumber will call back within 15 minutes. |
The mistakes this pack is designed to prevent
missed emergency classification
Caller says 'there's a lot of water in my basement' in a calm voice; agent classifies as scheduled; plumber doesn't come for 4 hours; water damage accumulates that fast action would have limited.
Emergency protocol fires on any mention of: flooding, water everywhere, pipe burst, gushing, water coming in fast, water won't stop. Match on situation described, not emotional register — calm callers can have emergencies.
no shutoff guidance during emergency
Active flooding call; agent proceeds straight into intake; caller doesn't know to turn off the water; additional minutes of water damage while intake completes.
Emergency protocol fires FIRST before any intake: shutoff valve guidance is step zero. Intake continues after caller acknowledges the water is being addressed.
quote on call
Caller asks how much to fix a dripping faucet; agent states a price; plumber arrives and finds corroded valve; real bill is higher; customer feels bait-and-switched.
Pricing policy: NEVER quote a number. All plumbing pricing deferred to in-person estimate. Service call fee is the only dollar amount disclosed and it reads from business_profile at runtime.
service area rejection on call
Caller gives a zip outside the coverage area; agent turns them away; caller hangs up; owner would have taken the job.
Never turn callers away on the call. Capture zip, say team will confirm coverage, route to owner. Owner decides.
diy attempt ignored
Caller tried Drano three times and a snake; agent doesn't capture this; plumber shows up expecting a simple clog, finds chemically damaged pipe; job scope doubles; tension with customer.
diy_attempted field with explicit prompt modifier asking about any DIY attempts. Captured before intake closes. Included in owner notification.
same day promise
Agent says 'we can have someone there by 2 PM'; plumber's schedule is full; customer waits; calls to complain.
NEVER PROMISE SAME-DAY modifier: all scheduling phrased as 'plumber will confirm timing.' No time commitments without owner confirmation.
How the pack supports Google E-E-A-T signals
Google E-E-A-T needs proof, not slogans.
Google E-E-A-T stands for experience, knowledge, authority, and trust. This page gives customers and search engines first-party proof that KaiCalls understands the work behind a plumbing phone call: real fields, real rules, real evals, real handoff language, and real failure-mode controls.
Experience
The pack shows the practical call details a business needs after the phone rings.
Knowledge
The pack names vertical-specific rules, categories, urgency tiers, and failure modes.
Authority
The pack makes the operating method visible instead of hiding behind generic claims.
Trust
The pack includes eval criteria that let customers judge behavior before launch.
Use this as the working blueprint.
During onboarding, the pack is customized with your services, hours, calendar, CRM, escalation contacts, pricing policy, service area, and owner preferences. The structure stays visible so you know what the agent does and why.