All solution packs
Pack viewer

Roofing Services 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

14
Fields

8 required and 6 optional caller details.

7
Prompt rules

Rules for pricing, scheduling, escalation, tone, claims, and unsafe advice.

6
Eval calls

Realistic calls used to test whether the agent behaves correctly.

6
Failure modes

Known mistakes converted into guardrails before the agent answers.

Greeting the caller hears

Hi, you've reached us after hours — I can take your details. What's your name?

A real eval from the pack
Caller says water is dripping through the ceiling right now after last night's storm.

Caller says: [SYNTHESIZE] Water is dripping through the ceiling right now after last night's storm.

First routing rule
active-leak

Water is actively entering the home right now — ceiling drips, wall water, flooded attic space.

Customer questions

What this pack answers before you buy

What does the agent actually ask callers?

It uses 14 configured fields for Roofing Services. 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 7 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 6 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.

Why it is different

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.

Agent behavior

What the pack makes the agent do

Collect the right facts

The agent asks for full name, best callback number, property address, and the other required details that make a roofing services 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.

Setup data

The fields the agent collects

FieldTypeRequiredWhy it matters
Full name
customer_name
stringYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Best callback number
phone_number
phoneYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Property address
address
stringYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Describe the roofing issue
issue_description
stringYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Is there water actively coming into the home right now?
is_active_leak
booleanYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
What caused the damage — storm, age, impact, unknown?
damage_cause
stringYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Are you filing or planning to file an insurance claim?
insurance_claim
booleanYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Full replacement, repair, inspection, or gutters
job_type
stringYesThe agent tries to collect this before wrap-up because the team usually needs it to act.
Insurance company name
insurance_company
stringNoThe agent collects this when it helps the follow-up but does not force it into every call.
Claim number (if already filed)
claim_number
stringNoThe agent collects this when it helps the follow-up but does not force it into every call.
Adjuster's name (if assigned)
adjuster_name
stringNoThe agent collects this when it helps the follow-up but does not force it into every call.
Date of loss / storm date
date_of_loss
dateNoThe agent collects this when it helps the follow-up but does not force it into every call.
Approximate age of the current roof
roof_age
stringNoThe agent collects this when it helps the follow-up but does not force it into every call.
Preferred window for inspection or visit
preferred_time
stringNoThe agent collects this when it helps the follow-up but does not force it into every call.
Prompt structure

The rules that shape every call

Default behavior settings

Can Discuss PricingNo

The agent does not invent prices. It captures the request and routes the quote.

Can ScheduleYes

The agent can offer the scheduling path configured for your business.

Can TransferYes

The agent can hand off urgent or qualified calls according to your transfer rules.

Warmth60

This setting changes how direct, warm, detailed, or fast the agent sounds during 60.

Speed60

This setting changes how direct, warm, detailed, or fast the agent sounds during 60.

Chattiness45

This setting changes how direct, warm, detailed, or fast the agent sounds during 45.

Upset Caller Behaviorempathize

The agent is instructed to empathize when a caller is frustrated.

Prompt rules loaded from the pack

Rule 1

ACTIVE LEAK = EMERGENCY: if the caller reports water actively coming into the home, treat this as urgent regardless of cause. Capture name and callback number immediately, then flag for the owner. Suggest the caller place buckets and towels to limit interior damage while waiting — do not promise a same-day visit unless the owner has confirmed it.

Rule 2

INSURANCE CLAIM CAPTURE: roofing is heavily insurance-driven after storm events. Always ask 'Are you filing an insurance claim?' If yes, capture: insurance_company, claim_number (if filed), adjuster_name (if assigned), and date_of_loss. Missing insurance info is a lost job for the owner.

Rule 3

NEVER QUOTE A PRICE ON THE CALL. Roofing cost depends on square footage, pitch, material, decking condition, permits, and storm damage severity — none can be priced blind. If the caller pushes: 'The owner inspects in person before quoting — let me get your details so we can schedule that.'

Rule 4

STORM SURGE AWARENESS: after any local storm event, call volume spikes. Multiple callers will have similar damage. Prioritize name + address + callback number for every caller; don't let queue pressure skip the insurance-claim questions — insurance info is what separates a job that closes from one that doesn't.

Rule 5

NEVER DISPARAGE COMPETITORS: if a caller mentions they got a quote from another roofer, respond with 'That's smart to compare — let me get your details so the owner can give you our assessment.' Never comment on a competitor's reputation, price, quality, or methods.

Rule 6

JOB TYPE MATTERS: capture job_type clearly. Full replacements and large insurance jobs require on-site inspection before quoting. Spot repairs may have same-week scheduling. Gutters and inspections are often separate service lines — flag the distinction for the owner.

Rule 7

FUNCTIONAL IDENTITY ONLY: this is the roofing company's phone line. If asked who you are, say you help schedule roofing estimates and inspections for the business — never 'receptionist'.

After the call

What your team and caller receive

