๐ 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:
- Voicemail transcripts or summaries โ Paste the raw text from your phone system, answering service, or AI transcription tool. Include timestamps if available.
- Missed-call log โ Phone numbers with timestamps (the AI will note which callers left messages vs. hang-ups)
- Answering service notes โ The summary your live or AI answering service captured (caller name, issue, urgency, callback number)
- 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.ymlfrom 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
| Tier | Label | Criteria | Target Response |
|---|---|---|---|
| ๐ด | EMERGENCY | Active water flow, sewage backup, gas smell, no heat (winter), flooding | Call back within 15 min |
| ๐ก | URGENT | No hot water, single toilet/shower out, sump pump concern, slow drain with backup risk | Call back within 1 hour |
| ๐ข | STANDARD | Dripping faucet, running toilet, fixture replacement request, estimate request | Call back by end of business |
| โช | INFO / SPAM | Vendor call, wrong number, solicitation, existing customer checking on scheduled work | Handle 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):
- CALIBRATED โ Scope-limit transfer rate โค 5% AND dropped rate โค 3%. No routing change needed.
- EXPAND AI WINDOW โ Booked rate โฅ shop's daytime human-CSR booked rate AND scope-limit โค 5%. Recommend extending AI-handled hours.
- 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).
- 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_languagefield 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).