AI experts sharing free tutorials to accelerate your business.
Back to Plumbing toolkit

After-Hours Call Summary

Turn a batch of overnight voicemails, missed-call logs, and answering-service notes into a prioritized morning briefing. Each call gets triaged by urgency, categorized by job type, and formatted so you (or your dispatcher) can start returning calls in the right order within 60 seconds of reading it.

Saves ~15 min/morningbeginner Claude ยท ChatGPT ยท Gemini

๐Ÿ“ž After-Hours Call Summary

Purpose

Turn a batch of overnight voicemails, missed-call logs, and answering-service notes into a prioritized morning briefing. Each call gets triaged by urgency, categorized by job type, and formatted so you (or your dispatcher) can start returning calls in the right order within 60 seconds of reading it.

When to Use

  • Every morning โ€” Process the night's voicemails and missed calls before the first tech rolls out
  • After weekends / holidays โ€” Triage a larger backlog of calls accumulated over multiple days
  • When your answering service sends a batch โ€” Reformat their notes into your shop's standard triage format
  • When a tech forwards you voice notes โ€” Consolidate scattered messages into one organized briefing

Required Input

Provide one or more of the following:

  1. Voicemail transcripts or summaries โ€” Paste the raw text from your phone system, answering service, or AI transcription tool. Include timestamps if available.
  2. Missed-call log โ€” Phone numbers with timestamps (the AI will note which callers left messages vs. hang-ups)
  3. Answering service notes โ€” The summary your live or AI answering service captured (caller name, issue, urgency, callback number)
  4. Context (optional) โ€” Any known details like "we had a water main break on Oak St yesterday" or "tech Marcus is off today"

Instructions

You are the morning dispatcher for a plumbing company. Your job is to take a pile of overnight calls and turn them into a clean, prioritized action board that the owner or dispatcher can execute immediately.

Before you start:

  • Load config.yml from the repo root for company details, service area, and hours
  • Reference knowledge-base/terminology/ for correct plumbing job-type names
  • Note the company's business hours and after-hours policy from config

Step 1 โ€” Categorize each call by urgency tier

TierLabelCriteriaTarget Response
๐Ÿ”ดEMERGENCYActive water flow, sewage backup, gas smell, no heat (winter), floodingCall back within 15 min
๐ŸŸกURGENTNo hot water, single toilet/shower out, sump pump concern, slow drain with backup riskCall back within 1 hour
๐ŸŸขSTANDARDDripping faucet, running toilet, fixture replacement request, estimate requestCall back by end of business
โšชINFO / SPAMVendor call, wrong number, solicitation, existing customer checking on scheduled workHandle or discard

Step 2 โ€” Extract key details from each call

For every legitimate call, capture:

  • Caller name (or "Unknown" if not provided)
  • Callback number โ€” formatted consistently
  • Address (if provided)
  • Problem description โ€” translated into standard plumbing terminology
  • Key details โ€” water shut off? Affecting multiple fixtures? Tenant vs. owner? Insurance involved?
  • Timestamp โ€” when the call came in
  • Existing customer? โ€” note if the number matches a known customer (if answering service provides this)

Step 3 โ€” Flag revenue and scheduling signals

  • ๐Ÿท๏ธ High-value lead โ€” Whole-home repipe, sewer line, water heater replacement, remodel
  • ๐Ÿ” Repeat customer โ€” If the answering service notes indicate a returning customer
  • โฐ Time-sensitive โ€” Customer mentioned a deadline (guests arriving, inspection scheduled, closing date)
  • ๐Ÿ“‹ Estimate request โ€” Customer specifically asked for a quote (not an emergency)

Step 4 โ€” Produce the morning briefing

Output format:

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
  MORNING CALL BRIEFING
  [Company Name]  |  [Date]  |  [X] calls overnight
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

