Evalgent
Back to Blog
Voice AI Testing

QA for HVAC Reminder Calls Before Peak Season

Deepesh Jayal
16 min read
QA for HVAC Reminder Calls Before Peak Season
On this page

An outbound reminder agent is not an inbound receptionist. You pick who gets called, when, and what the agent says. Nobody dialed in with a problem. A wrong claim lands on a stranger, or on a customer whose plan lapsed in March.

This post is for the engineer, AI PM or ops lead who runs a reminder agent for one HVAC company or for many of them inside a field service product. Your agent calls customers about seasonal tune-ups, HVAC maintenance plan reminders and service agreement renewal calls. Every prompt change ships to the whole list. Peak season arrives on a date you can't move.

Inbound plan holders are covered in HVAC AI missing service plan customers. Dispatch errors are in why your HVAC AI books the wrong tech. This post covers the outbound campaign and HVAC reminder calls testing from list to write-back.

8 a.m. to 9 p.m.
Local-time window for telephone solicitations to residential lines (47 CFR 64.1200(c)(1))
18 months
Established business relationship window after a purchase or transaction (47 CFR 64.1200(f)(5))
14 days
Default Workiz reminder before a service plan visit (Workiz help center)
2,400 ms
Twilio's default speech threshold: shorter greetings read as human (Twilio AMD docs)

Why HVAC reminder calls testing differs from inbound QA

An inbound call starts with a caller who wants something. An outbound reminder starts with a row in a table. If the row is wrong, a perfect conversation still produces a bad outcome.

The call is a chain with seven links.

1. Select. A query picks customers with an active plan and a visit due.

2. Dial. The dialer places the call inside a legal window.

3. Detect. The system decides: human, voicemail or unknown.

4. Identify. The agent works out who is on the line.

5. Offer. The agent states the visit and offers slots.

6. Commit. A booking, reschedule or decline is captured.

7. Write back. The field service record is changed.

Errors at links 1 to 3 never appear in a transcript, so HVAC reminder calls testing has to start earlier than the conversation. A transcript of a correct conversation with the wrong household looks fine. That is why a transcript-only review of reminder calls gives false comfort. A judge that reads text alone is deaf to this. Greeting length, a pause before "hello" and a barge-in during the price line live in the audio.

The same pattern appears in dental recall AI calls and dealership recall AI calls.

What a reminder call does to the record

Each outcome should map to a narrow, defined write. The failure is a write that is broader than the evidence.

A table-style tree of six reminder call outcomes, showing who answered, what the agent must do, and the only record changes allowed for each outcome.

Look at the wrong-person row. The agent should not name the plan, the unit or the amount owed to someone who isn't the account holder. It can say it is calling for the account holder and offer a callback. It writes a no-contact attempt. It does not write "declined".

Look at the voicemail row. The agent leaves a short, approved message or none. It must not book anything. A confirmation written after a voicemail is a ghost appointment.

The stop row carries legal weight. The suppression flag must reach the list that selects tomorrow's calls, not only the call log. Run a second wave after a stop request and confirm the number is absent.

Seven failure modes for HVAC maintenance reminder calls

#FailureWhat the caller hearsWhat the record shows
1Wrong person or household"Hi Maria, your maintenance plan expires soon." Maria is the tenant.Plan details disclosed to a non-owner
2Wrong unitAgent offers a furnace tune-up. The home has a heat pump plus a mini-split.Visit booked against the wrong equipment record
3Stale plan statusAgent says "your plan covers this." The plan expired in March.Free visit promised, labor unbilled
4Machine read as humanA live pitch plays to a voicemail beep."Spoke with customer" logged
5Human read as machineThe agent hangs up on a person who paused after "hello".Attempt logged as voicemail
6OverbookingAgent offers Tuesday slots that are already held for repairs.Double-booked tech
7Date or time misheard"The fifteenth" is stored as the fiftieth, or "two" as "ten".Visit on the wrong day

Row 3 deserves a pause. The field service software is the source of truth for plan status, and HVAC reminder calls testing must check it. The agent usually reads a cached copy built when the list was generated. A plan can lapse, be paid, or be cancelled after the list is built and before the call. Test the gap. Change the plan status between list build and call, then check what the agent says.

Row 2 is common because homes have more than one system. A plan may cover only one of two air handlers. The record should decide which unit the visit is for, and the agent should confirm it aloud.

