Evalgent
Back to Blog
Voice AI Testing

AI Receptionist for HVAC: 7 Mistakes That Lose Jobs

Deepesh Jayal
15 min read
AI Receptionist for HVAC: 7 Mistakes That Lose Jobs
On this page

Field service management software now ships its own phone agents. Workiz announced Jessica, an AI receptionist built into its FSM platform, in December 2024. Jobber's Receptionist answers calls and texts 24/7 and can book visits from a contractor's booking settings. The category is real, and many product teams are building their own. It replaces the classic HVAC answering service that only took messages. Call it an AI answering service for HVAC or an AI phone agent for HVAC; the job is the same. It owns HVAC lead intake on the first call.

Smart thermostat reading 88 degrees indoors with AC not cooling, while the AI receptionist booked the visit for Tuesday next week and the customer called a competitor

This post is for the team that owns one of those agents. You run an AI receptionist for HVAC contractors inside a larger product. Hundreds of shops share one agent, each with its own fees, hours and rules. A prompt change ships to all of them at once.

The hard part is that most lost jobs look like successful calls. The call ends politely. The summary says "Booked." Containment goes up. But the job was booked for the wrong week, as the wrong type, or never written at all. The caller has already called the next contractor on the list.

Lost job: a call from a caller who wanted to hire the contractor that ends without a booked, correctly typed, correctly prioritized job in the contractor's system.

How a first call becomes a job, and where it breaks

Every inbound HVAC call runs the same chain. The agent captures the caller, address and problem. It picks a job type and priority. It books a slot or a request. It confirms out loud. Then the write-back puts the record on the dispatch board.

A speech error early in the chain does not throw an exception. "Eighty-eight degrees" heard as "eighty" lowers the priority. "Replace" heard inside a repair story still files a repair. The record looks complete, so nobody checks it. Our home services AI receptionist QA guide covers this chain across trades. The sibling post on booking accuracy covers slot and field accuracy. This post stays on the first call, and on the seven mistakes that cost HVAC contractors the job.

The seven mistakes at a glance

#MistakeHow it shows up on the callWhat it costsTest that catches it
1Dodges "is this a person?"Loops back to "How can I help?"Hang-up, no recordAsk three ways, at three points
2Transfers before captureOffice line rings out, call dropsLead with no addressTransfer target that never answers
3Misses heat or cold urgency88° inside, booked next TuesdayCaller hires a competitorTemperature and occupant matrix
4Files a replacement as a repairComfort advisor lead sent to a service techHighest-value lead lostReplacement intent variants
5Mishandles price questionsInvents a fee, or refuses all pricesDispute at the door, or hang-upSpoken fee equals config
6Talks over callersCuts in mid-address, slow repliesWrong digits, hang-upsPauses, noise and barge-in profiles
7Fails Spanish speakersReplies in English, garbles the streetA customer segment lostSame scenarios in Spanish and code-switch

The order is not random. Mistakes 1 and 2 lose the record entirely. Mistakes 3 and 4 keep the record but lose the job. Mistakes 5 to 7 erode trust across the whole call. Fix them in that order.

Mistake 1: dodging "is this a person?"

How it shows up

The caller asks, "Wait, am I talking to a real person?" The agent ignores it and asks for the address again. Or it says "I'm Sarah from the office," because a contractor set a persona name. Some callers say "representative" three times and hear the greeting restart. Many hang up within 20 seconds.

What it costs

An early hang-up usually leaves no job, no request and often no name. It does not show up as a lost lead because it never became a lead. It also carries legal risk. Utah's SB 226 (2025) adds section 13-75-103. It requires disclosure when a consumer makes "a clear and unambiguous request to determine whether the interaction is with a human." California's Business and Professions Code section 17941 bars using a bot "with the intent to mislead the other person about its artificial identity" to drive a sale. That statute says "online," so whether it reaches phone calls is a question for counsel. This is not legal advice.

The test that catches it

Script a caller who asks "Is this a robot?", "Am I talking to a real person?" and "Are you AI?" Ask at the greeting, mid-booking and right after a misheard address. Pass means an honest answer in the very next agent turn. The agent then offers to continue, take a callback or transfer. Captured fields must survive the question. Run it on every persona name a contractor can configure.

Mistake 2: transferring before taking the address

How it shows up

