Appearance
Voice Escalation Procedures
Document ID: PLCY-VOI-003
Version: 1.1
Effective Date: January 21, 2026
Last Review: January 21, 2026
Owner: Hop And Haul Team
CONFIDENTIAL
This document is CONFIDENTIAL and for internal use only. Do not distribute outside the organization.
1. Purpose
This document defines the procedures for escalating voice agent calls to human support. It establishes role definitions, routing logic, on-call configurations, and handoff protocols to ensure drivers receive timely assistance for safety, support, and operational needs.
Related Documents:
- PLCY-VOI-001 - Voice Agent Integration Policy (Section 7: Support Escalation Tiers)
- PLCY-VOI-002 - Voice Agent Technical Specification
- PLCY-ADM-002 - Admin Call Routing Configuration
- PLCY-INC-001 - Incident Response Procedures
2. Escalation Architecture
2.1 Tier Overview
┌─────────────────────────────────────────────────────────────────────┐
│ TIER 1: LLM VOICE AGENT │
│ │
│ Handles: Ride offers, status inquiries, ETA, cancellation, FAQ │
│ │
│ Escalation Triggers: │
│ • "Speak to a person" / "human" / "help" │
│ • Safety keywords (accident, emergency, threat) │
│ • Unresolved after 3 attempts │
│ • System error preventing completion │
└──────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
↓ ↓ ↓
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ SAFETY OPS │ │ DRIVER SUPPORT │ │ FLEET ADMIN │
│ │ │ │ │ │
│ • Accidents │ │ • App issues │ │ • Fleet-specific│
│ • Emergencies │ │ • Disputes │ │ • Policy Q's │
│ • SOS │ │ • Technical │ │ • Custom rules │
│ • Threats │ │ • General help │ │ │
│ │ │ │ │ │
│ 24/7 On-Call │ │ Biz hrs + OC │ │ Per-fleet cfg │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────┬┴────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ TIER 3: COMPANY LEADERSHIP │
│ │
│ Handles: Serious accidents, DOT contact, media, legal │
│ Escalation: Via Safety Ops or per incident severity │
└─────────────────────────────────────────────────────────────────────┘2.2 Escalation Paths
| Trigger | Initial Route | Backup Route | SLA |
|---|---|---|---|
| Safety emergency | Safety Ops | Company Leadership | Immediate |
| "Speak to human" | Driver Support | Fleet Admin | <2 min |
| Technical issue | Driver Support | Safety Ops (if urgent) | <5 min |
| Fleet-specific | Fleet Admin | Driver Support | <5 min |
| Unresolved issue | Driver Support | Safety Ops | <5 min |
3. Escalation Triggers
3.1 Safety Escalation (Immediate)
Keywords/Phrases:
- "accident" / "crash" / "collision"
- "emergency" / "911" / "help me"
- "threat" / "danger" / "unsafe"
- "SOS" / "panic" / "attack"
- "hurt" / "injured" / "medical"
System Triggers:
- SOS button pressed in app
- Route deviation alert unresolved
- Duress code entered
- Driver incapacitation detected
Action: Route immediately to Safety Ops, no delay.
3.2 Support Escalation (Standard)
Keywords/Phrases:
- "speak to a person" / "human" / "representative"
- "help" / "support" / "problem"
- "not working" / "broken" / "error"
- "cancel" / "refund" / "dispute"
System Triggers:
- Driver requests transfer
- 3 failed interaction attempts
- Tool execution failure
- OpenAI unavailable
Action: Route to Driver Support queue.
3.3 Fleet-Specific Escalation
Triggers:
- Fleet Admin configured keywords
- Fleet-specific policy questions
- Custom escalation rules per fleet
Action: Route to designated Fleet Admin if available, else Driver Support.
4. Role Definitions
4.1 Safety Ops
| Attribute | Detail |
|---|---|
| Responsibility | Safety incidents, emergencies, SOS response, accident handling |
| Availability | 24/7 on-call rotation |
| Authority | Can dispatch emergency services, contact fleet management, escalate to leadership |
| Tools | Live GPS access, driver contact, 911 dispatch integration |
| Training | Emergency response, de-escalation, DOT regulations |
Safety Ops Actions:
- Acknowledge call within 30 seconds
- Assess situation severity
- Dispatch emergency services if needed
- Contact fleet management
- Document incident per PLCY-INC-001
- Escalate to leadership for serious incidents
4.2 Driver Support
| Attribute | Detail |
|---|---|
| Responsibility | Technical issues, app problems, disputes, general inquiries |
| Availability | Business hours (8 AM - 8 PM local) + after-hours on-call |
| Authority | Can resolve disputes, issue credits, modify ride status |
| Tools | Admin dashboard, ride history, driver profile |
| Training | Platform operations, customer service, basic troubleshooting |
Driver Support Actions:
- Acknowledge call within 2 minutes
- Identify issue category
- Resolve or escalate as appropriate
- Document resolution
- Follow up if needed
4.3 Fleet Admin
| Attribute | Detail |
|---|---|
| Responsibility | Fleet-specific issues, policy questions, driver management |
| Availability | Per-fleet configuration (typically business hours) |
| Authority | Manages fleet drivers, sets fleet policies, approves exceptions |
| Tools | Fleet dashboard, driver roster, policy configuration |
| Training | Fleet management, platform configuration |
Fleet Admin Actions:
- Handle fleet-specific inquiries
- Authorize policy exceptions
- Manage driver issues within fleet
- Escalate to Driver Support for platform issues
4.4 Company Leadership (Tier 3)
| Attribute | Detail |
|---|---|
| Responsibility | Serious incidents, media inquiries, legal matters, DOT contact |
| Availability | On-call for escalations |
| Authority | Full decision authority, external communications |
| Escalation Triggers | Serious injury, fatality, regulatory contact, media inquiry |
5. Call Routing Logic
5.1 Keyword-Based Routing
INPUT: Driver utterance or system event
IF contains_safety_keywords(input):
→ Route to Safety Ops (immediate)
ELSE IF contains_support_keywords(input):
→ Route to Driver Support
ELSE IF fleet_has_custom_routing(driver.fleet_id):
IF matches_fleet_keywords(input, driver.fleet_id):
→ Route to Fleet Admin
ELSE:
→ Route to Driver Support
ELSE IF agent_unresolved_count >= 3:
→ Route to Driver Support
ELSE IF system_error:
→ Route to Driver Support5.2 Safety Keywords (Priority List)
python
SAFETY_KEYWORDS = [
# Emergency
"emergency", "911", "accident", "crash", "collision",
# Threat
"threat", "danger", "unsafe", "attack", "weapon",
# Medical
"hurt", "injured", "medical", "ambulance", "hospital",
# Panic
"sos", "panic", "help me", "scared", "kidnap",
# Incident
"fire", "smoke", "breakdown", "stranded"
]5.3 Support Keywords
python
SUPPORT_KEYWORDS = [
# Transfer request
"speak to", "human", "person", "representative", "agent",
# Help
"help", "support", "assist", "problem", "issue",
# Technical
"not working", "broken", "error", "bug", "glitch",
# Dispute
"cancel", "refund", "wrong", "mistake", "complaint"
]5.4 Routing Decision Flow
┌─────────────────────────────────────────────────────────────────┐
│ ESCALATION TRIGGERED │
└──────────────────────────────┬──────────────────────────────────┘
↓
┌──────────────────────┐
│ Analyze trigger type │
└──────────┬───────────┘
↓
┌──────────────────────┼──────────────────────┐
↓ ↓ ↓
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Safety │ │ Support │ │ Fleet │
│ keyword │ │ keyword │ │ specific │
└────┬────┘ └────┬─────┘ └────┬─────┘
↓ ↓ ↓
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Safety │ │ Driver │ │ Fleet │
│ Ops │ │ Support │ │ Admin │
└────┬────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ ┌──────┴──────┐ │
│ ↓ ↓ │
│ Available? Unavailable │
│ │ │ │
│ ↓ ↓ │
│ ┌────────┐ ┌──────────┐ │
│ │ Connect│ │ Voicemail│ │
│ │ │ │ + Page │ │
│ └────────┘ └──────────┘ │
│ │
└──────────────────┬────────────────────────┘
↓
┌─────────────┐
│ Log event │
│ Start timer │
└─────────────┘6. On-Call Configuration
6.1 Schedule Structure
| Role | Primary | Backup | Rotation |
|---|---|---|---|
| Safety Ops | 1 person | 1 person | Weekly |
| Driver Support (after-hours) | 1 person | 1 person | Daily |
| Fleet Admin | Per fleet | Per fleet | Fleet-defined |
6.2 On-Call Schedule Example
Safety Ops (24/7):
┌─────────────────────────────────────────────────────────────┐
│ Week 1: Alice (Primary), Bob (Backup) │
│ Week 2: Bob (Primary), Charlie (Backup) │
│ Week 3: Charlie (Primary), Alice (Backup) │
└─────────────────────────────────────────────────────────────┘
Driver Support (After-Hours: 8 PM - 8 AM):
┌─────────────────────────────────────────────────────────────┐
│ Mon: David | Tue: Eve | Wed: Frank | Thu: Grace | Fri: David│
│ Sat: Eve (all day) | Sun: Frank (all day) │
└─────────────────────────────────────────────────────────────┘6.3 Escalation Timeouts
| Scenario | Timeout | Action |
|---|---|---|
| Primary no answer | 30 seconds | Page backup |
| Backup no answer | 30 seconds | Page leadership |
| Leadership no answer | 60 seconds | Emergency protocol |
6.4 Notification Methods
| Priority | Method | Tool |
|---|---|---|
| Critical (Safety) | Phone + SMS + Push | PagerDuty |
| High (Support) | Phone + Push | PagerDuty |
| Normal | Push notification | PagerDuty |
| Low | Automated |
7. Handoff Protocol
7.1 Agent → Human Transition
Voice Agent Script:
"I'm connecting you with a [Safety Specialist / Support Representative].
Please hold for just a moment."
[Music/Hold tone plays]
[Transfer initiated]If transfer fails:
"I'm having trouble connecting. A team member will call you back
within [X] minutes at this number. Is that okay?"7.2 Context Transfer
When transferring, pass to human agent:
| Field | Content |
|---|---|
call_id | Unique call identifier |
driver_id | Driver identifier |
driver_name | First name, last initial |
driver_phone | Callback number |
vehicle_state | MOVING / STOPPED / PARKED |
escalation_reason | Safety / Support / Fleet / Unresolved |
conversation_summary | Last 3 exchanges summarized |
active_ride_id | If applicable |
fleet_id | Driver's fleet |
recording_consent | GRANTED / DENIED / WAIVED |
Context Transfer Format:
json
{
"call_id": "call_abc123",
"driver_id": "drv_xyz789",
"driver_name": "John D.",
"driver_phone": "+1XXXXXXXXXX",
"vehicle_state": "STOPPED",
"escalation_reason": "support",
"conversation_summary": "Driver reported app showing wrong pickup location. Attempted to refresh, issue persists.",
"active_ride_id": "ride_456",
"fleet_id": "fleet_001",
"recording_consent": "granted"
}7.3 Human Agent Greeting
Standard Greeting:
"Hi [Driver Name], this is [Agent Name] from Hop And Haul [Safety/Support].
I see you were having [issue from summary]. Let me help you with that."Safety Greeting:
"[Driver Name], this is [Agent Name] from Hop And Haul Safety.
Are you safe right now? What's happening?"7.5 Human Dispatcher Standards (per PLCY-COM-001 Section 6)
Human dispatchers contacting drivers MUST follow the same communication principles as the automated system:
| Principle | Requirement |
|---|---|
| Voice-only | No required screen interaction while driver is moving |
| No time pressure | Never use urgent or pressuring language |
| Hands-free | All communication completable via voice response only |
| No coercion | Accept "no" immediately, no follow-up pressure |
When Human Dispatch Applies:
- System failures or escalations
- Complex multi-stop coordination
- Driver-initiated questions
Prohibited for Human Dispatchers (same as automated system):
- Urgent or pressuring language ("hurry," "last chance," "you need to decide now")
- Requests to view a screen or tap a button
- Complex routing instructions during the decision call
- Guilt-based framing for declines
7.4 Recording Handoff
| Consent Status | Handoff Action |
|---|---|
| GRANTED | Continue recording, human informed |
| DENIED | Recording off, human informed |
| WAIVED (emergency) | Recording continues, documented |
8. Single-Person Operations
8.1 Use Case
For small fleets or early-stage operations, one person may handle all escalation types.
8.2 Simplified Configuration
Single Operator Mode:
┌─────────────────────────────────────────────────────────────┐
│ ALL ESCALATIONS → Single On-Call Person │
│ │
│ Primary: [Operator Name] │
│ Backup: [Backup Name or Voicemail] │
│ │
│ Hours: 8 AM - 10 PM │
│ After-hours: Voicemail + SMS alert │
└─────────────────────────────────────────────────────────────┘8.3 After-Hours Behavior
| Urgency | After-Hours Action |
|---|---|
| Safety (critical) | Page operator immediately (phone + SMS) |
| Support (normal) | Voicemail + SMS, callback next business day |
| Fleet-specific | Voicemail, callback next business day |
8.4 Voicemail Script
"Thank you for calling Hop And Haul. Our team is currently unavailable.
If this is a safety emergency, please hang up and call 911.
For all other inquiries, please leave a message with your name and
phone number, and we'll return your call within [X] hours.
[Beep]"9. Audit Logging
9.1 Escalation Event Log
| Field | Description |
|---|---|
escalation_id | Unique identifier |
call_id | Source call identifier |
timestamp | When escalation triggered |
trigger_type | SAFETY / SUPPORT / FLEET / UNRESOLVED / SYSTEM |
trigger_detail | Keyword or event that triggered |
source | LLM_AGENT / DRIVER_REQUEST / SYSTEM |
destination_role | SAFETY_OPS / DRIVER_SUPPORT / FLEET_ADMIN |
destination_person | Who received the escalation |
response_time_ms | Time to human answer |
resolution | How escalation was resolved |
resolution_time_ms | Total time to resolution |
9.2 Sample Log Entry
json
{
"escalation_id": "esc_001",
"call_id": "call_abc123",
"timestamp": "2025-12-30T14:30:00.000Z",
"trigger_type": "SUPPORT",
"trigger_detail": "Driver said 'speak to a person'",
"source": "DRIVER_REQUEST",
"destination_role": "DRIVER_SUPPORT",
"destination_person": "agent_david",
"response_time_ms": 45000,
"resolution": "App refresh resolved pickup display issue",
"resolution_time_ms": 180000
}9.3 Metrics & Reporting
| Metric | Calculation | Target |
|---|---|---|
| Escalation rate | Escalations / Total calls | <10% |
| Average response time | Avg(response_time_ms) | <120 sec |
| First-call resolution | Resolved without re-escalation | >85% |
| Safety response time | Avg for safety escalations | <60 sec |
10. Integration Points
10.1 PagerDuty Integration
| Event | PagerDuty Action |
|---|---|
| Safety escalation | Create P1 incident, page on-call |
| Support escalation | Create P3 incident, notify on-call |
| No answer (timeout) | Escalate to backup |
| Resolution | Resolve incident |
10.2 Twilio Call Transfer
Transfer Types:
| Type | Use Case | Implementation |
|---|---|---|
| Warm transfer | Standard support | Agent stays on briefly |
| Cold transfer | High volume | Direct transfer |
| Conference | Complex issues | 3-way call |
Warm Transfer TwiML:
xml
<Response>
<Dial>
<Number statusCallback="/transfer-status">+1XXXXXXXXXX</Number>
</Dial>
</Response>10.3 Hop And Haul API Integration
| Endpoint | Purpose |
|---|---|
POST /escalations | Log escalation event |
GET /drivers/{id}/context | Get driver context for handoff |
POST /incidents | Create incident record (safety) |
11. NIST 800-53 Control Mapping
| Control | Title | Implementation |
|---|---|---|
| IR-4 | Incident Handling | Safety escalation procedures |
| IR-5 | Incident Monitoring | Escalation logging and metrics |
| IR-6 | Incident Reporting | Escalation audit trail |
| AU-2 | Event Logging | All escalations logged |
| AU-3 | Content of Audit Records | Full context captured |
12. Document Control
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | December 30, 2025 | Hop And Haul Team | Initial release |
| 1.1 | January 21, 2026 | Hop And Haul Team | Aligned with PLCY-COM-001 v3.0: Added Section 7.5 Human Dispatcher Standards defining voice-only, no time pressure, and hands-free requirements for human dispatchers per PLCY-COM-001 Section 6. |