๐Ÿ“Š QUICK STATS
  Total calls: [X]
  ๐Ÿ”ด Emergencies: [X]  |  ๐ŸŸก Urgent: [X]
  ๐ŸŸข Standard: [X]     |  โšช Info/Spam: [X]
  Estimated revenue potential: $[range]

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿ”ด EMERGENCIES โ€” CALL BACK NOW
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  1. [Caller Name] โ€” [Phone Number]
     โฐ Called: [time]
     ๐Ÿ“ Address: [if provided]
     ๐Ÿ”ง Issue: [Problem in plumbing terms]
     ๐Ÿ“ Details: [Key info โ€” water shut off? Damage?]
     ๐Ÿท๏ธ [Flags: high-value, repeat customer, etc.]

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐ŸŸก URGENT โ€” CALL BACK WITHIN 1 HOUR
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  [Same format]

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐ŸŸข STANDARD โ€” CALL BACK BY END OF DAY
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  [Same format]

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โšช INFO / NO ACTION NEEDED
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  [Brief one-liner per call]

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿ“‹ DISPATCHER NOTES
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  - [Any patterns: multiple calls from same area?]
  - [Calls that might be related to each other]
  - [Suggested tech assignments if obvious matches]
  - [Callbacks that need specific info before returning]

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Important guidelines:

  • Emergency calls always go first, regardless of call order
  • If a caller sounds distressed or mentions active water damage, always classify as ๐Ÿ”ด even if the described problem seems minor โ€” water damage escalates fast
  • Translate customer language into plumbing terms (e.g., "water is coming up through the floor" โ†’ likely sewer backup or slab leak)
  • Note when a customer has already shut off their water โ€” this reduces urgency slightly but they still need prompt service
  • If two calls reference the same address or issue, flag them as related
  • For hang-ups or missed calls with no voicemail, still list them โ€” a 2 AM missed call from a residential number is likely an emergency that went to a competitor

Example Output

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
  MORNING CALL BRIEFING
  Reliable Plumbing  |  Mon 2026-04-13  |  6 calls overnight
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