"My AC is out. Can I just talk to someone?" The agent starts a warm transfer at once. It is 4:55 pm. The office line rings out, hits a busy signal or goes to a full voicemail box. The call drops. Caller ID shows a blocked number, or a work line nobody will answer later.

What it costs

The lead now exists only in the caller's memory. The record holds a timestamp and maybe a number. No address, no problem, no name. The contractor never knows the job existed.

The test that catches it

Point the transfer target at a line that never answers. Then repeat with a busy line and a voicemail. Pass means two things. First, before any transfer starts, the record already holds a name, a callback number confirmed by read-back, the service address and a one-line problem. Second, a failed transfer returns the caller to the agent, which books the job or creates a request. Our posts on escalation accuracy and warm vs cold transfer mechanics go deeper on the handoff itself.

Timeline comparing two HVAC calls: one transfers at second 12 with no address or callback captured and drops when the office line rings out; the other captures name, number and address first, then recovers

Mistake 3: booking a no-AC call in a heat wave for next week

How it shows up

"It's 88 degrees in here. The AC is blowing warm air. My mother is 82 and she lives with us." The agent replies, "The next available appointment is Tuesday the 27th." The record says AC repair, normal priority. The call ends politely.

What it costs

The caller hangs up and dials the next contractor. That is a lost job and possibly a safety problem. The CDC's guidance on heat and older adults says older adults "do not adjust as well as young people to sudden changes in temperature." It also says, "Do not rely on a fan as your main cooling source when it's really hot outside." The cold snap version is the same call in January: no heat, 50 degrees inside, an infant at home.

Why it happens

Urgency rarely arrives in one sentence. The first utterance says "AC not working," which reads as routine. The temperature comes two turns later as a spoken number. The elderly occupant comes as a side remark. A priority classifier that runs once, on the opening request, never sees them. Spoken numbers add risk too: "eighty-eight" can come back as "80," "88" or "A.T." from the speech-to-text layer.

The test that catches it

Build a matrix. Rows are indoor temperature (78, 85, 88, 92), occupant (none, older adult, infant, medical device) and scope (one room vs whole house). Columns are when each fact is said (first turn vs late in the call). Pass means the priority matches the contractor's own urgency rule and the agent offers the same-day path it allows. If no same-day slot exists, the agent says so honestly and escalates per config. Whether to wake an on-call tech at night is a separate rule, covered in our HVAC after-hours answering post.

Decision tree for HVAC call priority: no cooling or no heat, indoor temperature past the contractor threshold, vulnerable occupant, and whether a same-day slot exists, ending in urgent same-day, escalate or standard booking

Mistake 4: filing a replacement lead as a repair

How it shows up

"Our system is 19 years old. It's leaking again, and we're thinking about replacing it. Can someone give us a quote?" The agent books "AC repair, diagnostic fee" with the next service tech. Many contractors send a comfort advisor or sales rep for a replacement estimate instead, with a longer slot and different pricing.

What it costs

The most valuable lead of the week gets a 1-hour repair slot and a diagnostic fee. The homeowner gets replacement quotes elsewhere. A second version is the warranty question: "The unit is three years old. Is this covered?" The agent says yes. But coverage often depends on warranty registration. Carrier's warranty page says equipment must be registered "within 90 days of installation" for preferred coverage. After that, "the standard 5-year parts warranty applies with no labor coverage." The agent cannot know which applies, so it must not promise either.

The test that catches it

Script replacement intent in many phrasings: "new system," "quote for a heat pump," "how much to replace," "should I just replace it." Add mixed calls: repair today plus replacement interest. Pass means the job type, slot length and assignee class match the contractor's estimate rules. Warranty calls must capture brand, install year and model, then route to a warranty check with no coverage promise. Matching the right tech within a job type is covered in our post on HVAC AI booking the wrong tech.

Mistake 5: mishandling price questions

How it shows up

There are two opposite failures. In the first, the agent says "a new AC usually runs about $5,000." Or it states a diagnostic fee from general knowledge, or from another contractor's config. In the second, the agent refuses all prices. It won't even give the published service call fee, and the caller hangs up.

What it costs

A wrong fee becomes a dispute at the door and a bad review. A refusal costs the booking. Fees vary by contractor, and by member status and time of day. Service agreement members often get a reduced or waived fee. Our post on HVAC AI and service agreement customers covers that recognition step.

The test that catches it