Row 7 is an entity error. See speech-to-text entity accuracy and tool argument accuracy.

Check the system's own rules: a field service example

Your agent writes into field service software with its own rules. Workiz is a public example. Its help center says a service plan creates recurring visits "designed to be converted into jobs". Until conversion, visits are placeholders. You can't edit them or assign technicians. They default to 9 a.m. on weekdays, unassigned.

Workiz also documents a default automation that reminds the client 14 days before a visit. It stops applying once the visit becomes a job.

For a voice agent in a system like this, these are test ideas, not claims beyond the documentation.

  • Placeholder versus job. A caller says "make it Thursday afternoon." If the visit is still a placeholder, the agent may not be able to move it. It must convert first. Test that the agent handles the conversion and the edit as two steps.
  • Double reminders. If the platform already sends a 14-day reminder, your agent's call can duplicate it. Decide which channel owns the nudge. Test that a customer who confirmed by text is not called again.
  • Status vocabulary. Workiz lists plan statuses such as Pending approval, Active, Declined, Expires soon and Expired. Map each status to a spoken script. "Expires soon" is a renewal offer. "Expired" is not a tune-up reminder.

Whatever field service software you use, write down its documented states and run one scenario per state. If one agent serves several companies, see multi-tenant voice agent testing.

Sources, read October 19, 2026: Workiz service plans overview and converting visits into jobs. Recheck before you rely on them.

Voicemail and answering machine detection

Most reminder calls end at a machine. Detection is where a campaign quietly misfires.

Twilio's answering machine detection is a good example of the mechanism. Its documentation lists these defaults:

ParameterDefaultWhat it does
MachineDetectionnoneTurns detection on (`Enable`) or waits for the greeting to end (`DetectMessageEnd`)
MachineDetectionSpeechThreshold2,400 msSpeech shorter than this is treated as human
MachineDetectionSpeechEndThreshold1,200 msSilence that marks the end of a speech segment
MachineDetectionSilenceTimeout5,000 msNo speech this long at the start gives `unknown`
MachineDetectionTimeout30 sReturns `unknown` if reached

Twilio's own docs warn that detection will not always be right. Short voicemail greetings can be read as human. Raising the speech end threshold to about 2,500 ms helps with short greetings, but a person who pauses mid-greeting can then be read as a machine.

Now apply it. A greeting such as "Hi, it's Dan, leave a message" may last under 2.4 seconds. Under default settings that may be classified as human. Your agent then starts the reminder script into the beep. The reverse also happens: an elderly customer says "Hello?" and waits. The silence timeout fires and the call is treated as a machine.

With `AsyncAmd` set to `true`, the call proceeds while detection runs. The agent may already be speaking when the result arrives. Test what happens if it flips to a machine label mid-sentence. The deeper mechanics are in answering machine detection in LiveKit and Pipecat and the wider outbound plan is in outbound voice agent testing.

One more audio gotcha. A study of Whisper found that about 1% of transcriptions held whole phrases absent from the audio, more often with long non-vocal stretches (Koenecke et al., 2024). If you use Whisper, check recordings of silence after a voicemail beep. Do not assume it happens.

The capacity problem: a worked example

HVAC seasonal tune-up scheduling creates demand on a date you choose. If you ring every customer in one burst, the agent books a week of tune-ups into slots that repairs also need. Technician capacity is a hard limit. This is a scheduling error, not a speech error. It still belongs in your tests.

Here is an illustrative example. These numbers are assumptions, not benchmarks.

  • 1,200 customers with a service agreement are due for a fall tune-up. Each has a recurring visit on the schedule.
  • 4 techs each run 5 tune-up slots a day for 5 days. That is 100 slots a week.
  • Half the slots are held for repair calls. That leaves 50 open slots a week.
  • 50% of the list answers. 60% of those want to book. So each call produces 0.3 booking requests.

Burst mode: 1,200 calls × 0.3 = 360 requests in week one, against 50 open slots. That is 310 requests with nowhere to go. The agent either overbooks, or it offers dates six weeks out and the customer declines.

Wave mode: 8 waves of 150 calls yield 45 requests each, under 50.

A bar chart comparing 360 booking requests in one burst against 50 open slots, with an eight-wave plan keeping each week near 45 requests.

The formula for wave size is simple.

# Simplified: size each reminder wave from live capacity.
def wave_size(open_slots: int, reach_rate: float, accept_rate: float,
              headroom: float = 0.9) -> int:
    requests_per_call = reach_rate * accept_rate
    return int(open_slots * headroom / requests_per_call)

