<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abe</title>
    <description>The latest articles on DEV Community by Abe (@oncrew).</description>
    <link>https://dev.to/oncrew</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3924410%2F885ce2bb-4a8a-4f98-8b03-db2486811e86.png</url>
      <title>DEV Community: Abe</title>
      <link>https://dev.to/oncrew</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oncrew"/>
    <language>en</language>
    <item>
      <title>Answering Service for Plumbers: What Your Intake Has to Capture Before You Send a Truck</title>
      <dc:creator>Abe</dc:creator>
      <pubDate>Mon, 11 May 2026 09:51:03 +0000</pubDate>
      <link>https://dev.to/oncrew/answering-service-for-plumbers-what-your-intake-has-to-capture-before-you-send-a-truck-4j50</link>
      <guid>https://dev.to/oncrew/answering-service-for-plumbers-what-your-intake-has-to-capture-before-you-send-a-truck-4j50</guid>
      <description>&lt;h2&gt;
  
  
  A note on bias before you read
&lt;/h2&gt;

&lt;p&gt;I'm Abe, founder of OnCrew. We build AI receptionists for service businesses, including plumbers, so I have a commercial reason to write about this topic. I've tried to make this useful even if you never click a link to anything I sell — the call-handling failures described here are independent of who answers your phones.&lt;/p&gt;

&lt;p&gt;If you read this and decide your existing answering service or in-house dispatcher is doing fine, great. If you read it and realize your intake is leaking jobs, fix it however you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why plumbing calls are different from "normal" service calls
&lt;/h2&gt;

&lt;p&gt;Most generic answering-service advice treats every inbound call the same: be polite, take a name, take a number, take a message. That's fine for a law firm. It's a slow bleed for a plumbing company.&lt;/p&gt;

&lt;p&gt;Plumbing has a few properties that mess with naive intake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time-pressure asymmetry.&lt;/strong&gt; A clogged kitchen drain can wait until tomorrow. A burst supply line can flood a finished basement in twenty minutes. The same caller may not know which of those they have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Truck economics.&lt;/strong&gt; Rolling a truck with the wrong tech, wrong parts, or wrong size of equipment is the single most expensive intake mistake. A poorly-captured call can turn a one-trip job into three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Property-type variance.&lt;/strong&gt; Residential, commercial, multi-family, and new construction calls require different dispatch behavior. So do owner-occupied vs. landlord-tenant situations, which determine who can authorize work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insurance and water-mitigation overlap.&lt;/strong&gt; Many plumbing emergencies become insurance jobs the moment standing water appears. Capturing this at the front door changes how the job is run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensing and scope.&lt;/strong&gt; The person taking the call frequently cannot answer technical or legal questions about whether a job is permitted, code-compliant, or covered. Saying the wrong thing here is worse than not answering at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A plumbing answering service — human, AI, or hybrid — that doesn't understand these properties will sound competent on the call and still cost you money on the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The intake fields that actually matter
&lt;/h2&gt;

&lt;p&gt;The goal of intake is not to "qualify the lead." The goal is to give your dispatcher enough information to make a correct routing decision and your tech enough information to arrive prepared.&lt;/p&gt;