Ask the fee question at three points in the call. Pass means the spoken number matches the contractor's config exactly, checked from the audio, not only the transcript. A text-to-speech engine can read "$89" correctly in text and still say it wrong. Ask for a replacement price. Pass means no number unless the contractor publishes a range. Then run the same script against two tenants with different fees, to catch config leaks between them. The same pattern applies to quote accuracy in lawn and cleaning.

Mistake 6: talking over callers

How it shows up

The caller pauses mid-address: "It's four-one... four-one-seven Maple." The agent jumps in at the pause and saves "41 Maple." Or the agent takes two seconds to reply. The caller says "Hello?" and both talk at once. HVAC callers are often outside next to a running condenser, or up in an attic.

Why it happens

Human turn-taking is fast. Stivers et al. studied turn-taking in 10 languages (PNAS, 2009). Speakers in all of them avoided overlap and kept gaps short, with language averages within about 250 ms of the cross-language mean. Callers expect that rhythm. Agents struggle with it. Full-Duplex-Bench tested spoken dialogue models on pauses, backchannels and interruptions. The authors report that "All three SDMs exhibit high Takeover Rates (TOR) when managing speaker pauses."

What it costs

Pause takeovers corrupt the exact fields that matter: house numbers, phone digits and model numbers. Slow replies cause hang-ups. Our post on the cost of latency puts numbers on that trade.

The test that catches it

Use caller profiles with 600 to 1,200 ms pauses inside addresses and phone numbers. Add condenser-fan noise and a caller who barges in mid-sentence. Measure p95 response latency, interruptions per call and takeover rate during pauses. These need the audio. A transcript cannot show overlap. Evalgent judges calls from the audio, with latency, interruptions and talk share as standard metrics. See also how to measure interruption rate.

Turn-taking timeline of an HVAC call where the agent takes over during a 900 ms pause inside a street address and saves the wrong house number, compared with a run that waits

Mistake 7: failing Spanish-speaking callers

How it shows up

The caller opens in Spanish, or switches mid-call: "El aire no está enfriando, the unit outside." The agent answers in English. Or it switches language but mangles the Spanish street name. The English summary drops the urgency.

What it costs

Whole customer groups never get booked. The Census Bureau reports that 78.3% of people age 5 and older spoke only English at home in 2018 to 2022. Spanish was 61.1% of the other languages spoken. Accent gaps exist even in English. Koenecke et al. (PNAS, 2020) tested five commercial speech recognizers. They found "an average word error rate (WER) of 0.35 for black speakers compared with 0.19 for white speakers."

The test that catches it

Run the same scenario set from mistakes 1 to 6 in Spanish and code-switched speech. Compare booking completion and field accuracy per language. Pass means no language falls more than a set margin behind English, and the record is written in the contractor's working language. Our guides on accent robustness and testing multilingual handling cover the methods.

What these mistakes cost a platform: a worked example

The numbers below are illustrative assumptions, not measured data. Replace them with your own.

  • 400 HVAC contractors on your platform, 500 inbound calls each per month: 200,000 calls.
  • 1% of calls hit one of the seven mistakes and lose the job: 2,000 lost jobs a month.
  • An assumed $350 average repair ticket: $700,000 a month in contractor revenue.

That is before replacement leads, which are worth many repair tickets each. It is also spread thin. Each contractor loses about five jobs a month and blames the slow season. Your platform sees it only as churn later.

How to test an AI receptionist for HVAC before every release

1. Generate scenarios from config. For each contractor cluster, pull fees, urgency rules, transfer targets, languages and persona names. Write the seven mistakes as scenarios against those values. Evalgent generates scenarios from an agent's prompt and flows, including branches and coverage gaps.

2. Pair scenarios with caller profiles. Use an older caller, a fast talker, outdoor condenser noise, a Spanish speaker, a code-switcher and an interrupter.

3. Call over the real phone path. Use PSTN or SIP, not a text harness. Phone audio and turn-taking cause mistakes 6 and 7.

4. Assert on the record. Check job type, priority, address, callback number and transfer order in the written job. A simplified checker is below.

5. Assert on the audio. Check the spoken fee, the AI disclosure turn, p95 latency and talk-over.

6. Run enough calls. Use the rule of three: zero failures in n runs bounds the true rate below about 3/n at 95% confidence. Zero failures in 150 runs per mistake means the rate is likely under 2%.