print(wave_size(50, 0.5, 0.6))  # 150

In production, read open slots from the scheduler at the start of each wave, not from a spreadsheet. Then test three cases. First, capacity drops mid-campaign because a tech is out. Second, the heat arrives early and repair demand rises. Third, the agent is asked for a slot that fills while it speaks. The right behaviour is to say the slot is gone and offer the next.

This is not legal advice. Ask counsel before you launch. It shows where your tests should look.

Artificial voice counts. In a February 2024 declaratory ruling (FCC 24-17), the FCC held that the TCPA's limits on "artificial or prerecorded voice" apply to AI-generated human voices. Calls made with them require the called party's prior express consent. Read the FCC's page.

The rule text. 47 CFR 64.1200 says that, with listed exceptions, you may not call using an artificial or prerecorded voice without prior express consent. Section (a)(2) adds a stricter test for calls that include an advertisement or constitute telemarketing. Those need prior express written consent.

Is a tune-up reminder marketing? It depends on purpose, and the line is blurry. A TCPA practitioner primer notes that if a payment is expected, a call may be treated as marketing even if it also serves an informational purpose. "Your visit is Tuesday" is informational. "Renew your plan and get 10% off" is likely a sales message. Many scripts for HVAC service agreement renewal calls do both. Test the exact script words, not the campaign label.

Hours. Section (c)(1) bars telephone solicitations to residential subscribers before 8 a.m. or after 9 p.m. at the called party's location. That applies to solicitations, but many teams apply it to all outbound calls as a simple safe rule. Test time zones. A list stored in Central time and dialed from a server in Pacific time is a classic call window bug.

Reassigned numbers. Section (m) gives a safe harbor only if you checked the FCC's reassigned numbers database and got a specific kind of answer. A customer who gave you a number in 2019 may no longer own it. That is a reassigned number problem. Test that your wrong-number path stops the campaign for that number.

Established business relationship. Section (f)(5) defines it by time: 18 months after a purchase or transaction, or 3 months after an inquiry. A plan customer who last paid two years ago may be outside the window, and a do not call request overrides it.

Revocation. Section (a)(10) covers how consent can be revoked. The FCC adopted new revocation rules (FCC 26-67) on September 30, 2026, and released them October 1, 2026. They narrow "revoke-all" for informational calls and let callers name exclusive opt-out methods. They take effect 30 days after Federal Register publication, which had not happened as of October 7. See the Kelley Drye summary and the Nixon Peabody alert. Whatever the final text, test the behaviour: a spoken "stop calling me" must end the call and update suppression.

State laws can add rules. Verify yours. For a parallel, read real estate speed-to-lead AI and TCPA.

A test matrix for HVAC reminder calls testing

Good HVAC reminder calls testing crosses scenarios with conditions. A scenario alone tells you the script works in a quiet room. A condition alone tells you nothing about the logic.

A grid of eight reminder call scenarios against five caller conditions, with run counts per cell and darker cells for the highest-risk combinations.

The rows hold the failure modes. The columns hold what real callers do: TV noise, speakerphone in a car, fast speech with interruptions, long pauses. For accents see voice agent accent robustness. For noise see testing STT with background noise.

The darker cells are your priority. Wrong person plus noise is one. Stop request plus interruption is another. Test them with more runs.

How to run HVAC reminder calls testing before peak season

1. Freeze the inputs. Export the real campaign list for one company, with plan status, equipment and phone number. Remove names for the test set. Keep the structure.

2. Write the expected record for each row. For every test customer, decide the correct outcome and the only allowed writes. This is your answer key.

3. Build the scenarios. Cover the seven failure modes plus a happy path and a stop request. Add the voicemail greetings: short, long, with a long beep, and a business greeting.

4. Cross them with caller conditions. Use the matrix above. Assign more runs to the dark cells.

5. Run the calls over the real path. Dial through the same telephony route the campaign uses. A web-only test can hide codec and detection effects.

6. Judge audio and record. Check what was said, what the agent did and what changed in the field service system. Compare the record to your answer key.

7. Test the wave logic. Run a mini campaign against a sandbox schedule with limited slots. Confirm that the agent stops offering full days.

8. Gate the release. Set thresholds (see the rubric below). Block a prompt change that crosses a red line, and re-run the whole set after each change.