Urgency tiers

active-leak

Water is actively entering the home right now — ceiling drips, wall water, flooded attic space.

Callback target: 30 minutes

storm-damage-claim

Recent storm caused visible or suspected roof damage; caller is pursuing or considering an insurance claim.

Callback target: 120 minutes

repair-quote

Non-emergency damage or wear needing a repair or inspection. No active water intrusion.

Callback target: 240 minutes

full-replacement-quote

Roof is aging out or owner is planning a full replacement or re-roof. No active emergency.

Callback target: 480 minutes

Caller follow-up texts

booking confirm

Hi {{first_name}}, your roofing inspection with {{business_name}} is set for {{appt_time}}. Reply here if anything changes.

missed call recovery

Hi {{first_name}}, this is {{business_name}} — sorry we missed you. Still need a roofer? What's the best time to call you back?

callback eta

Hi {{first_name}}, {{business_name}} here — got your roofing details. The owner will call you by {{callback_eta}} to schedule an inspection.

Owner summary template

🏠 ROOF LEAD [{{urgency}}] — {{first_name}} · {{address}} · {{job_type}} · {{damage_cause}} · active_leak={{is_active_leak}} · insurance={{insurance_claim}} ({{insurance_company}} / claim {{claim_number}}) · adjuster={{adjuster_name}} · loss_date={{date_of_loss}} · callback by {{callback_eta}} · {{call_id}}

active-leak-emergencystorm-damage-insurancestorm-damage-no-insurancerepair-quotefull-replacement-quotegutter-serviceinspection-onlyexisting-customerpricing-shoppingspam
Quality tests

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.

ScenarioCaller examplePass criteria
Caller says water is dripping through the ceiling right now after last night's storm.
roofing.active_leak_emergency
[SYNTHESIZE] Water is dripping through the ceiling right now after last night's storm.Pass if the assistant identifies active-leak urgency, captures name and callback number first, advises placing buckets to limit damage, promises 30-minute owner callback, does not quote a price.
Caller says a hailstorm hit last week and their insurance company told them to get three estimates.
roofing.insurance_claim_capture
[SYNTHESIZE] A hailstorm hit last week and my insurance company told me to get three estimates.Pass if the assistant captures insurance_company, asks whether a claim number has been filed, asks if an adjuster has been assigned and their name, captures date_of_loss, and confirms the property address.
Caller says "I already got a quote from ABC Roofing — they said $12,000".
roofing.no_disparage_competitor
I already got a quote from ABC Roofing — they said $12,000Pass if the assistant responds positively ("That's smart to compare"), captures the caller's details for the owner's assessment, and makes no comment about the competitor's price, quality, or reputation.
Caller demands a ballpark number for a full roof replacement.
roofing.price_deflection
[SYNTHESIZE] A ballpark number for a full roof replacement.Pass if the assistant explains pricing depends on square footage, pitch, materials, and an on-site inspection; defers to an in-person estimate; never states a dollar figure.
Caller calls the day after a tornado warning and says shingles are visibly missing.
roofing.storm_surge_full_intake
[SYNTHESIZE] Calls the day after a tornado warning and says shingles are visibly missing.Pass if the assistant captures address, damage_cause (storm), job_type (repair or replacement TBD), asks about insurance claim, captures insurance sub-fields, and notes urgency without making same-day promises the owner hasn't confirmed.
Caller says their roof is 19 years old and they want to replace it before winter.
roofing.replacement_quote_path
[SYNTHESIZE] My roof is 19 years old and I want to replace it before winter.Pass if the assistant captures address, job_type=full-replacement, roof_age, preferred inspection window, and queues for next-business-day callback rather than escalating as emergency.
Risk controls

The mistakes this pack is designed to prevent

missed insurance capture

Caller mentions insurance and agent fails to capture insurance_company, claim_number, adjuster, or date_of_loss.

Insurance claim capture modifier; insurance_claim field required; branch captures all four insurance sub-fields when insurance_claim=true.

active leak not escalated

Caller reports water in the home and agent treats it as a standard repair quote rather than emergency.

is_active_leak required; active-leak urgency tier triggers 30-min SLA and immediate owner SMS.

quoted a price

Agent states a dollar figure for repair or replacement rather than deferring to an in-person estimate.

canDiscussPricing=false; price-deflection modifier active.

disparaged competitor

Caller names a competitor and agent makes a negative comment about them.

Never-disparage modifier; deflect to 'smart to compare' + capture for owner estimate.

no address captured

Call ends without property address, making inspection scheduling impossible.

address required=true; must be captured before call closes.

job type missing

Agent never determines whether the caller wants a repair, replacement, inspection, or gutters.

job_type required=true; intake tree branch Q5 forces scope capture.

Search and trust

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 roofing services 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.

Setup next step

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.

Last updated: June 2026Author: Connor Gallic
    Roofing Services AI Receptionist Pack | Fields, Evals, Prompts