7. Gate and monitor. Block the release on any failed hard rule. After launch, map production calls to the same seven scenarios. Evalgent's production monitoring takes call recordings, maps them to scenarios and flags tool-call failures and latency spikes. See our guide to monitoring voice agents in production.

# Simplified: check the job record a test call wrote.
REQUIRED_BEFORE_TRANSFER = ("name", "callback_number", "service_address", "problem")

def check_record(rec: dict, scenario: dict, cfg: dict) -> list[str]:
    fails = []
    if rec.get("transfer_started_at"):
        missing = [f for f in REQUIRED_BEFORE_TRANSFER
                   if rec.get(f"{f}_captured_at", 1e12) > rec["transfer_started_at"]]
        if missing:
            fails.append(f"M2 transfer before capture: {missing}")
    if scenario.get("urgent") and rec.get("priority") != cfg["urgent_priority"]:
        fails.append("M3 urgency missed")
    if scenario.get("intent") == "replacement" and rec.get("job_type") != cfg["estimate_job_type"]:
        fails.append("M4 replacement filed as repair")
    if rec.get("spoken_fee") not in (None, cfg["diagnostic_fee"]):
        fails.append(f"M5 fee said {rec['spoken_fee']}, config {cfg['diagnostic_fee']}")
    if scenario.get("language") and rec.get("call_language") != scenario["language"]:
        fails.append("M7 wrong reply language")
    return fails

The `spoken_fee` and `call_language` fields come from the audio judge, not the agent's own log. An agent's log records what it meant to say. Only the audio shows what the caller heard.

Frequently asked questions

Can an AI receptionist book HVAC jobs?

An AI receptionist can book HVAC jobs when it writes a complete record. That means name, callback number, address, job type, priority and slot, all confirmed out loud. Products such as Jobber's Receptionist book visits from a contractor's booking settings. The risk is not booking at all. The risk is a booking with the wrong type, priority or week.

Should an HVAC AI receptionist say it is AI?

An HVAC AI receptionist should answer honestly when a caller asks if it is a person. Utah section 13-75-103 requires disclosure on a clear and unambiguous request. California bars bots that mislead about their identity to drive a sale. Dodging the question also drives hang-ups. Test it at several points in the call. This is not legal advice.

Can an AI receptionist quote HVAC prices?

An AI receptionist can state prices the contractor has configured, such as a diagnostic or trip fee. It should not invent replacement prices or reuse another contractor's fee. The safe test checks that the spoken fee equals the config value, from the audio. Refusing every price question is also a failure, because callers hang up.

How does an AI receptionist handle no AC calls in a heat wave?

A good AI receptionist re-scores priority as facts arrive: indoor temperature, an older adult or infant at home, and whole-house loss of cooling. It then offers the same-day path the contractor allows, or escalates. Test with temperature and occupant facts said late in the call, not only in the first sentence.

Can an HVAC AI receptionist speak Spanish?

An HVAC AI receptionist can handle Spanish if its speech recognition, reasoning and voice all support it. Test the full call, not a greeting. Run the same scenarios in Spanish and code-switched speech. Compare booking completion and address accuracy against English, and check the record is written in the contractor's working language.

What happens when an AI receptionist transfers an HVAC call?

When an AI receptionist transfers an HVAC call without capturing details first, a failed transfer loses the lead. The safe order is to capture name, callback number, address and problem, then transfer. If the line rings out or is busy, the agent should return to the caller and book or create a request.

How do you test an AI receptionist for HVAC?

Testing an AI receptionist for HVAC means scripted phone calls built from each contractor's config. Cover seven mistakes: AI disclosure, transfer order, urgency, replacement intent, prices, turn-taking and Spanish. Use varied caller profiles. Assert on the written job record and the call audio. Rerun the set on every prompt or flow change.

Why do callers hang up on AI receptionists?

Callers hang up on AI receptionists when the agent dodges "is this a person?", talks over them, or pauses too long. They also hang up when it refuses simple questions like the service-call fee. These are measurable. Track hang-ups in the first 30 seconds, interruptions per call and p95 response latency by contractor.

The bottom line

An AI receptionist for HVAC rarely fails loudly; it loses jobs through calls that end politely with the wrong record. Test the seven mistakes on real phone audio against each contractor's config, and assert on the job record, before every release.

Related Articles