&lt;p&gt;Below is the minimum field set I'd want captured on every plumbing call. Anything more is a bonus; anything less is gambling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caller and property&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caller name and callback number (always confirm by readback).&lt;/li&gt;
&lt;li&gt;Is the caller the property owner, tenant, property manager, or someone else? Who can authorize work and approve payment?&lt;/li&gt;
&lt;li&gt;Service address, with unit number for multi-family.&lt;/li&gt;
&lt;li&gt;Property type: single-family, condo, apartment, commercial, restaurant, new construction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-sentence description in the caller's own words.&lt;/li&gt;
&lt;li&gt;Specific fixture or system: water heater, toilet, kitchen sink, main line, slab leak, sump pump, gas line, sewer ejector, etc.&lt;/li&gt;
&lt;li&gt;Visible water? If yes, where and how much? Is it active or stopped?&lt;/li&gt;
&lt;li&gt;Has the main shutoff been turned off? Does the caller know where it is?&lt;/li&gt;
&lt;li&gt;When did this start? Has it gotten worse? Has anyone worked on it already?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Access and logistics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are pets, gates, alarm codes, or parking constraints relevant?&lt;/li&gt;
&lt;li&gt;Earliest time the caller can be on-site or grant access.&lt;/li&gt;
&lt;li&gt;Any access restrictions (HOA hours, commercial business hours, tenant coordination).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Commercial / urgency context&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For commercial: are operations affected? Is water shut off to part of the building?&lt;/li&gt;
&lt;li&gt;For residential: is the only toilet, shower, or water source in the home affected?&lt;/li&gt;
&lt;li&gt;Insurance involved? Has a mitigation company already been called?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Service expectations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does the caller want: estimate, repair today, repair this week, second opinion, warranty work?&lt;/li&gt;
&lt;li&gt;Have they used you before? (Pull the existing record if so.)&lt;/li&gt;
&lt;li&gt;How did they hear about you? (Useful for marketing attribution; never required to dispatch.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can get clean answers to those fields on every call, your dispatcher's job becomes routing instead of interrogation. That's the real cost saving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Emergency vs routine triage
&lt;/h2&gt;

&lt;p&gt;The single most important decision an answering service makes for a plumber is the emergency-or-not call. Get it wrong in one direction and you wake your on-call tech for a slow drip. Get it wrong in the other and you find out at 7 a.m. that a hardwood floor was underwater all night.&lt;/p&gt;

&lt;p&gt;A workable triage rubric looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat as emergency / page on-call tech&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active uncontrolled water at the property.&lt;/li&gt;
&lt;li&gt;Sewage backing up into the living space.&lt;/li&gt;
&lt;li&gt;Suspected gas leak — and the call should immediately include an instruction to leave the property and call the gas utility or 911 first.&lt;/li&gt;
&lt;li&gt;No water at all in the residence, especially with vulnerable occupants.&lt;/li&gt;
&lt;li&gt;Commercial property where operations are halted and revenue is bleeding.&lt;/li&gt;
&lt;li&gt;Frozen-pipe season, exposed pipe with no heat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Treat as next-business-day&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow drains, even fully clogged ones, if there is no overflow.&lt;/li&gt;
&lt;li&gt;Running toilets, single dripping faucets.&lt;/li&gt;
&lt;li&gt;Water heater out, but the household has alternatives or it's not winter and not the only unit.&lt;/li&gt;
&lt;li&gt;Diagnostic or estimate requests.&lt;/li&gt;
&lt;li&gt;Pre-listing inspections, real-estate-driven work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Always escalate to a human regardless of bucket&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The caller is in distress, elderly, or describes a safety concern.&lt;/li&gt;
&lt;li&gt;The caller mentions injury, electrical contact with water, or carbon monoxide.&lt;/li&gt;
&lt;li&gt;Suspected gas — already mentioned, repeated for emphasis.&lt;/li&gt;
&lt;li&gt;The caller asks to speak to a person.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "always escalate" list is the one most automation skips. Don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  After-hours capture: the part most shops underinvest in
&lt;/h2&gt;

&lt;p&gt;Most plumbing companies lose more revenue between 5 p.m. and 8 a.m. than they realize. Not because emergencies happen overnight — they do, but they're a small slice — but because Tuesday-evening homeowners decide at 9 p.m. that they're going to call someone tomorrow. Whoever picks up first the next morning often wins the job.&lt;/p&gt;

&lt;p&gt;After-hours capture should do four things, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Answer fast.&lt;/strong&gt; Not "within three rings" fast — first ring, no IVR maze. Every additional second before a human-feeling voice costs you abandonment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triage to true urgency.&lt;/strong&gt; Use the rubric above. Don't page your on-call tech for a routine call; don't ignore an actual emergency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Book or hold the slot.&lt;/strong&gt; If your dispatch system supports it, soft-book the morning slot during the call. If not, capture the preferred window and confirm "first call in the morning."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send a confirmation immediately.&lt;/strong&gt; Text the caller a summary: "We have you down for Wednesday 8–10 a.m. We'll text again before the tech is on the way." This single message tends to reduce cancellations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your current answering setup does only step one, you're paying for a glorified voicemail.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an AI receptionist or answering service should &lt;em&gt;not&lt;/em&gt; promise
&lt;/h2&gt;

&lt;p&gt;This is the part of the conversation that gets glossed over in marketing copy. Honest scope is part of quality.&lt;/p&gt;

&lt;p&gt;An AI or third-party answering service is well-suited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Picking up consistently, including overflow and after-hours.&lt;/li&gt;
&lt;li&gt;Capturing structured intake.&lt;/li&gt;
&lt;li&gt;Applying a triage rubric reliably.&lt;/li&gt;
&lt;li&gt;Sending confirmations and reminders.&lt;/li&gt;
&lt;li&gt;Pushing data into a CRM or dispatch tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is &lt;em&gt;not&lt;/em&gt; well-suited to, and should not promise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Guaranteed arrival times.&lt;/strong&gt; Only your dispatcher and the conditions of the day can offer a window, and even then only as a best estimate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quoting or binding pricing on complex jobs.&lt;/strong&gt; Flat-rate book numbers can be shared as ranges; a final price is the tech's call after seeing the job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Licensed judgment.&lt;/strong&gt; Whether something is to code, permittable, covered under warranty, or safe to defer is not a receptionist decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replacing emergency services.&lt;/strong&gt; Anything that smells like gas, electrical-plus-water, or injury goes to 911 or the utility first, your truck second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catching 100% of calls perfectly.&lt;/strong&gt; No system does. Anyone selling you "never miss a call" is selling you a slogan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a vendor pitches you on capabilities in that second list, that's a signal about the rest of their judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  A scorecard for choosing a plumbing answering service
&lt;/h2&gt;

&lt;p&gt;If you're evaluating options — AI, human, or hybrid — here's a compact checklist you can use on a sales call:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Question to ask&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Industry fluency&lt;/td&gt;
&lt;td&gt;"Walk me through how you'd handle a frozen-pipe call in February at 2 a.m."&lt;/td&gt;
&lt;td&gt;Generic scripts collapse here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intake completeness&lt;/td&gt;
&lt;td&gt;"Show me the exact fields captured on a typical call."&lt;/td&gt;
&lt;td&gt;If they can't show you, they don't capture them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triage rubric&lt;/td&gt;
&lt;td&gt;"What gets paged to on-call, and who decides?"&lt;/td&gt;
&lt;td&gt;A vague answer means inconsistent nights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escalation path&lt;/td&gt;
&lt;td&gt;"What happens if a caller is distressed or mentions gas?"&lt;/td&gt;
&lt;td&gt;Non-negotiable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRM / dispatch integration&lt;/td&gt;
&lt;td&gt;"Which dispatch systems do you push to, and how?"&lt;/td&gt;
&lt;td&gt;Otherwise your dispatcher re-keys everything.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirmations&lt;/td&gt;
&lt;td&gt;"Does the caller get a text immediately after the call?"&lt;/td&gt;
&lt;td&gt;Reduces no-shows and cancellations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reporting&lt;/td&gt;
&lt;td&gt;"Can I see every call, recording, and outcome?"&lt;/td&gt;
&lt;td&gt;You can't improve what you can't audit.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode&lt;/td&gt;
&lt;td&gt;"What happens when your system is down or unsure?"&lt;/td&gt;
&lt;td&gt;An honest answer is a good vendor signal.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If a vendor passes that scorecard, the price difference between options usually matters less than the operational difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  When OnCrew may fit, and when it won't
&lt;/h2&gt;

&lt;p&gt;To close the loop on the disclosure at the top: I run &lt;a href="https://oncrew.ai/answering/plumbers" rel="noopener noreferrer"&gt;OnCrew's answering service for plumbers&lt;/a&gt;, which is an AI receptionist tuned around the intake and triage logic described above. It fits best for plumbing shops that already have a dispatch process and want consistent, structured intake on every call — especially after hours and during overflow — without paying for a full-time human at 3 a.m.&lt;/p&gt;

&lt;p&gt;It is not the right tool if you want a single warm human who knows every regular customer by voice, or if your call volume is low enough that your existing dispatcher already answers everything on the first ring.&lt;/p&gt;

&lt;p&gt;Whatever you choose, the test is the same: pull last month's calls, listen to ten of them, and grade them against the intake field list and triage rubric above. The gap between what was captured and what should have been captured is the size of the problem you're solving. The vendor — AI, human, or some mix — is just the instrument.&lt;/p&gt;

&lt;p&gt;— Abe&lt;/p&gt;

</description>
      <category>automation</category>
    </item>
    <item>
      <title>HVAC Answering Service: A Practical Guide for Heating and Cooling Owners</title>
      <dc:creator>Abe</dc:creator>
      <pubDate>Mon, 11 May 2026 09:49:11 +0000</pubDate>
      <link>https://dev.to/oncrew/hvac-answering-service-a-practical-guide-for-heating-and-cooling-owners-3n32</link>
      <guid>https://dev.to/oncrew/hvac-answering-service-a-practical-guide-for-heating-and-cooling-owners-3n32</guid>
      <description>&lt;p&gt;Most HVAC owners do not lose jobs because their pricing is wrong. They lose jobs because the phone rang during a heat wave and nobody picked up.&lt;/p&gt;

&lt;p&gt;Residential HVAC runs on a strange call pattern. For weeks the phones are quiet. Then a cold snap hits, a furnace fails at 6 a.m., and call volume triples before lunch. Dispatch is on another line. Two homeowners go to voicemail. One calls the next contractor in the search results, and the job is gone before your office knew it existed.&lt;/p&gt;

&lt;p&gt;This is the gap an HVAC answering service is supposed to close. This guide is for owners and dispatchers trying to tell the good ones from the bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an HVAC answering service should actually do
&lt;/h2&gt;

&lt;p&gt;Strip away the marketing language and the job is narrow. An HVAC answering service answers the phone when your office is busy, closed, or buried by a peak-weather surge. It captures the right information, tags how urgent the call is, and hands it off to the on-call workflow so your team can decide what to do.&lt;/p&gt;

&lt;p&gt;It is not a dispatcher. It is not a technician. It does not promise an ETA. The HVAC company still owns service decisions, safety guidance, and who gets a truck and when.&lt;/p&gt;

&lt;p&gt;A good service should consistently do four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answer quickly, including nights, weekends, and storm days&lt;/li&gt;
&lt;li&gt;Run a real HVAC intake script, not a generic "name and number" message&lt;/li&gt;
&lt;li&gt;Distinguish urgent calls from informational ones&lt;/li&gt;
&lt;li&gt;Push the call to your on-call workflow in a form your team can act on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can only get two of those four, you have a call center, not an answering service.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical HVAC intake checklist
&lt;/h2&gt;

&lt;p&gt;The single biggest difference between a useful message and a useless one is the questions on the script. Generic services ask name, phone, and "reason for calling." That is not enough to triage a no-heat call in January.&lt;/p&gt;

&lt;p&gt;A strong HVAC intake captures, at minimum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caller name and best callback phone&lt;/li&gt;
&lt;li&gt;Full service address&lt;/li&gt;
&lt;li&gt;Equipment type if known: furnace, boiler, heat pump, mini-split, central AC, package unit&lt;/li&gt;
&lt;li&gt;Current thermostat reading vs setpoint&lt;/li&gt;
&lt;li&gt;When the symptoms started&lt;/li&gt;
&lt;li&gt;Vulnerable residents in the home (infants, elderly, medically dependent on temperature)&lt;/li&gt;
&lt;li&gt;Preferred callback window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From there, the script should branch by symptom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No heat in winter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the thermostat getting power&lt;/li&gt;
&lt;li&gt;Any error codes on the unit display&lt;/li&gt;
&lt;li&gt;Is the breaker tripped&lt;/li&gt;
&lt;li&gt;Last filter change or recent service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No cooling in a heat wave&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the outdoor unit running&lt;/li&gt;
&lt;li&gt;Indoor temperature now and at peak&lt;/li&gt;
&lt;li&gt;Any ice visible on the lines&lt;/li&gt;
&lt;li&gt;Was there a recent thermostat or wiring change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Gas smell near a furnace or water heater&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is a safety call, not a service call. The script should advise the caller to leave the home and contact the gas utility or 911 per local guidance, then capture details for your on-call team. The answering service is not the appropriate party to assess safety risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Water leak or condensate&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active leak or stain only&lt;/li&gt;
&lt;li&gt;Where in the home&lt;/li&gt;
&lt;li&gt;Is water reaching electrical or finished ceilings&lt;/li&gt;
&lt;li&gt;Has the homeowner shut the system off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tune-up, maintenance, or replacement estimate&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System age, brand, and stage if known&lt;/li&gt;
&lt;li&gt;Last service date or membership status&lt;/li&gt;
&lt;li&gt;Reason for the call: failed, end of life, efficiency, comfort&lt;/li&gt;
&lt;li&gt;Timeline: emergency, this month, this season&lt;/li&gt;
&lt;li&gt;Two or three callback windows that work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need every field on every call. You need a script disciplined enough to capture the ones that matter for that symptom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live, AI, and hybrid models
&lt;/h2&gt;

&lt;p&gt;There are three operating models on the market. Each has honest tradeoffs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live human answering services.&lt;/strong&gt; A trained agent picks up and works the script. Strengths: warmth, judgment on ambiguous calls, comfort with older or distressed callers. Weaknesses: per-minute pricing that can spike in busy weeks, queue times during regional weather events, and variable script adherence across agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI voice answering services.&lt;/strong&gt; A voice agent answers, runs the script, and posts a structured handoff. Strengths: consistent intake, no queue, predictable cost during surges. Weaknesses: accents and noisy lines can still trip recognition, and a poorly configured agent will sound robotic. The script and the handoff matter more than the brand of the AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hybrid setups.&lt;/strong&gt; AI answers first and captures the structured intake, then routes to a human for emotionally loaded calls or anything flagged urgent. Strengths: speed plus a safety net. Weaknesses: more moving parts and you need to actually test the handoff path.&lt;/p&gt;

&lt;p&gt;There is no universally correct answer. A two-truck shop with a tight on-call rotation may do well with AI plus a clear escalation rule. A larger company with bilingual demand may want live or hybrid coverage. Run the model that matches your callers, not the one that sounds most modern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escalation boundaries
&lt;/h2&gt;

&lt;p&gt;This is the part most marketing pages skip. An answering service should not make service decisions on your behalf. It should not promise a tech will be there in an hour. It should not diagnose a furnace over the phone. It should not tell a homeowner with a gas smell to wait.&lt;/p&gt;

&lt;p&gt;What it should do is follow the rules you set: tag the call by the urgency criteria you wrote, send the handoff to the on-call number, channel, or CRM you specified, and keep trying until someone on your side acknowledges it. Your dispatcher decides who goes where. Your techs decide what is safe. The service is the front door, not the captain.&lt;/p&gt;

&lt;p&gt;Write your escalation rules down before you sign anything. Define what counts as urgent, where urgent calls go, where non-urgent calls go, and what happens if no one acknowledges within X minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  An evaluation checklist for HVAC owners
&lt;/h2&gt;

&lt;p&gt;Before you commit, walk through these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the script handle the HVAC call types above, or is it a generic template&lt;/li&gt;
&lt;li&gt;How are gas-smell calls handled&lt;/li&gt;
&lt;li&gt;How are urgent calls routed, and what is the retry path if no one acknowledges&lt;/li&gt;
&lt;li&gt;Does it integrate with your field software, or will your team retype every ticket&lt;/li&gt;
&lt;li&gt;What does pricing look like during a real surge week, not an average week&lt;/li&gt;
&lt;li&gt;Can you listen to or read transcripts of actual calls&lt;/li&gt;
&lt;li&gt;Who owns the data and the recordings&lt;/li&gt;
&lt;li&gt;How fast can you change the script when your hours, service area, or pricing change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a provider cannot give you straight answers, keep looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where OnCrew fits
&lt;/h2&gt;

&lt;p&gt;If you want a deeper buyer-side breakdown, including how to write a triage script and what a clean handoff looks like in practice, OnCrew has a guide written specifically for HVAC owners.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://oncrew.ai/resources/hvac-answering-service" rel="noopener noreferrer"&gt;https://oncrew.ai/resources/hvac-answering-service&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To roughly size what missed calls are costing your shop before you change anything, this calculator is a useful starting point:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://oncrew.ai/tools/missed-call-calculator" rel="noopener noreferrer"&gt;https://oncrew.ai/tools/missed-call-calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OnCrew offers a 14-day free trial with no charge today and guided setup, but the guide above is worth reading even if you stay with your current provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;An HVAC answering service is not a magic fix or a replacement for a good dispatcher. It is a disciplined front door for the hours and weeks when your team cannot answer fast enough. Picked carefully, it captures calls you would otherwise lose. Picked carelessly, it is one more vendor charging you to take messages.&lt;/p&gt;

&lt;p&gt;Spend an afternoon on the script and the escalation rules. That afternoon will outperform almost any marketing decision you make this season.&lt;/p&gt;

&lt;p&gt;Written by Abe.&lt;/p&gt;

</description>
      <category>hvac</category>
      <category>ai</category>
      <category>contractors</category>
      <category>fieldservice</category>
    </item>
    <item>
      <title>Building contractor automation without overpromising dispatch: boundaries, observability, and escalation</title>
      <dc:creator>Abe</dc:creator>
      <pubDate>Mon, 11 May 2026 08:04:16 +0000</pubDate>
      <link>https://dev.to/oncrew/building-contractor-automation-without-overpromising-dispatch-boundaries-observability-and-179i</link>
      <guid>https://dev.to/oncrew/building-contractor-automation-without-overpromising-dispatch-boundaries-observability-and-179i</guid>
      <description>&lt;p&gt;I'm Abe, founder of OnCrew. We build the AI answering service for HVAC, plumbing, electrical, and roofing contractors. This is a follow-up to my earlier post on triage architecture. Here I want to write about something less glamorous but more important: the boundaries you have to design around, the observability you need to know they're holding, and the escalation paths you need so that a misclassified call doesn't turn into a real-world problem.&lt;/p&gt;

&lt;p&gt;The shorthand version of this article: it's tempting to build a "full dispatcher" automation. Don't. Build the part that's automatable, leave the part that isn't to humans, and make the seam between them legible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why dispatch is not the part to automate
&lt;/h2&gt;

&lt;p&gt;Dispatch — actually slotting a job into a route, promising a customer that a tech will be there at 2:15pm, taking a payment, handling a warranty discussion — has a few properties that make it a bad fit for current-generation automation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time inventory and constraints.&lt;/strong&gt; Dispatch depends on where every tech currently is, what jobs they're already committed to, what parts are on the truck, and what skill mix the next job needs. Modeling this in an AI agent is possible but the latency and reliability profile is bad. Get it wrong and you've promised something you can't deliver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Liability surface.&lt;/strong&gt; A tech ETA is a soft commitment to a customer. Miss it and they're entitled to be angry. Promise it without authority and the shop is on the hook for the disappointment, not the vendor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High-empathy edge cases.&lt;/strong&gt; A frantic customer at 2am whose basement is flooding does not need an AI to read them a service window from a script. They need a person to say "we're getting somebody on the way, here's what to do in the meantime to limit damage." That voice belongs to a human dispatcher.&lt;/p&gt;

&lt;p&gt;So our design rule is: the agent does intake, triage, and structured handoff. The human dispatcher does dispatch. The seam between them is where we spend most of our engineering effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boundary layer
&lt;/h2&gt;

&lt;p&gt;The boundary layer is a small piece of code with one job: prevent the agent from saying anything dispatcher-shaped. It runs after the response generator and before the TTS layer.&lt;/p&gt;

&lt;p&gt;Filters in the boundary layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Promise words.&lt;/strong&gt; "Guarantee," "definitely," "we will be there," "I'll send," "we'll dispatch." These get rejected or rewritten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-of-arrival statements.&lt;/strong&gt; Anything matching a pattern like "in X minutes," "around X o'clock," "by X" gets rewritten to "we'll alert the on-call team with your details."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price statements.&lt;/strong&gt; "It'll cost $X," "the service fee is $X," any dollar-denominated quote. Rewritten to "the team will be able to give you pricing when they follow up."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostic statements.&lt;/strong&gt; "It sounds like your capacitor is failing," "that's probably a clogged drain." Rewritten to "I'll note the symptoms for the team to assess."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety-action statements.&lt;/strong&gt; "You should turn the breaker off," "go ahead and shut the main water valve." Rewritten in most cases to "I'll have the on-call team follow up about that" except for explicit life-safety direction (call 911, leave the building if gas smell), which is allowed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This boundary layer is the most boring part of the system and the most important. The LLM will, on its own initiative, occasionally say something it shouldn't. The boundary layer catches it. We treat any boundary-layer rewrite as a signal — it tells us where the response generator's prompts need work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability
&lt;/h2&gt;

&lt;p&gt;You cannot maintain these boundaries blind. The minimum observability surface for a phone agent that handles real calls:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-call structured summary.&lt;/strong&gt; Captured fields, classification, action log. Stored as a queryable record, not a free-text blob.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-call boundary-layer events.&lt;/strong&gt; Every rewrite or rejection logged with the candidate response, the rule that triggered, and the final response. This is the dataset you need to improve the prompts. Without it you're guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-call ASR confidence histogram.&lt;/strong&gt; Especially on critical fields (callback number, address). Low-confidence regions get flagged for review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-call disposition.&lt;/strong&gt; What happened to the captured ticket downstream? Did the dispatcher act on it? Did the call get returned within X hours? Did the customer call back saying the agent got something wrong?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregate dashboards.&lt;/strong&gt; Classification distributions over time. Boundary-layer event rates. Field-coverage rates per trade. Average call duration. These let you spot drift before the customer does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalation alerts.&lt;/strong&gt; When a call gets misclassified, or a field that should always be captured wasn't, or a known-bad utterance was generated, an alert fires to a human review queue. We staff this queue. It's the only way to catch regressions in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escalation paths
&lt;/h2&gt;

&lt;p&gt;There are calls the agent shouldn't handle. The design question is what happens when it encounters one.&lt;/p&gt;

&lt;p&gt;We have three escalation paths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Live transfer to the on-call human.&lt;/strong&gt; For calls flagged as urgent and where the shop has a live-answer human on the on-call line. The agent captures intake, then connects. The transfer is a hand-off, not a hot-potato — we pass the captured fields and a one-line summary so the human starts informed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Alert with structured payload.&lt;/strong&gt; For calls flagged as urgent where there isn't a live-answer line — most shops, most of the time. The agent captures intake, completes the call with the caller, and fires an alert into the shop's configured workflow (text, phone, Slack, webhook into dispatch tool, email). The on-call human sees the structured intake and decides whether to call the customer back themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Self-direction to 911 / utility.&lt;/strong&gt; For life-safety calls — gas smell with respiratory symptoms, smoke, electrocution risk, downed lines. The agent explicitly tells the caller to call 911 and/or the utility's emergency number while also capturing intake for the shop's records. This is not a substitute for emergency services. We don't pretend it is.&lt;/p&gt;

&lt;p&gt;The thing to avoid is the fourth path: "agent improvises and tells the caller something it shouldn't." That's what the boundary layer is for. If the agent doesn't know what to do, the right behavior is to capture what it can, complete the call politely, and let the human follow up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "automation" actually means in this domain
&lt;/h2&gt;

&lt;p&gt;I want to argue for a definition. "Automating" a piece of contractor operations doesn't mean replacing the human at every step. It means moving the routine, structured, time-of-day-independent work onto a machine, and leaving the judgment-heavy, real-time, relationship-heavy work to the human.&lt;/p&gt;

&lt;p&gt;Phone intake is mostly routine and structured. Pattern-matching urgency cues is mostly routine and structured. Producing a clean ticket is mostly routine and structured. These are good candidates.&lt;/p&gt;

&lt;p&gt;Dispatch is real-time and judgment-heavy. Payment is judgment-heavy and liability-laden. Warranty discussions are relationship-heavy. These are bad candidates, today.&lt;/p&gt;

&lt;p&gt;The framing matters because it changes what you build. If your goal is to replace the dispatcher, you'll build a system that overreaches and disappoints. If your goal is to make the dispatcher's morning easier — clean tickets waiting in priority order, urgent calls already alerted, transcripts available for review — you'll build a system that the dispatcher actually wants.&lt;/p&gt;

&lt;p&gt;This is one of those places where the right ambition is the smaller ambition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concrete checklist for the design
&lt;/h2&gt;

&lt;p&gt;If you're building something similar, here's what I'd make sure you have before you put it in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hard boundary on promise words and ETA statements, enforced in code.&lt;/li&gt;
&lt;li&gt;Per-call boundary-layer event log.&lt;/li&gt;
&lt;li&gt;Structured intake schema per trade, with field-coverage instrumentation.&lt;/li&gt;
&lt;li&gt;Escalation paths: live transfer, alert with payload, self-direction to emergency services.&lt;/li&gt;
&lt;li&gt;Human review queue for flagged calls.&lt;/li&gt;
&lt;li&gt;Disposition feedback loop from the dispatcher back into the training data.&lt;/li&gt;
&lt;li&gt;Honest marketing copy. If you tell the buyer the agent "dispatches" or "books" calls when it actually intakes and alerts, you've built a credibility debt that you'll pay down for the lifetime of the customer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The OnCrew side of this is on our &lt;a href="https://oncrew.ai/answering/contractors" rel="noopener noreferrer"&gt;contractor answering service&lt;/a&gt; page if you want to see the buyer-facing version. There's a demo line at (818) 578-4783 if you want to call it and see how the boundary layer behaves in real time. (Try to get it to promise you an ETA. It won't.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;The work in this space isn't deciding whether AI can do contractor intake — it clearly can. The work is deciding what AI shouldn't do, building the fences to enforce it, and making the seam to humans clean enough that the whole system actually works. That's the part that takes the time. That's the part that's worth building well.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>contractors</category>
      <category>automation</category>
      <category>fieldservice</category>
    </item>
    <item>
      <title>Designing AI agents for contractor call triage: architecture, prompts, state, and safe handoff</title>
      <dc:creator>Abe</dc:creator>
      <pubDate>Mon, 11 May 2026 08:03:57 +0000</pubDate>
      <link>https://dev.to/oncrew/designing-ai-agents-for-contractor-call-triage-architecture-prompts-state-and-safe-handoff-2pok</link>
      <guid>https://dev.to/oncrew/designing-ai-agents-for-contractor-call-triage-architecture-prompts-state-and-safe-handoff-2pok</guid>
      <description>&lt;p&gt;I'm Abe, founder of OnCrew, an AI answering service for HVAC, plumbing, electrical, and roofing contractors. This is a technical write-up of how we approach the design of a phone agent that has to do trade-specific intake and triage in real time, without overpromising things that matter (like a tech's arrival time) or under-handling things that matter (like a gas-smell call at 2am).&lt;/p&gt;