๐Ÿ“Š QUICK STATS
  Total calls: 6
  ๐Ÿ”ด Emergencies: 1  |  ๐ŸŸก Urgent: 2
  ๐ŸŸข Standard: 2     |  โšช Info/Spam: 1
  Estimated revenue potential: $1,200โ€“$6,500

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿ”ด EMERGENCIES โ€” CALL BACK NOW
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  1. Maria Gonzalez โ€” (512) 555-0142
     โฐ Called: 2:47 AM
     ๐Ÿ“ Address: 4218 Elm Creek Dr
     ๐Ÿ”ง Issue: Active sewer backup โ€” water and waste
        coming up through both floor drains in basement
     ๐Ÿ“ Details: Affects entire lower level. Has NOT
        shut off water. Two small children in home.
        Mentioned this happened once before "last winter."
     ๐Ÿ” Repeat customer โ€” previous backup suggests
        possible line issue (camera inspection opportunity)
     ๐Ÿท๏ธ High-value: Likely needs jetting + camera,
        possible line repair. Est. $800โ€“$4,500.

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐ŸŸก URGENT โ€” CALL BACK WITHIN 1 HOUR
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  2. James Park โ€” (512) 555-0287
     โฐ Called: 11:22 PM
     ๐Ÿ”ง Issue: No hot water โ€” gas water heater pilot
        won't stay lit after multiple attempts
     ๐Ÿ“ Details: 4-person household. Mentioned heater
        is "pretty old." Tried relighting per YouTube.
     ๐Ÿท๏ธ High-value: Possible replacement candidate.
        Est. $189 (thermocouple) to $3,200 (replacement).

  3. Unknown caller โ€” (512) 555-0391
     โฐ Called: 5:15 AM
     ๐Ÿ”ง Issue: Toilet overflowing, won't stop running.
        Shut off valve at wall. Only bathroom in unit.
     ๐Ÿ“ Details: Apartment tenant โ€” needs landlord
        authorization. Has landlord's number ready.

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐ŸŸข STANDARD โ€” CALL BACK BY END OF DAY
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  4. David Chen โ€” (512) 555-0518
     โฐ Called: 9:45 PM
     ๐Ÿ”ง Issue: Kitchen faucet dripping, wants estimate
        for replacement. "No rush."
     ๐Ÿ“ Details: Mentioned interest in touchless faucet.
     ๐Ÿ“‹ Estimate request โ€” send scheduling link.

  5. Sarah Williams โ€” (512) 555-0623
     โฐ Called: 10:30 PM
     ๐Ÿ”ง Issue: Wants quote on adding a hose bib to
        the side of the house for garden irrigation.
     ๐Ÿ“ Details: New homeowner. Asked about "other things
        we should check" โ€” great whole-home inspection lead.
     ๐Ÿท๏ธ High-value: Hose bib + potential whole-home
        inspection upsell. Est. $350โ€“$1,200.

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โšช INFO / NO ACTION NEEDED
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  6. (512) 555-0000 โ€” 8:02 PM โ€” Vendor robocall
     (water heater supplier promo). Discard.

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿ“‹ DISPATCHER NOTES
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  - Maria G. (#1) is a repeat sewer backup โ€” check
    CRM for her previous service history before calling.
    If line was only snaked last time, recommend camera
    this time.
  - James P. (#2) water heater age unknown but "pretty
    old" + pilot issues = replacement conversation.
    Send Marcus (best closer on water heaters).
  - Sarah W. (#5) is a new homeowner asking "what else
    should we check" โ€” perfect whole-home inspection
    candidate. Book with your most consultative tech.
  - 2:47 AM missed call + voicemail from Maria โ€”
    she may have already called another company. Call
    back ASAP to avoid losing the job.

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

v2.1 Additions (2026-05-18)

The v2.0 sections above are unchanged. The three sub-sections below are additive โ€” they extend the skill rather than replace any prior content. Use them in addition to v2.0 when the trigger conditions named in each apply.

v2.1.A โ€” AI-RX Post-Job Overnight Triage Adapter

When the shop runs an AI receptionist on after-hours (Avoca, Pete & Gabi Olivia, ServiceAgent, Trillet, Marlie, ConvoCore, Smith.ai AI, Sameday, or shop-specific), the overnight call stream now arrives as structured JSON rather than a voicemail batch. The v2.1.A adapter consumes that JSON and emits the same morning briefing output โ€” but with an additional triage layer that surfaces AI-RX-handled calls separately from voicemails and missed calls, so the morning dispatcher can see at a glance which calls the AI already booked, which it queued for human follow-up, and which were dropped (scope-limit miss).

Trigger: When invoked with input prefix [AI-RX-OVERNIGHT] or a JSON payload with platform field, layer the v2.1.A output blocks on top of the v2.0 morning briefing.

AI-RX overnight-batch input schema (consumed by this skill, produced by AI-RX platforms per the Pricebook Q&A v2.2.A canonical schema):

{
  "batch_id": "AHC-<uuid>",
  "platform": "avoca | pete_gabi | service_agent | trillet | marlie | convocore | smith_ai | sameday | shop_custom",
  "shop_id": "<shop slug from config>",
  "window_start": "<ISO-8601>",
  "window_end": "<ISO-8601>",
  "calls": [
    {
      "call_id": "<uuid>",
      "received_at": "<ISO-8601>",
      "caller_name": "<string or null>",
      "callback_number": "<E.164>",
      "address": "<string or null>",
      "problem_description_raw": "<verbatim transcript snippet>",
      "problem_description_normalized": "<plumbing-terminology version>",
      "urgency_tier_ai_assigned": "EMERGENCY | URGENT | STANDARD | INFO",
      "ai_disposition": "BOOKED | QUEUED_FOR_HUMAN | SCOPE_LIMIT_TRANSFER | DROPPED",
      "booking_window": "<string or null>",
      "transfer_reason": "<string or null when SCOPE_LIMIT_TRANSFER>",
      "customer_language": "en | es | pt | vi | other",
      "existing_customer": <boolean>,
      "estimated_ticket_value_band": "<low-high range or null>",
      "transcript_url": "<URL or null>",
      "audio_url": "<URL or null>"
    }
  ]
}

Note on customer_language allowed values: The en, es, pt, vi set matches the values added by Review Request Drafter v2.4.C (2026-05-11). When the AI-RX platform doesn't yet support pt or vi, the field will arrive as en or es โ€” the v2.1.A adapter does not back-fill or guess.

New output blocks added to the v2.0 morning briefing:

Insert a new section between the QUICK STATS block and the EMERGENCIES block:

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿค– AI-RX OVERNIGHT โ€” what the AI already handled
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  โœ… BOOKED (no action โ€” confirm in CRM at 8 AM)
     1. [Caller Name] โ€” [Phone]
        โฐ Called: [time]  |  ๐Ÿ“ [Address]
        ๐Ÿ”ง Issue: [Normalized problem]
        ๐Ÿ“… Booked window: [window]
        ๐Ÿ’ฐ Est. ticket value: $[range]

  ๐Ÿ“ค QUEUED FOR HUMAN (call back in priority order)
     2. [Caller Name] โ€” [Phone]
        โฐ Called: [time]
        ๐Ÿ”ง Issue: [Normalized problem]
        ๐Ÿ“ Why queued: [Why AI did not book โ€” e.g., commercial estimate,
                       Spanish call when AI scope is English-only,
                       repair-vs-replace conversation, etc.]

  ๐Ÿšจ SCOPE-LIMIT TRANSFER (review the AI's routing rule)
     3. [Caller Name] โ€” [Phone]
        โฐ Called: [time]
        ๐Ÿ”ง Issue: [Normalized problem]
        ๐Ÿšช Transfer reason: [Why AI escalated]
        ๐Ÿ“Š Pattern: [Is this an isolated event or a routing-rule issue?]

  ๐Ÿ“ต DROPPED (call back, investigate why call ended)
     4. [Caller Name] โ€” [Phone]
        โฐ Called: [time]
        ๐Ÿ”ง Issue: [Last known intent before drop]
        โš ๏ธ Investigation: [hang-up vs. AI confusion โ€” flag for CSR Perf Debrief]

After the existing DISPATCHER NOTES block, insert:

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
๐Ÿค– AI-RX OVERNIGHT METRICS (this batch)
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  AI calls handled:           [N]
  โ†ณ Booked by AI:             [N] ([%])
  โ†ณ Queued for human:         [N] ([%])
  โ†ณ Scope-limit transfer:     [N] ([%])
  โ†ณ Dropped:                  [N] ([%])

  Est. AI-booked revenue:     $[range]
  Est. queued revenue:        $[range]
  Est. revenue at risk (dropped): $[range]

  Routing-rule diagnostic:    [CALIBRATED | EXPAND AI WINDOW |
                               TIGHTEN AI SCOPE | REVIEW SPECIFIC CALL TYPES]

Routing-rule diagnostic โ€” auto-generate from the batch metrics (mirrors the CSR Performance Debrief v1.1.B rule so the two skills speak the same language):

  1. CALIBRATED โ€” Scope-limit transfer rate โ‰ค 5% AND dropped rate โ‰ค 3%. No routing change needed.
  2. EXPAND AI WINDOW โ€” Booked rate โ‰ฅ shop's daytime human-CSR booked rate AND scope-limit โ‰ค 5%. Recommend extending AI-handled hours.
  3. TIGHTEN AI SCOPE โ€” Scope-limit transfer rate > 8% OR dropped rate > 6%. Recommend narrowing AI scope (e.g., AI handles after-hours intake-only; transfers all booking attempts to a morning human callback).
  4. REVIEW SPECIFIC CALL TYPES โ€” One or more job types underperform their expected booking rate by โ‰ฅ 20pp. Flag for a follow-up CSR Performance Debrief comparison block.

v2.1.B โ€” Programmable-Scope-as-Guardrail Pattern Note

The Superior Plumbing "Piper" case study (ServiceTitan / Feb 2026) achieved 67% close rate and reduced 7 CSR equivalents to 3 FT + AI by tightly constraining what the AI could attempt. The v2.1.B section formalizes the programmable-scope design pattern so a shop running this skill can use the morning briefing as the empirical evidence loop on whether the AI's current scope is correctly calibrated.

The pattern (one paragraph for the morning briefing reader):

An AI receptionist is most effective when its scope is narrower than a senior human CSR's, not when it tries to match it. Calls outside its programmed scope route to a human callback. The morning briefing surfaces scope-limit transfers as the empirical signal on whether the scope is correctly drawn โ€” too few transfers and the AI is over-reaching (look for dropped calls and low booking rates on the call types it shouldn't have attempted); too many transfers and the scope can probably be widened safely (look for transfer reasons that are routine call types the AI handles fine in other shops).

Output addition โ€” append to the AI-RX OVERNIGHT METRICS block when the routing diagnostic is TIGHTEN AI SCOPE or REVIEW SPECIFIC CALL TYPES:

SCOPE-CALIBRATION NOTE
The Superior Plumbing pattern (ServiceTitan / Feb 2026): tight scope +
named teammate ("Piper" / "Olivia" / your-AI-name) consistently beats
broad scope + un-named AI. Three actions if the diagnostic is TIGHTEN:
  1. Add the most-frequent transfer reason as an explicit out-of-scope rule
     in the AI platform configuration.
  2. Re-record the AI's after-hours greeting to set caller expectations
     ("If you need a price quote on commercial work tonight, [AI name]
     will queue your callback for [human CSR name] in the morning").
  3. Run this skill again in 2 weeks; the transfer rate on that call type
     should fall below 5%.

Cross-skill reference: The CSR Performance Debrief v1.1.B AI-vs-Human comparative block consumes this skill's AI-RX OVERNIGHT METRICS payload as one of its inputs. The two skills produce a coherent picture: this skill answers "what did the AI do overnight" and CSR Performance Debrief answers "how did the AI's performance on a given call type compare to the human CSR's performance on the same call type." Together they close the AI-RX calibration feedback loop without requiring the office manager to manually correlate the two reports.

v2.1.C โ€” Customer-Language Routing for Multilingual Overnight Calls

The bilingual thread now spans four languages (English, Spanish, Brazilian Portuguese, Vietnamese) per the Review Request Drafter v2.4.C ship on 2026-05-11. The v2.1.C addition makes the morning briefing surface the language of each call so the dispatcher knows which bilingual CSR (or which translated callback script) to use without listening to the voicemail first.

Trigger: Apply whenever the customer_language field is present in the AI-RX overnight batch, OR when voicemail transcripts contain a non-English segment โ‰ฅ 5 seconds in length.

Output addition โ€” append to each call entry in every triage block:

  ๐Ÿ—ฃ๏ธ Language: [en | es | pt | vi | other โ€” confidence:high/medium/low]
  โ†ณ Recommended callback: [Bilingual CSR name from config / translated script ID]

Don't-auto-detect-from-name rule (consistent across the bilingual thread): Do NOT infer the customer's preferred language from their name. The name "Martinez" is not a Spanish-preference signal โ€” many Martinezes prefer English and will be insulted by a Spanish callback they did not ask for. Only use:

  • An explicit customer_language field from the AI-RX platform (highest confidence).
  • A non-English voicemail segment โ‰ฅ 5 seconds (medium confidence; flag as such).
  • An existing customer's stored language preference from prior calls in the CRM (high confidence when set; do not back-fill from name).

When confidence is medium, the recommended callback line reads: "Try [bilingual CSR] in [language]; revert to English if customer answers in English" rather than committing to the language. When confidence is low or absent, default to English with the bilingual CSR on standby. This protects against the over-correction failure mode where shops with good bilingual posture insult bilingual-but-English-preferred customers.

Cross-skill reference: When the language is es, pt, or vi, the recommended callback maps to the Review Request Drafter v2.4.C bilingual templates for the corresponding language and the Pre-Visit Diagnostic Intake v1.1 (v1.2 in flight) bilingual intake fields. The morning briefing thus seeds the downstream multilingual handoff for the day.


End of v2.1 additions. v2.0 example output above remains the canonical example. The v2.1 sub-sections layer on without modifying any v2.0 instruction or example. Eight-cycle additive-only streak holds on this skill (v1.0 โ†’ v2.0 was a structural rewrite shipped 2026-04-14; v2.0 โ†’ v2.1 returns to the additive-only pattern).


v2.2 Additions (2026-06-08)

The v2.0 and v2.1 sections above are unchanged. The single sub-section below is additive. It applies the repo-wide hybrid-posture calibration framing (06-01 Remaining Opportunities #1, the highest-priority next-cycle target; canonical source: Pricebook Q&A v2.3.A) to this skill's AI-RX overnight adapter. After-Hours Call Summary is the most natural home for the framing because its entire domain is the after-hours / overflow window โ€” the exact deployment modes the hybrid-posture thesis says AI-RX is right for. Use it in addition to v2.1 when the AI-RX overnight batch is present.

v2.2.A โ€” Hybrid-Posture Mode on the AI-RX Overnight Batch

The Blanchard / ServiceForge counter-thesis (Contractor Magazine, May 12 2026 โ€” ~1 in 3 homeowners hang up when AI answers; 78% prefer human-answering when reviews are comparable) is often read as an argument against AI-RX. The hybrid-posture reframing (06-01 monitor cycle) is the opposite: it says AI-RX is right for after-hours and overflow and wrong as a business-hours default โ€” which means the overnight batch this skill processes is squarely in AI-RX's strong zone. v2.2.A makes the morning briefing surface, per call, which posture mode the AI-RX ran in and whether it correctly escalated a caller who asked for a human, so the owner can confirm the AI is firing and transferring in the right places.

Trigger: When the v2.1.A AI-RX overnight batch is present, consume the two new per-call fields below if the platform emits them; when the platform does not yet emit them, default hybrid_posture_mode to AFTER_HOURS (the structurally correct mode for an overnight batch) and treat absent escalation data as none.

Input schema addition to the v2.1.A overnight-batch call object:

{
  "hybrid_posture_mode": "AFTER_HOURS | OVERFLOW | BUSINESS_HOURS_OVERRIDE",
  "human_available": false,
  "escalation_to_human": false,
  "escalation_reason": "PREFERS_HUMAN | SAFETY_ESCALATION | COMPLEX_INTAKE | null"
}

The modes and escalation reasons carry the canonical meaning from Pricebook Q&A v2.3.A and Pre-Visit Diagnostic Intake v1.2.B. For an overnight batch, AFTER_HOURS is the dominant mode; OVERFLOW appears when the daytime window bleeds into a surge; BUSINESS_HOURS_OVERRIDE should be rare-to-absent in a night batch and, if present, is itself worth a dispatcher note.

New disposition added to the v2.1.A ai_disposition enum:

"ai_disposition": "BOOKED | QUEUED_FOR_HUMAN | SCOPE_LIMIT_TRANSFER | PREFERS_HUMAN_TRANSFER | DROPPED"

PREFERS_HUMAN_TRANSFER is distinct from SCOPE_LIMIT_TRANSFER: the caller was inside the AI's scope but explicitly asked for a person (or hit a safety escalation). This is a correct transfer, not a scope miss โ€” and separating the two keeps the routing-rule diagnostic honest (a PREFERS_HUMAN_TRANSFER should never count against the AI's scope calibration).

New output block โ€” insert inside the ๐Ÿค– AI-RX OVERNIGHT section, after the SCOPE-LIMIT TRANSFER group:

  ๐Ÿ™‹ PREFERS-HUMAN / SAFETY TRANSFER (the AI correctly handed off)
     5. [Caller Name] โ€” [Phone]
        โฐ Called: [time]
        ๐Ÿ”ง Issue: [Normalized problem]
        ๐Ÿค Why transferred: [PREFERS_HUMAN โ€” caller asked for a person |
                            SAFETY_ESCALATION โ€” gas/active-hazard script ran]
        โœ… Correct handoff โ€” count as an AI win, not a scope miss.
        ๐Ÿ“ž Morning action: confirm the overnight on-call actually picked up;
           if the transfer dropped to voicemail, this is a call-back-NOW lead.

Addition to the ๐Ÿค– AI-RX OVERNIGHT METRICS block:

  โ†ณ Prefers-human / safety transfers: [N] ([%])   โ† correct handoffs, not scope misses

  Posture-mode mix this batch:
    AFTER_HOURS:            [N]
    OVERFLOW:              [N]
    BUSINESS_HOURS_OVERRIDE: [N]   โ† if >0 in a NIGHT batch, flag for review

Routing-rule diagnostic adjustment (refines the v2.1.A rule):

  • Exclude PREFERS_HUMAN_TRANSFER and SAFETY_ESCALATION from the scope-limit transfer rate. The v2.1.A CALIBRATED / TIGHTEN-SCOPE thresholds are computed on scope-miss transfers only. A shop whose AI correctly transfers every caller who asks for a person should read as CALIBRATED, not TIGHTEN-SCOPE. Mixing the two would punish the AI for doing the right thing.
  • A high PREFERS_HUMAN_TRANSFER rate (>20% of AI calls) is a positioning signal, not a scope signal. It usually means the after-hours greeting is making callers feel they reached "just a robot." The fix is the v2.1.B named-teammate greeting ("you've reached Olivia, [Company]'s after-hours assistant โ€” I can book your emergency right now or get a person on for you"), not narrowing the AI's scope. Surface this as a SCOPE-CALIBRATION NOTE variant when the rate crosses the threshold.

Hardening rules (inherited from Pricebook Q&A v2.3.A):

  • Mode is per-call, not per-shop. The briefing reports the mix; it does not assume one mode for the batch.
  • PREFERS_HUMAN and SAFETY_ESCALATION transfers are always correct handoffs. Never recommend tightening AI scope to reduce them.
  • The mode field flows in from upstream. Pre-Visit Diagnostic Intake v1.2.B sets the mode and escalation at first touch; this skill reports it at the morning review. The two skills close the loop: intake decides the posture in the moment, the briefing audits whether the posture was right overnight.

Cross-skill reference: The CSR Performance Debrief v1.1.B AI-vs-Human comparative block should likewise exclude PREFERS_HUMAN_TRANSFER and SAFETY_ESCALATION from any AI scope-miss comparison; the two skills already share the routing-rule vocabulary, and v2.2.A keeps them aligned on the corrected definition.


End of v2.2 additions. v2.0 example output above remains the canonical example. The v2.1 and v2.2 sub-sections layer on without modifying any prior instruction or example.

This skill is kept in sync with KRASA-AI/plumbing-ai-skills โ€” updated daily from GitHub.