Evalgent can help with steps 3 to 6 of HVAC reminder calls testing, and an HVAC tune-up reminder AI built in-house is exactly that use case. It generates test scenarios from the agent's prompt and flows, simulates callers with set accents, pace, interruption levels and background noise over phone, SIP or WebRTC, and evaluates from the audio rather than the transcript alone. Evalgent works with teams to set up evals for a first agent. It is not self-serve.

How many calls are enough

If a failure matters, you want to know it is rare. A rule of thumb helps. If you run n independent test calls and see zero failures, the 95% upper bound on the true failure rate is roughly 3 divided by n. This is the "rule of three".

Calls with zero failuresApproximate upper bound on failure rate
1003%
3001%

Apply it per critical scenario, not to the whole set. If "wrong person hears plan details" must stay under 3%, you need about 100 clean wrong-person calls. These bounds assume independent, representative calls, which test calls rarely are. Treat them as a floor.

A scoring rubric you can copy

These thresholds are suggestions. Set your own with your legal and ops leads.

CheckRed lineTarget
Disclosure to wrong personAny case0 in the test set
Stop request honored in suppressionAny miss100%
Plan status stated correctlyBelow 99%100%
Correct unit on bookingBelow 98%99%+
Machine read as human, then pitchAbove 2%Below 1%
Human read as machine, hung upAbove 3%Below 1%
Booking within live capacityAny overbook0
Date and time written correctlyBelow 99%99.5%+

Monitor live campaigns, not only the test set

A test set shows the agent on the day you built it. A campaign runs for weeks while plans change. Review a sample of live calls every day of a wave.

Evalgent's production monitoring takes recordings you push, transcribes them, maps them to scenarios and judges them. It flags PII leakage, tool-call failures, latency spikes and policy failures with fix recommendations. For reminder campaigns, the useful flags are a plan detail spoken to a non-owner and a booking tool call that failed while the agent said "you're all set". Related reading: monitoring AI voice agents in production, the go-live checklist, AI receptionist for HVAC and evaluating a reminder agent vendor.

Frequently asked questions

Can an AI voice agent legally make HVAC maintenance reminder calls?

Often yes, with the right consent. The FCC ruled in February 2024 that AI-generated voices are artificial voices under the TCPA, so prior express consent is needed, and written consent for telemarketing. Check consent records and state law with counsel. This is not legal advice.

Are HVAC tune-up reminder calls telemarketing under the TCPA?

It depends on the call's purpose. A pure visit confirmation is informational. A call that also pushes a plan renewal, as outbound voice agent HVAC teams often script, or discount can be treated as marketing, since payment is expected. Test the exact words your agent says. If the script mixes both, assume the stricter written-consent standard applies and ask counsel.

How do I test an AI reminder agent before peak season?

For HVAC reminder calls testing, build scenarios from real campaign rows: wrong person, stale plan, two units, voicemail, a stop request and a full schedule. Cross them with noise, pace and interruptions. Dial over your real telephony path. Judge the audio and compare the written record to an answer key. Re-run after every prompt change.

How many reminder calls should I review before launch?

Plan for about 100 clean calls per critical scenario to show a failure rate under 3%, and about 300 for under 1%. That is the rule of three, whose assumptions test calls rarely meet. Spend more on high-risk cells.

What happens when an AI reminder call reaches voicemail?

It depends on detection. Short greetings can be read as human, so the agent talks into the beep. Test short, long and business greetings. Check the agent never books or logs "spoke with customer" after a machine, and that any message names your business and number.

How do I stop an AI reminder from overbooking my techs?

Size each wave from live open slots, not a spreadsheet. Divide open slots by the booking requests per call, with headroom. Have the agent re-check availability before confirming. Test capacity drops mid-campaign and a slot that fills while the agent speaks.

What should the agent say when the person answering is not the account holder?

Say only who is calling and that you are calling for the account holder. Offer a callback. Do not state the plan, the unit, the date or any amount. Log a no-contact attempt, not a decline. Test with a tenant, a spouse and a child answering the line.

How often should I re-test reminder calls after a prompt change?

Every time. A prompt edit can change greetings, the offer or stop handling. Re-run the full scenario set before each release. Also re-run when your field service software changes plan statuses or you add a company to the campaign.

The bottom line

A reminder call is only as good as the record it writes and the person it reaches. Test the list, the greeting, the offer, the capacity and the stop request before the first hot week, then keep sampling live calls.

Related Articles