&lt;p&gt;I'll cover the architecture, the prompt structure, how we manage state across a call, what we hand off, and the boundaries we deliberately don't cross. This is meant for developers building production phone agents in adjacent verticals, not for buyers. If you want the buyer's version of this, the marketing site has it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of the problem
&lt;/h2&gt;

&lt;p&gt;A residential contractor call has three phases that are easy to confuse:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Detection&lt;/strong&gt; — what kind of call is this? (Emergency vs routine. New customer vs existing. In-trade vs out-of-trade.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intake&lt;/strong&gt; — collect the fields the dispatcher needs to act on the ticket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoff&lt;/strong&gt; — decide what happens after the call. Alert the on-call tech? Queue a callback? Direct to 911? Send to the CRM?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most generic phone agents collapse these phases into a single linear script and that's where they fail. A real call doesn't go in order. The caller will mention an emergency symptom three sentences into a routine appointment request. The agent has to notice and re-classify. A linear script can't.&lt;/p&gt;

&lt;p&gt;So the first architectural decision is to treat the call as an event stream and run classification continuously, not just at the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;The high-level pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;caller speech -&amp;gt; ASR -&amp;gt; turn buffer -&amp;gt; classifier -&amp;gt; intent state -&amp;gt;
  -&amp;gt; intake policy -&amp;gt; response generator -&amp;gt; TTS -&amp;gt; caller
                                |
                                v
                      action queue (alerts, webhooks, summaries)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The pieces that matter:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn buffer.&lt;/strong&gt; Holds the last N utterances and the running intent state. Not just the immediate user turn — context windows of 4-8 turns let the classifier pick up emergency cues that appear mid-conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Classifier.&lt;/strong&gt; Two-pass. Pass one is a fast model that runs on every turn and outputs a structured classification (&lt;code&gt;intent&lt;/code&gt;, &lt;code&gt;trade&lt;/code&gt;, &lt;code&gt;urgency&lt;/code&gt;, &lt;code&gt;out_of_scope_flags&lt;/code&gt;). Pass two is a slower verification model that only fires when the fast model crosses a confidence threshold for an urgent or out-of-scope classification, to avoid false-positive emergencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent state.&lt;/strong&gt; A typed object that persists across the call. Fields include &lt;code&gt;trade&lt;/code&gt;, &lt;code&gt;service_category&lt;/code&gt;, &lt;code&gt;urgency_band&lt;/code&gt;, &lt;code&gt;caller_role&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;callback_number&lt;/code&gt;, &lt;code&gt;appointment_window&lt;/code&gt;, &lt;code&gt;access_notes&lt;/code&gt;, &lt;code&gt;flags&lt;/code&gt;. The intake policy reads this and decides what to ask next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intake policy.&lt;/strong&gt; A state machine that drives question selection. We deliberately don't let the LLM decide the next question in a free-form way — too easy for it to skip required fields. The policy enforces field coverage based on &lt;code&gt;trade&lt;/code&gt; and &lt;code&gt;urgency_band&lt;/code&gt;. The LLM only generates the natural-language form of the question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response generator.&lt;/strong&gt; Generates the spoken response in a fixed conversational style. Constraints: doesn't promise ETA, doesn't quote prices, doesn't diagnose, doesn't tell the caller it's safe to do anything physical to their equipment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action queue.&lt;/strong&gt; Decoupled from the call. Webhooks, alerts, CRM writes, recording finalization, and summary generation all run async after the call ends or asynchronously during the call for time-sensitive alerts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt structure
&lt;/h2&gt;

&lt;p&gt;The single biggest mistake I see in early-stage phone agents is one giant system prompt that tries to be a personality, a knowledge base, and an intake script all at once. We split this into three concerns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The persona prompt.&lt;/strong&gt; Short. Stable. Defines tone, pace, and identity ("you're answering for [Company]"). Doesn't include trade knowledge or intake fields. Doesn't change across calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade pack.&lt;/strong&gt; Per-trade content: vocabulary, urgency cues, sample fields, sample boundary statements. HVAC, plumbing, electrical, and roofing each have their own pack. The pack is selected at the start of the call based on the caller's first utterance or the configured shop's primary trade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The intake policy as structured instructions.&lt;/strong&gt; Not free prose. A list of fields with their preconditions, ask-priorities, and example phrasings. This is the part that's easy to get wrong if you put it in prose, because the model will skip fields it thinks are implicit.&lt;/p&gt;

&lt;p&gt;The classifier and the response generator see different subsets of this. The classifier sees the trade pack but not the persona. The response generator sees the persona and the current field-to-ask but not the full intake policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Urgency triage, with hard edges
&lt;/h2&gt;

&lt;p&gt;This is the part I want to be careful about, because it's where overpromising can cause harm.&lt;/p&gt;

&lt;p&gt;We pattern-match on emergency-shaped language using a layered approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lexical cues.&lt;/strong&gt; Direct phrases that map to urgency without ambiguity: "gas smell," "sparking," "active leak," "no heat," "burst pipe," "sewage backup," "panel buzzing," "smoke," "exposed wiring," "tarp."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Symptom cues.&lt;/strong&gt; Combinations that imply urgency without naming it: "water everywhere," "I can hear it dripping inside the wall," "the lights flicker when I plug things in."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context cues.&lt;/strong&gt; Time-of-day, weather event, caller stress level (tone, pace, interruptions).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vulnerability cues.&lt;/strong&gt; "Elderly mother," "infant," "asthma," "we can't get out of the house."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The classifier outputs an &lt;code&gt;urgency_band&lt;/code&gt; (informational / standard / elevated / urgent / life-safety) and a &lt;code&gt;flags&lt;/code&gt; array. The action queue uses these to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Informational/standard:&lt;/strong&gt; queue a callback ticket. No alerts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elevated:&lt;/strong&gt; queue a callback with priority flag. Optionally alert depending on shop configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Urgent:&lt;/strong&gt; alert into the shop's configured on-call workflow with the captured intake. Tell the caller the on-call team has been alerted with their details and someone will follow up. Do not promise an arrival time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Life-safety:&lt;/strong&gt; explicitly direct the caller to call 911 and/or the utility's emergency line, in addition to capturing intake. Do not pretend the answering service replaces those numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hard rule baked into the response generator: never promise a technician arrival time. Ever. The agent can say "I've alerted the on-call team with your details," not "a tech will be there in 45 minutes." Promising arrival time is something only the dispatcher can do, and only after they've looked at the schedule and the route.&lt;/p&gt;

&lt;h2&gt;
  
  
  State management gotchas
&lt;/h2&gt;

&lt;p&gt;A few things we learned the painful way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't re-ask captured fields.&lt;/strong&gt; Sounds obvious. In practice, a free-form LLM will absolutely re-ask the address if the user said it three turns ago, because the model doesn't have a strong incentive to consult prior state. Bake field-already-captured checks into the intake policy, not into the prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handle correction turns.&lt;/strong&gt; Callers will correct themselves. "Actually it's 1234, not 1432." If you don't have a correction path, the wrong value persists. We use a correction classifier on every turn that explicitly looks for "actually," "wait," "no I meant," and similar markers, and routes those through a re-capture step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't trust the ASR on critical fields.&lt;/strong&gt; Phone numbers and addresses are where ASR fails most often. Read back. Always. "Let me read that back — 5 5 5 4 1 2 3, is that right?" Yes, it adds 4 seconds. Yes, it's worth it. The cost of one wrong callback number is much higher than four seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hangups happen mid-intake.&lt;/strong&gt; Design the action queue so that whatever fields were captured up to the hangup get written to a partial-ticket. Don't throw away the partial. The dispatcher can still call back.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent never does
&lt;/h2&gt;

&lt;p&gt;Hard boundaries, enforced in the response generator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never quotes a price.&lt;/li&gt;
&lt;li&gt;Never promises a technician arrival time.&lt;/li&gt;
&lt;li&gt;Never tells the caller it's safe to do something physical (flip a breaker back on, turn the gas back on, climb on a roof).&lt;/li&gt;
&lt;li&gt;Never diagnoses the underlying problem.&lt;/li&gt;
&lt;li&gt;Never says "we guarantee" anything.&lt;/li&gt;
&lt;li&gt;Never says "you should call X competitor instead" — if out of trade, says "I'm not able to help with that today" and offers to take a message anyway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't suggestions. They're filtered at the response generator. Any candidate response containing promise-words ("guarantee," "we will be there," "definitely") gets rewritten or rejected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handoff and observability
&lt;/h2&gt;

&lt;p&gt;Every call produces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full transcript with speaker turns.&lt;/li&gt;
&lt;li&gt;Audio recording (where legal).&lt;/li&gt;
&lt;li&gt;Structured summary with the captured intake fields.&lt;/li&gt;
&lt;li&gt;Urgency classification and flags.&lt;/li&gt;
&lt;li&gt;Action log: which webhooks fired, which alerts went out, what the dispatcher saw.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shop owner gets a morning digest. The dispatcher gets real-time alerts for urgent calls. The developer-side dashboard shows aggregate classification distributions, ASR confidence, and where the policy had to fall back to clarifying questions. That last metric is the most useful — it tells you where the intake policy has gaps.&lt;/p&gt;

&lt;p&gt;If you want to see what this looks like as a finished product, our &lt;a href="https://oncrew.ai/ai-answering-service" rel="noopener noreferrer"&gt;AI answering service for contractors&lt;/a&gt; page walks through the externally visible behavior. The internals are mostly the architecture above with a lot of plumbing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;The interesting part of building these agents isn't the LLM. It's the state machine around the LLM. The LLM does language. The state machine does correctness. Get the state machine right and the agent feels intelligent. Get it wrong and the agent feels like a frustrating IVR with extra steps.&lt;/p&gt;

&lt;p&gt;Happy to take questions in the comments if you're building something adjacent. The phone-agent space has a lot of bad designs in it right now and the more of us share the boring details of what actually works, the faster the industry stops underserving the buyer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>contractors</category>
      <category>automation</category>
      <category>fieldservice</category>
    </item>
    <item>
      <title>HVAC Answering Service: AI vs Live Receptionist for After-Hours Calls</title>
      <dc:creator>Abe</dc:creator>
      <pubDate>Mon, 11 May 2026 07:43:06 +0000</pubDate>
      <link>https://dev.to/oncrew/hvac-answering-service-ai-vs-live-receptionist-for-after-hours-calls-1fp0</link>
      <guid>https://dev.to/oncrew/hvac-answering-service-ai-vs-live-receptionist-for-after-hours-calls-1fp0</guid>
      <description>&lt;h2&gt;
  
  
  HVAC answering service
&lt;/h2&gt;

&lt;p&gt;An HVAC answering service should do more than say "someone will call you back." After hours, it should capture whether the caller has no heat, no cooling, water around equipment, strange smells, vulnerable occupants, and a safe callback path. AI and live receptionists can both work, but they solve different operational problems.&lt;/p&gt;

&lt;p&gt;Snippet checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After-hours goal: answer fast, collect clear HVAC details, route urgent calls.&lt;/li&gt;
&lt;li&gt;AI fit: predictable intake, overflow, nights, weekends, and low-volume call coverage.&lt;/li&gt;
&lt;li&gt;Live receptionist fit: nuanced scheduling, membership questions, payment issues, complex exceptions.&lt;/li&gt;
&lt;li&gt;Urgency flags: no heat in cold weather, no cooling for vulnerable occupants, burning smell, gas concern, active leak.&lt;/li&gt;
&lt;li&gt;Setup requirement: configure your escalation workflow before sending real calls.&lt;/li&gt;
&lt;li&gt;Cost lens: compare monthly minimums, included calls, overage, and whether you pay for wrong-number calls.&lt;/li&gt;
&lt;li&gt;More context: &lt;a href="https://oncrew.ai/resources/hvac-answering-service" rel="noopener noreferrer"&gt;HVAC answering service&lt;/a&gt; and &lt;a href="https://oncrew.ai/lp/hvac" rel="noopener noreferrer"&gt;HVAC AI answering service&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HVAC calls have a seasonal rhythm that makes phone coverage hard. In shoulder months, you may have a manageable volume. In a heat wave or freeze, the phone can jump from quiet to overwhelming in a few hours. The owner, dispatcher, and techs may all be working, but customers still expect a response.&lt;/p&gt;

&lt;p&gt;The practical choice is not "AI or humans forever." It is deciding which layer should handle which kind of call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good after-hours HVAC call flow asks
&lt;/h2&gt;

&lt;p&gt;A basic no-answer message does not tell you enough. An HVAC answering service should capture the caller's name, phone number, service address, whether the issue is heating or cooling, what symptoms they are seeing, and whether anyone in the home is at higher risk.&lt;/p&gt;

&lt;p&gt;For no heat, ask whether the system is completely off, whether the thermostat has power, whether there are unusual smells, and whether the caller is in a home with infants, elderly people, or medical concerns. For no cooling, ask whether the system is blowing warm air, leaking water, tripping breakers, or frozen over.&lt;/p&gt;

&lt;p&gt;That intake is not a diagnosis. It is triage. It helps the shop decide whether the call should wake someone up, wait until morning, or be handled as a scheduled follow-up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI is strong
&lt;/h2&gt;

&lt;p&gt;AI is useful when the conversation can follow a reliable pattern. After-hours HVAC intake is usually pattern-based. The caller has a problem. The service needs to answer, show empathy, ask structured questions, capture details, and notify the right person.&lt;/p&gt;

&lt;p&gt;AI can be available 24/7 without asking a tech to answer every ringing phone. It can be consistent with the questions it asks. It can summarize the call so the on-call person sees the key facts quickly. It can also support overflow when your office is already on the phone.&lt;/p&gt;

&lt;p&gt;This is where a tool like OnCrew is designed to sit: answer calls, ask trade-specific intake questions, capture caller details, flag urgent calls, alert or route to a configured on-call workflow, and log summaries or transcripts. OnCrew's pricing is also public: Starter is $49/month for 100 included calls, Pro is $149/month for 400 included calls, Multi-Truck is $349/month for 1,000 included calls, and overage is $0.99/call.&lt;/p&gt;

&lt;p&gt;Those details matter because "answering service" pricing can look cheap until you compare minimums, minutes, call rounding, and overflow rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where live receptionists are still better
&lt;/h2&gt;

&lt;p&gt;There are calls where a trained human still has the edge. If the caller wants to reschedule an install, debate a maintenance agreement, ask about warranty coverage, negotiate a bill, or coordinate access with a tenant, a live receptionist or in-house dispatcher may handle the nuance better.&lt;/p&gt;

&lt;p&gt;A human can also make judgment calls when your schedule is changing in real time. If a tech is running late, a part is delayed, or a crew is being rerouted, the person answering the phone may need access to dispatch context and permission to make decisions.&lt;/p&gt;

&lt;p&gt;That is why I would not frame AI as a full dispatcher unless the system is actually integrated into your dispatch operation and your team has defined what it can and cannot promise. For most shops, the better first use is intake and urgent routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistake to avoid
&lt;/h2&gt;

&lt;p&gt;The biggest mistake is turning on a generic script. HVAC is not generic. "Can I take a message?" is not enough for a freezing house, a water leak around an air handler, or a burning smell near equipment.&lt;/p&gt;

&lt;p&gt;Before going live, write the five to ten scenarios you actually care about. No heat. No cooling. Water leak. Burning smell. System will not turn on. Thermostat issue. Maintenance request. Estimate request. Existing customer callback. Wrong trade.&lt;/p&gt;

&lt;p&gt;Then test each one. If the service handles them naturally and routes the urgent ones correctly, you are close. If it misses safety details or promises a tech will arrive when your business has not committed to that, fix the flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple decision framework
&lt;/h2&gt;

&lt;p&gt;Choose AI when your main problem is missed calls, after-hours intake, and structured triage. Choose a live receptionist when your main problem is scheduling complexity, account-specific questions, or high-touch customer service. Use both when your shop has enough volume that the AI can catch overflow while humans handle the complex calls.&lt;/p&gt;

&lt;p&gt;The best HVAC phone setup is not the fanciest. It is the one that gives the customer a clear response and gives your team the right information without creating promises you cannot keep.&lt;/p&gt;

&lt;p&gt;Disclosure: I am Abe, founder of OnCrew, so read this with that bias in mind. The goal is a useful buying framework, not a claim that one vendor is perfect for every HVAC shop.&lt;/p&gt;

</description>
      <category>hvac</category>
      <category>ai</category>
      <category>smallbusiness</category>
      <category>fieldservice</category>
    </item>
  </channel>
</rss>
