AI HVAC dispatch for emergency calls sorts each night caller using the owner's written list. A gas smell or carbon monoxide alarm gets a fixed line to leave and call 911 or the gas company from outside. Dangerous cold or heat goes to the on-call technician with the job written first, and everything else books the first morning window.
Key Takeaways
- At 2am the agent sorts calls and never troubleshoots a gas smell.
- The owner's written list decides which calls wake a technician.
- Write the address and problem to your system before the transfer starts.
This post is part of our guide to AI voice agents for field service management, where the owner's list decides urgency. Below, we cover the 2am no-heat call from our HVAC guide. Along the way, we show how the routing works in Dograh, the open-source AI voice agent platform we build.
What a 2am call has to sort out
At 2am on a January night, a caller says the furnace is dead and the house is down to 54 degrees. The agent's job on that call is to sort it. Fixing waits for a technician.
Every night call lands in one of three places. A gas smell or a carbon monoxide alarm gets a fixed safety line and the call ends. Dangerous cold or heat goes to the on-call technician now. Everything else gets the first window in the morning. The BLS outlook for HVAC technicians notes that they may be on call for emergencies, and good sorting lets that person sleep on the nights nothing is urgent.
The owner writes down what counts as urgent, and the agent follows that list. It never decides urgency on its own judgement, and it never diagnoses a furnace over the phone.
Gas and carbon monoxide: one line, then the call ends
A gas call gets no questions at all. Guidance from the Pipeline and Hazardous Materials Safety Administration tells people not to use a phone or work light switches near a suspected leak, and to call 911 from a neighbor's house or somewhere well away. Every question an agent asks keeps a phone inside the house.
So the agent plays one line: "If you smell gas or your carbon monoxide alarm is going off, leave the building now and call 911 or your gas company from outside." It ends the call right after, and a Webhook node then passes the caller's number and the outcome to your system, and your system alerts the on-call person once the caller is out.
Carbon monoxide gets the same line. The CDC says more than 400 Americans die each year from unintentional carbon monoxide poisoning not linked to fires, and it names gas and oil furnaces among the household sources. A beeping detector at 2am means get outside, and the furnace can wait for daylight.
The line has to be fixed text, because inside a step the model writes its own words. Put a short version in the Greeting Text after your company name, and switch off Allow Greeting Interruption on the Start Call node, since it is on by default. Repeat it as Transition Speech on a "gas smell or CO alarm" pathway, where it plays with the caller muted. Trying to book a truck for a gas smell would only keep the caller on the phone inside the house.
Open Source Alternative to Vapi / Retell
Self-hosted voice agent platform — no per-minute fees
dograh-hq/dograh
Star on GitHub
The few questions before a technician is woken
For everything except gas, the agent asks a short list your company wrote, and each answer picks a path. The list usually asks whether anyone at home is at risk from the cold, such as an infant, an older person or someone with a medical condition, and whether the system is giving off smoke or a burning smell.
Smoke or a burning smell from the furnace gets "If you're in danger, get to safety and call 911." Someone who already feels unwell gets "If this is a medical emergency, please call 911 now." A yes on the risk question sends the call to the technician. A no gets the first morning window from your scheduling software, and the caller hears that the office already has the details.
Before any transfer, the agent writes the job. An HTTP API tool sends the address, the problem in the caller's words and the answers to your field service software, because no summary travels with a transfer by default. When the technician picks up, the job is already on the board.
Routing to tonight's technician
Transfer Call works on Twilio, Telnyx, Plivo, Cloudonix and Asterisk ARI. Dograh calls the technician first and joins the caller only once the technician answers. On Twilio, you can switch on a short spoken introduction that both people hear before the line joins.
Who to call comes from the Destination Source. Dynamic HTTP Resolver suits a rota that changes every night. During the call, Dograh posts the values you choose, such as the service zone, to your rota system, which returns tonight's number. If the resolver fails or times out, the transfer stops before dialing and the agent carries on with the caller.

Context Mapping suits fixed routes. A rule reads a value, such as service_zone loaded with the customer's record or system_type gathered on the call, and maps each value to a number. Rules run top to bottom and the first match wins. A fallback destination, such as the owner's mobile, catches anything unmatched. A company with one technician in the north, one in the south and a boiler specialist can route that way without building a resolver.
Join the Dograh Community
Dograh is an OSS alternative to Vapi. Join our Slack community for queries, releases, best practices & community interactions.
If nobody answers, and testing before winter
The transfer rings for 30 seconds by default, and you can set anything from 5 to 120. If the technician does not answer, the caller stays with the agent. Tell it in the prompt to take a callback request and page the next person through an HTTP API tool, so the call never ends with nothing recorded. AI voice agents for after-hours coverage covers that escalation chain in depth.
Business hours decide when this flow runs. A prompt can read the local time through the built-in variable {{current_time_America/Chicago}}, with your own time zone in place of Chicago, so daytime urgent calls go to the office instead.
Test before the first cold night. Browser test calls cannot run Transfer Call, so test over a real phone. Try the gas pathway with the phrases your dispatchers have heard, such as "the basement smells like rotten eggs" or "the detector keeps beeping", then open each call's trace to confirm the pathway fired. Built-in QA can score a sample of night calls every week. The daytime side of the same season, when the phone never stops, is in AI answering service for HVAC companies.
Glossary
- Dynamic HTTP Resolver
- A Transfer Call destination source where Dograh posts values from the call to your rota system and gets back tonight's number. If it fails, the transfer stops before dialing and the agent stays with the caller.
- Context Mapping
- A Transfer Call destination source that maps a value such as service zone or system type to a number. Rules run top to bottom, the first match wins, and a fallback catches the rest.
- Transition Speech
- A typed line or recorded clip that plays unchanged as the call takes a pathway, and the caller is muted while it plays. The gas and carbon monoxide line lives here.
- Fallback destination
- The number a Context Mapping transfer uses when no rule matches, such as the owner's mobile. Without one, an unmatched call keeps talking to the agent instead of reaching a person.

