AI Voice SDR Handbook
A comprehensive guide for designing, deploying, and optimizing AI Voice agents in marketing automation systems.
Preface: The Philosophy of AI Voice in Sales
The telephone is the most intimate marketing channel. Unlike email (asynchronous, skimmable) or ads (passive, interruptible), a phone call demands presence. The prospect must stop what they're doing and engage in real-time dialogue.
This intimacy is both the opportunity and the constraint.
AI Voice SDR is not about replacing human salespeople. It's about deploying the right intelligence at the right moment in the buyer journey-at speeds and scales humans cannot match, for interactions where human judgment is not the bottleneck.
The core insight: Speed and availability beat persuasion for most qualification conversations.
A form fill at 2:47 PM from a prospect actively researching solutions has a 10-minute half-life. Every minute that passes, intent decays. A human SDR checking their queue at 3:30 PM is already 43 minutes late. The AI that calls in 90 seconds captures the prospect at peak intent.
This is not a document about AI replacing humans. It's about AI creating opportunities that humans can close.
Part 1: Foundations
1.1 What AI Voice SDR Is (and Isn't)
What It Is
AI Voice SDR is a conversational agent deployed via telephone that:
- Qualifies prospects against defined criteria
- Collects information required to advance the sale
- Routes opportunities to appropriate next steps (agreement, human, nurture)
- Handles common objections and questions within defined bounds
It operates as an intelligent filter and accelerator-not a closer.
What It Isn't
It is not a closer. Complex negotiations, high-stakes objections, and relationship-dependent sales require human judgment. The AI's job is to ensure humans spend their time on qualified, ready opportunities-not on discovery calls that go nowhere.
It is not an IVR. Interactive Voice Response systems route calls through menu trees. AI Voice SDR engages in natural dialogue, understanding intent and responding dynamically.
It is not a chatbot on a phone line. Text-based conversational patterns fail in voice. Voice requires different pacing, turn-taking, and information density.
It is not a replacement for strategy. An AI can only execute a strategy-it cannot create one. Poor targeting, weak offers, or misaligned incentives will produce poor results regardless of how sophisticated the AI is.
The Capability Spectrum
Low Complexity High Complexity
│ │
▼ ▼
┌─────────┬──────────────┬───────────────┬──────────────┬──────────────┐
│ Confirm │ Qualify │ Handle │ Consult │ Negotiate │
│ Info │ Fit/Need │ Objections │ Advise │ Close │
└─────────┴──────────────┴───────────────┴──────────────┴──────────────┘
│ │ │
└─────── AI ZONE ─────────┘ │
│
└────────── HUMAN ZONE ────────┘AI excels at the left side of the spectrum. Humans are required for the right. The boundary between "Handle Objections" and "Consult/Advise" is where most handoffs should occur.
1.2 Deployment Contexts
Every AI Voice deployment exists along two axes:
Axis 1: Direction (Inbound vs. Outbound)
Inbound: The prospect initiates contact. They have intent. Your job is to capture and qualify that intent efficiently.
- Higher baseline conversion (they called you)
- Unknown context (why are they calling?)
- Expectation of immediate help
- Risk: Misrouting, failure to identify intent
Outbound: You initiate contact. The prospect may or may not have context.
- Lower baseline conversion (you're interrupting)
- Known context (you chose when and why to call)
- Expectation must be established
- Risk: Annoyance, wrong timing, no answer
Axis 2: Temperature (Cold vs. Warm)
Cold: No prior interaction. They don't know you.
- Must establish credibility immediately
- Must earn the right to ask questions
- High resistance, low trust
- Requires strong relevance signal in opener
Warm: Prior interaction exists. They have context.
- Can reference shared context
- Permission to engage is partially granted
- Lower resistance, baseline trust established
- Relevance signal is the prior interaction itself
The 2x2 Matrix
INBOUND OUTBOUND
┌─────────────────────┬─────────────────────┐
│ │ │
COLD │ Rare (misdials, │ Classic cold │
│ general inquiries) │ calling │
│ │ │
├─────────────────────┼─────────────────────┤
│ │ │
WARM │ Form fills, │ Follow-up calls, │
│ ad responses, │ re-engagement, │
│ email signature │ positive reply │
│ callbacks │ callbacks │
│ │ │
└─────────────────────┴─────────────────────┘Warm Inbound is the highest-leverage deployment. The prospect has raised their hand AND is calling you. Conversion rates of 40-60% to next step are achievable.
Warm Outbound is the second-highest leverage. You're calling someone who engaged but didn't complete. They need a nudge, not a pitch.
Cold Outbound is viable but requires careful design. You're interrupting someone who didn't ask to be called. The AI must earn attention in the first 10 seconds.
Cold Inbound is rare but must be handled. Someone calls your number with no context-wrong number, general inquiry, or transferred from elsewhere.
1.3 Success Metrics and Benchmarks
Primary Metrics
| Metric | Definition | Why It Matters |
|---|---|---|
| Connection Rate | Calls answered / Calls attempted | Upstream constraint-you can't convert if they don't answer |
| Qualification Rate | Qualified leads / Connected calls | Core agent effectiveness measure |
| Conversion Rate | Next-step completions / Qualified leads | Agreement sent, meeting booked, etc. |
| Completion Rate | Calls reaching intended end state / Connected calls | Did the conversation complete or drop? |
| Average Handle Time | Mean duration of completed calls | Efficiency indicator (shorter is usually better) |
Secondary Metrics
| Metric | Definition | Why It Matters |
|---|---|---|
| Drop-off by Stage | Where in the conversation do calls end? | Identifies friction points |
| Objection Frequency | Which objections appear most often? | Input for script optimization |
| Human Escalation Rate | Calls requiring human handoff / Total calls | Indicates edge case volume |
| Data Accuracy | Fields correctly captured / Fields attempted | Especially critical for email |
| Speed to Contact | Time from trigger to connected call | For outbound, this is often the most important metric |
Benchmark Ranges
These vary significantly by industry, lead source, and offer. Use as directional guidance, not absolute targets.
| Context | Connection Rate | Qualification Rate | Conversion Rate |
|---|---|---|---|
| Warm Inbound (form fill) | 70-90% | 50-70% | 40-60% |
| Warm Outbound (positive reply) | 30-50% | 40-60% | 30-50% |
| Warm Outbound (engaged non-reply) | 20-35% | 30-50% | 20-40% |
| Cold Outbound | 10-25% | 20-40% | 15-30% |
The Speed-to-Lead Imperative
For inbound form fills, speed is the dominant variable:
| Response Time | Relative Contact Rate | Relative Qualification Rate |
|---|---|---|
| < 1 minute | 1.0x (baseline) | 1.0x (baseline) |
| 1-5 minutes | 0.8x | 0.9x |
| 5-30 minutes | 0.5x | 0.6x |
| 30-60 minutes | 0.3x | 0.4x |
| > 1 hour | 0.1x | 0.2x |
The implication is clear: AI's ability to call within seconds is often more valuable than any prompt optimization. A mediocre script at 30 seconds beats a perfect script at 30 minutes.
1.4 The Awareness Spectrum in Voice Context
Eugene Schwartz's awareness levels apply directly to AI Voice deployment. The prospect's awareness level determines:
- What context you can assume
- How much education is required
- What the call's objective should be
The Five Levels Applied to Voice
Level 1: Unaware The prospect doesn't know they have a problem.
AI Voice role: Limited. Cold calling unaware prospects with AI is low-yield. Better to use content/ads to create awareness first.
If you must: Lead with a question that surfaces latent pain. "Quick question-have you ever had [specific problem]?"
Level 2: Problem-Aware The prospect knows they have a problem but doesn't know solutions exist.
AI Voice role: Problem amplification + solution introduction. Connect their pain to your category.
Approach: Validate the problem, then introduce the solution category. "Yeah, that's actually why most [type] end up calling us. There's a way to fix that."
Level 3: Solution-Aware The prospect knows solutions exist but doesn't know your specific solution.
AI Voice role: Differentiation. Why you vs. alternatives?
Approach: Acknowledge alternatives exist, then position your mechanism/differentiator. "Most vendors do X-we do Y instead, which means [benefit]."
Level 4: Product-Aware The prospect knows your solution but hasn't decided to buy.
AI Voice role: Objection handling + friction removal. What's stopping them?
Approach: Surface objections, address them, make next step easy. "What questions do you have?" / "What would you need to see to move forward?"
Level 5: Most Aware The prospect is ready to buy; they just need a mechanism.
AI Voice role: Transaction facilitation. Make it easy to say yes.
Approach: Minimal selling, maximum ease. "I can send the agreement now and you can sign whenever you're ready. What's the best email?"
Matching Call Design to Awareness
| Awareness Level | Call Objective | Primary Script Focus | Typical Lead Source |
|---|---|---|---|
| Unaware | Create curiosity | Problem questions | Cold list |
| Problem-Aware | Connect problem to solution | Education + qualification | Cold list, some referrals |
| Solution-Aware | Differentiate | Proof + mechanism | Comparison shoppers |
| Product-Aware | Overcome objections | Objection handling | Engaged but stalled |
| Most Aware | Facilitate transaction | Collect info, send agreement | Form fills, positive replies |
Critical insight: Most AI Voice deployments should target Level 4-5 prospects. These are warm leads where the AI's limitations (no deep consultative ability) don't matter, and its strengths (speed, consistency, availability) are maximized.
Deploying AI against Level 1-2 prospects is possible but requires exceptional scripting and should be considered advanced.
Part 2: Strategic Deployment
2.1 When to Use AI Voice vs. Other Channels
The channel selection framework considers four variables:
Variable 1: Lead Temperature
| Temperature | Best Channel | Why |
|---|---|---|
| Hot (form fill, requested call) | AI Voice (immediate) | Speed captures peak intent |
| Warm (engaged, didn't convert) | AI Voice (follow-up) | Phone breaks through inbox noise |
| Cool (opened emails, no action) | Email + Phone escalation | Lower intent, test with low-cost channel first |
| Cold (no prior engagement) | Email first, Phone if engaged | Don't burn phone as first touch |
Variable 2: Information Complexity
| Complexity | Best Channel | Why |
|---|---|---|
| Simple (binary qualification) | AI Voice | Fast, immediate, personal |
| Moderate (3-5 data points) | AI Voice or Form | Depends on lead temperature |
| Complex (consultative discovery) | Human | AI can't navigate nuance |
| Transactional (send agreement) | AI Voice → Email delivery | Hybrid: qualify by phone, deliver by email |
Variable 3: Urgency
| Urgency | Best Channel | Why |
|---|---|---|
| Immediate (hot intent) | AI Voice | Sub-minute response required |
| Same-day | AI Voice or Email | Depends on complexity |
| Low urgency | Let them engage on their schedule |
Variable 4: Cost per Contact
| Volume | Cost Consideration |
|---|---|
| < 100 leads/day | Cost differential negligible, optimize for conversion |
| 100-1000 leads/day | Phone for high-temp, email for low-temp |
| > 1000 leads/day | Email + AI Voice for engaged subset |
The Decision Matrix
function selectChannel(lead: Lead): Channel {
// Hot leads always get phone
if (lead.temperature === 'hot' && lead.source === 'form_fill') {
return 'ai_voice_immediate';
}
// Warm leads with phone number get phone follow-up
if (lead.temperature === 'warm' && lead.phone && lead.emailEngagement > 0) {
return 'ai_voice_followup';
}
// Cool leads start with email
if (lead.temperature === 'cool') {
return 'email_sequence';
}
// Cold leads start with email, escalate to phone if engaged
if (lead.temperature === 'cold') {
return 'email_then_phone_if_engaged';
}
return 'email_sequence'; // Default
}2.2 Funnel Placement: Where AI Voice Creates Leverage
High-Leverage Deployments
1. Instant Callback on Form Fills
Trigger: Form submission Timing: < 60 seconds Context: Full form data available Goal: Qualify + send agreement/book meeting
This is the highest-ROI deployment. Form fills represent peak intent. Speed dominates all other variables.
[Form Submit] → [Trigger] → [AI Call < 60s] → [Qualify] → [Send Agreement]
│
└→ [Disqualify] → [Nurture]2. Positive Email Reply Callback
Trigger: Positive reply detected (manual or AI classification) Timing: 3 to 5 minutes Context: Email conversation history, possibly phone from signature Goal: Capitalize on expressed interest
The prospect raised their hand. Calling immediately while they're thinking about you dramatically increases conversion.
[Positive Reply] → [Extract Phone] → [AI Call < 5m] → [Qualify] → [Send Agreement]
│
└→ [No Phone] → [Reply asking for phone or continue email]3. Inbound to Marketing Number
Trigger: Inbound call to number in marketing materials Timing: Real-time (they're calling you) Context: They saw your marketing, unknown specifics Goal: Identify intent, qualify, route
Someone took the action of dialing. They have intent. The AI qualifies and routes.
[Inbound Call] → [AI Answers] → [Identify Intent] → [Qualify] → [Route/Close]
│
└→ [Wrong Number / Service Issue] → [Handle/Escalate]4. Follow-up on Engaged Non-Responders
Trigger: Opened 2+ emails, no reply Timing: After email sequence completes (Day 12+) Context: They engaged (opened) but didn't act Goal: Break through inbox fatigue, surface objections
Email opens without reply suggests interest with friction. Phone surfaces what email couldn't.
[Sequence Complete] → [Filter: 2+ Opens] → [Has Phone?] → [AI Follow-up Call]
│
└→ [No Phone] → [Re-engage Email or Move to Nurture]5. Re-engagement of Stale Opportunities
Trigger: Time-based (30/60/90 days since last contact) Timing: Scheduled Context: Prior qualification data, previous objection Goal: Check if circumstances changed
Previously qualified leads who didn't close often have timing objections. Periodic check-ins surface ready buyers.
[90 Days Since Close Lost] → [AI Re-engagement Call] → [Still Interested?] → [Requalify]
│
└→ [No] → [Extend Interval or Remove]Lower-Leverage Deployments (Use Selectively)
Cold Calling (No Prior Touch)
Viable but lower conversion. The AI must earn attention with no prior context. Best reserved for:
- Highly targeted lists with strong relevance signals
- Industries where cold calling is normative (some local services)
- When you have excess calling capacity
Post-Sale Onboarding
Operationally valuable, not lead generation. AI can confirm details, schedule appointments, answer common questions. Reduces human burden on repetitive onboarding tasks.
Post-No-Answer Voicemail + SMS
Extends reach of outbound attempts. When AI calls and no one answers:
- Leave 15-second voicemail
- Immediately send SMS
This combo often outperforms multiple call attempts.
2.3 Lead Source → Agent Behavior Mapping
Different lead sources provide different context. The agent's behavior must adapt to available information and implied intent.
The Context Principle
The more context you have, the more direct you can be. The less context you have, the more you must discover.
Lead Source Matrix
| Lead Source | Available Data | Lead's Context | Opener Strategy | Qualification Depth |
|---|---|---|---|---|
| Paid Ad Form Fill | Name, email, phone, company, form responses | High-they just filled out a form about your thing | Direct confirmation | Light-they pre-qualified via form |
| Organic Form Fill | Name, email, phone, maybe company | Medium-they sought you out | Acknowledge source, clarify intent | Medium-verify fit |
| Cold Email Positive Reply | Name, email, maybe phone from signature | Medium-they responded to your email | Reference the email | Medium-they're interested but not qualified |
| Cold Email Non-Response Follow-up | Name, email, campaign data | Low-they didn't respond | Reference emails, offer new angle | Full-assume nothing |
| Inbound to Marketing Number | Caller ID only | Variable-they called for some reason | Clarify why they're calling | Full-start from scratch |
| Cold Call (No Prior) | Whatever you scraped | None-you're interrupting | Earn attention immediately | Full-you know nothing |
| Referral / Warm Intro | Referrer name, basic context | Medium-someone vouched for you | Lead with referrer | Medium-trust is higher |
| Re-engagement (Stale) | Full history from CRM | Full-you've talked before | Acknowledge gap, check for change | Light-reconfirm previous qualification |
Adapting the Opener
function generateOpener(lead: Lead): string {
switch (lead.source) {
case 'paid_ad_form':
return `Hey, is this ${lead.firstName}? Great-calling about the form you just filled out for ${lead.formTopic}. Got a quick second?`;
case 'organic_form':
return `Hey ${lead.firstName}, this is [Agent] from [Company]. You reached out through our website-wanted to see how I can help.`;
case 'cold_email_positive_reply':
return `Hey, this is [Agent]-you just replied to my email about [topic]. Got a minute?`;
case 'cold_email_followup':
return `Hey ${lead.firstName}, this is [Agent] from [Company]. I sent you a few emails about [topic]-figured a quick call might be easier. Got 30 seconds?`;
case 'inbound_marketing_number':
return `Hey, this is [Agent]-you calling about [most likely reason based on number placement]?`;
case 'cold_call':
return `Hey, quick question-[highly relevant question that earns attention]?`;
case 'referral':
return `Hey ${lead.firstName}, this is [Agent] from [Company]. ${lead.referrerName} suggested I reach out-got a minute?`;
case 'reengagement':
return `Hey ${lead.firstName}, this is [Agent] from [Company]. We talked a few months back about [topic]. Wanted to check if anything's changed on your end.`;
default:
return `Hey, this is [Agent] from [Company]. How can I help you?`;
}
}2.4 Multi-Channel Sequence Design
AI Voice is most powerful as part of an orchestrated multi-channel sequence, not as a standalone touchpoint.
The Orchestration Principle
Use low-cost channels to create context, then deploy high-cost channels to capitalize on engagement.
Email is cheap. Phone is expensive (in attention, not just cost). Use email to:
- Create familiarity (they've seen your name)
- Test messaging (what resonates?)
- Signal intent (opens, clicks, replies)
Use phone to:
- Capitalize on signaled intent
- Break through when email fails
- Add urgency when timing matters
Sequence Architecture Patterns
Pattern 1: Email-Led with Phone Escalation
Day 1: Email 1 (cold touch)
Day 4: Email 2 (follow-up, new angle)
Day 9: Email 3 (final value + graceful exit)
Day 12: [If opened 2+ emails] AI Voice Follow-up
Day 12: [If no engagement] Move to nurtureThis pattern uses email to warm and test, then phone to convert the engaged subset.
Pattern 2: Instant Callback with Email Backup
Trigger: Form submission
Immediate: AI Voice Call (attempt 1)
+5 minutes: [If no answer] SMS + Voicemail
+30 minutes: [If no answer] AI Voice Call (attempt 2)
+2 hours: [If no answer] Email with booking link
+24 hours: AI Voice Call (attempt 3)
+48 hours: [If no contact] Enter email nurture sequenceThis pattern prioritizes phone for hot leads but ensures email captures those who prefer asynchronous.
Pattern 3: Parallel Warm-up
Day 1: Email 1 + LinkedIn connection request + AI Voice Call (attempt 1)
Day 2: [If call connected] Continue on phone
Day 2: [If no answer] LinkedIn message
Day 4: Email 2 + AI Voice Call (attempt 2)
Day 7: Email 3 (reference all channels)For high-value targets, parallel multi-channel creates omnipresence. "I've emailed, called, and messaged-clearly I want to talk to you."
Channel Transition Logic
interface SequenceState {
emailsSent: number;
emailsOpened: number;
callsAttempted: number;
callsConnected: number;
smssSent: number;
lastContactDate: Date;
leadStatus: 'new' | 'engaged' | 'stale' | 'converted' | 'disqualified';
}
function determineNextAction(state: SequenceState, lead: Lead): Action {
// Hot lead with no contact yet → keep calling
if (lead.temperature === 'hot' && state.callsConnected === 0 && state.callsAttempted < 3) {
return { action: 'call', delay: calculateCallDelay(state.callsAttempted) };
}
// Engaged in email but no call connection → try phone
if (state.emailsOpened >= 2 && state.callsAttempted === 0 && lead.phone) {
return { action: 'call', delay: 0 };
}
// Multiple call attempts, no answer → SMS + voicemail combo
if (state.callsAttempted >= 2 && state.callsConnected === 0) {
return { action: 'sms_voicemail', delay: 0 };
}
// Email sequence incomplete → continue email
if (state.emailsSent < 3) {
return { action: 'email', delay: getEmailInterval(state.emailsSent) };
}
// Sequence complete, no engagement → nurture
if (state.emailsSent >= 3 && state.emailsOpened === 0 && state.callsConnected === 0) {
return { action: 'move_to_nurture', delay: 0 };
}
// Default: wait and reassess
return { action: 'wait', delay: 86400000 }; // 24 hours
}The Voicemail + SMS Combo
When outbound calls go unanswered, the voicemail + SMS combo extends reach:
Voicemail (15 seconds max):
"Hey [Name], this is [Agent] from [Company]. Quick question about [topic]-
give me a call back at [number] or just text me. Thanks."SMS (sent immediately after voicemail):
Hey-just left you a voicemail about [topic].
[One-line value prop].
Text me back if you want the details.Why this works:
- Voicemail = social proof (you called, you're real)
- SMS = low-friction response mechanism
- Combination = 2 touches in 30 seconds
2.5 Timing and Availability Strategy
When you call matters almost as much as what you say.
Time-of-Day Considerations
| Time Window | Connection Rate | Quality | Best For |
|---|---|---|---|
| 8-9 AM | Medium | High (decision-makers available before meetings) | B2B executives |
| 9 AM - 12 PM | High | High | General business |
| 12-2 PM | Low | Medium (lunch, distracted) | Avoid if possible |
| 2-5 PM | High | Medium-High | General business |
| 5-7 PM | Medium | Variable | Local services, consumer |
| 7-9 PM | Low-Medium | Low (personal time) | Only if explicitly preferred |
Day-of-Week Considerations
| Day | Relative Performance | Notes |
|---|---|---|
| Monday | 0.8x | Catching up from weekend, meetings |
| Tuesday | 1.1x | Best day for B2B |
| Wednesday | 1.1x | Best day for B2B |
| Thursday | 1.0x | Good, starts tapering |
| Friday | 0.7x | Checked out, weekend mode |
| Saturday | 0.3x (B2B) / 0.9x (Consumer) | Avoid for business, okay for consumer |
| Sunday | 0.2x (B2B) / 0.8x (Consumer) | Avoid for business |
Industry-Specific Timing
Restaurants: Avoid 11 AM - 2 PM and 5 PM - 9 PM (service hours). Best: 2-4 PM, 9-10 AM.
Retail: Avoid weekends and evenings. Best: Tuesday-Thursday, 10 AM - 4 PM.
Professional Services: Standard business hours. Best: Tuesday-Thursday, 9 AM - 11 AM, 2 PM - 4 PM.
Local Services (Home): Homeowners available evenings/weekends. Best: 5-7 PM, Saturday morning.
Speed vs. Optimal Timing
For warm inbound leads, speed beats optimal timing. Call immediately regardless of time of day (within legal calling hours).
For cold outbound, optimal timing beats speed. Wait for the right window.
function shouldCallNow(lead: Lead, currentTime: Date): boolean {
// Always call hot leads immediately (within legal hours)
if (lead.temperature === 'hot') {
return isWithinLegalCallingHours(currentTime, lead.timezone);
}
// Cold leads: wait for optimal window
if (lead.temperature === 'cold') {
return isOptimalCallingWindow(currentTime, lead.timezone, lead.industry);
}
// Warm leads: call during business hours
return isWithinBusinessHours(currentTime, lead.timezone);
}Part 3: Conversation Design
3.1 Core Principles of Voice Conversation
Voice is fundamentally different from text. Patterns that work in chatbots fail on the phone. Understanding why requires understanding the medium.
The Constraints of Voice
Linearity: Voice is strictly linear. The prospect cannot skim, skip ahead, or re-read. Every word must earn its place in sequence.
Ephemerality: Spoken words disappear immediately. Complex information isn't retained. The prospect cannot "scroll up" to remember what you said.
Cognitive Load: Listening requires active attention. Long monologues exhaust working memory. Questions stack up and overwhelm.
Social Pressure: Silence on a phone call is uncomfortable. There's pressure to respond, even without full comprehension.
Interruption: Unlike text, voice can be interrupted mid-thought. The agent must handle being cut off gracefully.
The Principles That Follow
Principle 1: Short Turns
Never speak more than 2 sentences (roughly 15-20 words) without inviting response.
Why: Working memory can hold ~7 items. Two sentences = ~2-3 ideas = safely within capacity. More than that and the beginning is forgotten by the end.
❌ Bad (Too Long):
"Great, so I'll send over the service agreement which includes all the
details about pricing, pickup schedules, container options, and rebate
structures, and once you've had a chance to review it you can sign
digitally through the link, and if you have any questions you can call
this number or reply to the email."
✓ Good (Chunked):
"Great-I'll send over the service agreement now."
[pause for acknowledgment]
"Once you've looked it over, you can sign right from the email."
[pause]
"Any questions, just call this number back."Principle 2: One Question at a Time
Never ask multiple questions in a single turn. The prospect will answer one (usually the last) and forget the others.
❌ Bad (Stacked Questions):
"How many fryers are you running and how often do you change the oil?"
✓ Good (Sequential):
"How many fryers are you running?"
[wait for answer]
"And how often do you change the oil?"Principle 3: Linear Flow
Design conversations to progress in a straight line. Branching should be minimal and always return to the main path.
The prospect should never wonder "where is this going?" The next step should feel inevitable.
Opening → Qualification → Offer → Collection → Close
│ │ │ │ │
└───────────┴───────────┴──────────┴─────────┘
(Always moving forward)Principle 4: Signal Before Request
Before asking for something, explain why you need it or what they'll get.
❌ Bad (Request Without Context):
"What's your email address?"
✓ Good (Signal Then Request):
"I'll send over the agreement now-what's the best email?"The "I'll send over the agreement" signals why email is needed. The request follows naturally.
Principle 5: Acknowledge Before Advancing
When the prospect provides information, acknowledge it before moving on. This confirms receipt and maintains rapport.
❌ Bad (No Acknowledgment):
Prospect: "We've got four fryers."
Agent: "How often do you change the oil?"
✓ Good (Acknowledgment):
Prospect: "We've got four fryers."
Agent: "Got it-four fryers. And how often do you change the oil?"Principle 6: Recover Gracefully
Conversations will go off-script. The agent must have patterns for redirecting without making the prospect feel dismissed.
Prospect: "Wait, before we continue-how much is this going to cost?"
Agent: "Good question. The exact pricing depends on your volume-I'll
cover that in just a second. Let me just get one more detail first
so I can give you an accurate number. How often do you change the oil?"3.2 The Minimum Viable Phone Data Framework
Every piece of information you collect on the phone adds friction. Friction causes drop-off. The framework optimizes for minimum collection while ensuring you can execute the next step.
The Core Question
"What is the minimum information needed to deliver the next step?"
Everything else can be collected downstream (forms, follow-up, CRM enrichment).
The Three Categories
Category 1: Must Have (Collect on Phone)
Information required to:
- Qualify/disqualify the lead
- Deliver the next step (send agreement, book meeting)
- Identify them in your system
interface MustHaveData {
qualification: {
// Information needed to determine if they're a fit
// Example: service area, volume threshold, decision-maker status
};
delivery: {
// Information needed to deliver next step
// Example: email address (if sending agreement)
};
identification: {
// Minimum info to find them later
// Example: first name + company OR first name + phone
};
}Category 2: Nice to Have (Collect If Low Friction)
Information that helps but isn't essential:
- Company/restaurant name (for CRM)
- Title (for personalization)
- Timeline (for prioritization)
Collect only if:
- The conversation naturally goes there
- They're engaged and not rushing
- You can frame it as helpful to them
Category 3: Form Handles (Don't Collect on Phone)
Information that:
- Is error-prone over voice (addresses, complex names)
- Adds significant call length
- The form will capture anyway
- Can be enriched from other sources
Examples:
- Full address (autofill helps them, error-prone for you)
- Last name (form captures, you have first name)
- Phone (you have caller ID on inbound, or you called them)
- Full legal business name (form captures)
The Trade-Off Calculation
Phone Friction Cost = (questions asked) × (avg seconds per question) × (drop-off risk per question)
Form Friction Cost = (empty fields) × (completion difficulty) × (abandonment risk per field)Research suggests:
- Each phone question adds 10-20 seconds and ~5% drop-off risk
- Each form field adds ~5-10% abandonment risk
- Pre-filled form fields reduce abandonment by 25-50%
The implication: If you can pre-fill 3 fields but add 3 questions, you've roughly broken even on friction but moved it to a worse context (phone, where attention is scarcer).
The heuristic: When in doubt, let the form handle it.
Implementation by Lead Source
| Lead Source | Must Collect | Nice to Have | Let Form Handle |
|---|---|---|---|
| Paid Ad Form Fill | Confirmation only | Clarifications | Already have most data |
| Organic Inbound | Qualification, email | Company name | Address, full name, title |
| Cold Email Reply | Qualification, email | Company | Everything else |
| Cold Call | Qualification, email | Name, company | Everything else |
| Inbound to Marketing Number | Name, qualification, email | Company | Address, title |
3.3 Qualification Structure
Qualification serves two purposes:
- Filter: Remove leads that cannot or should not be served
- Prioritize: Identify which qualified leads deserve fastest follow-up
The Qualification Hierarchy
Hard Disqualifiers (Check First)
Non-negotiable criteria that immediately end the conversation. Check these early to avoid wasting time.
Examples:
- Outside service area
- Below minimum volume/spend threshold
- Not a decision-maker (and can't route to one)
- Wrong industry/type
interface HardDisqualifiers {
serviceArea: {
check: (location: string) => boolean;
exitScript: "We don't service that area yet...";
};
minimumVolume: {
check: (volume: number) => boolean;
exitScript: "For that volume, our service doesn't quite work...";
};
// etc.
}Soft Qualifiers (Check Second)
Criteria that affect fit or priority but don't disqualify:
- Volume tier (affects pricing, urgency)
- Timeline (immediate need vs. exploring)
- Current vendor status (switching vs. new)
- Number of locations (affects deal size)
interface SoftQualifiers {
volumeTier: 'high' | 'medium' | 'low';
timeline: 'immediate' | 'this_quarter' | 'exploring';
hasCurrentVendor: boolean;
locationCount: number;
}The Qualification Funnel
┌─────────────────────────────────────────┐
│ ALL CONNECTED CALLS │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ HARD DISQUALIFIER CHECK (Early) │
│ - Service area? │
│ - Minimum threshold? │
└─────────────────────────────────────────┘
│
┌──────────┴──────────┐
│ │
[DISQUALIFIED] [PASSES]
│ │
▼ ▼
Exit gracefully ┌─────────────────────────────────────────┐
│ SOFT QUALIFIER COLLECTION │
│ - Volume/tier │
│ - Timeline │
│ - Current situation │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ NEXT STEP EXECUTION │
│ - Send agreement │
│ - Book meeting │
│ - Route to human │
└─────────────────────────────────────────┘Qualification Question Patterns
For Volume/Size:
- Direct: "How many [units] are you running?"
- Indirect: "Would you say you're a small, medium, or large operation?"
- Benchmark: "Most of our clients do about [X]. Are you above or below that?"
For Timeline:
- Direct: "When are you looking to make a change?"
- Indirect: "Is this something you're looking to do now, or more long-term?"
- Urgency test: "If everything looked good, could you move forward this week?"
For Decision-Maker Status:
- Direct: "Are you the one who makes this decision?"
- Softer: "Who else would need to be involved in this decision?"
- Implication: "Are you the owner of [company]?" (assumes owner = decision-maker)
For Current Situation:
- Direct: "Are you currently working with a [vendor type]?"
- Problem-oriented: "What's been the biggest issue with your current [vendor/solution]?"
- Satisfaction: "How happy are you with your current setup?"
Graceful Disqualification
Never make the prospect feel rejected. Even disqualified leads may:
- Refer others
- Return later when circumstances change
- Leave reviews/word-of-mouth
Disqualification Script Pattern:
[Acknowledge their situation]
[Explain why fit isn't right-make it about logistics, not them]
[Offer alternative or future path]
[End warmly]
Example:
"Got it-for that volume, our truck routes don't quite pencil out
economically. We need about [threshold] to make the logistics work.
You might want to check [alternative]. But if things change on your
end, definitely give me a call back. Appreciate your time."3.4 Objection Handling Patterns
Objections are not rejection-they're requests for more information or friction signals. The goal is not to "overcome" but to resolve.
The Objection Categories
Category 1: Information Gaps They don't have enough information to decide.
Signal: "How does it work?" / "What's included?" / "What's the price?" Resolution: Provide information, then check if resolved.
Category 2: Trust Gaps They don't trust your claims.
Signal: "How do I know this works?" / "Sounds too good to be true" Resolution: Proof-logos, specifics, mechanism explanation.
Category 3: Priority Gaps It's not urgent enough to act now.
Signal: "I need to think about it" / "Not right now" / "Maybe later" Resolution: Respect the timing, make next step easy, leave door open.
Category 4: Authority Gaps They can't make the decision alone.
Signal: "I need to talk to [someone]" / "I'm not the one who decides" Resolution: Arm them to sell internally, or route to decision-maker.
Category 5: Comparison Gaps They want to evaluate alternatives.
Signal: "I want to compare options" / "I'm talking to other vendors" Resolution: Differentiate, or provide comparison framework.
The LAIR Pattern
For complex objections, use the LAIR pattern:
L - Listen: Let them fully articulate the objection without interrupting.
A - Acknowledge: Validate that their concern is reasonable.
I - Inquire: Ask a clarifying question to understand the root concern.
R - Resolve: Address the root concern directly.
Prospect: "I need to think about it."
Listen: [Let them finish]
Acknowledge: "Totally fair-it's not a small decision."
Inquire: "Is there something specific you're unsure about, or is it more about timing?"
[Based on their answer, resolve the actual concern]
Resolve (if timing): "No pressure at all. I'll send the agreement so you have it when you're ready."
Resolve (if uncertainty): "What would you need to see to feel good about moving forward?"Common Objections with Resolutions
"How much does it cost?"
Don't: Give a specific number that may not apply.
Do: Give a range or framework, then redirect to deliverable.
"It depends on your volume-typically [range]. The exact pricing is in the
agreement. Want me to send it over so you can see the specifics?""I need to think about it."
Don't: Push or create artificial urgency.
Do: Respect, make next step easy, leave door open.
"Totally understand. I'll send the agreement now so you have it when you're
ready. No pressure-take a look and let me know if any questions come up.""I already have a vendor."
Don't: Bash the competitor.
Do: Surface pain, offer comparison value.
"Totally makes sense-most [businesses] do. Out of curiosity, how happy
are you with them? When something goes wrong, are you able to get help quickly?""Can you just send me information?"
Don't: Refuse or over-qualify before sending.
Do: Agree, but try to get one qualification point first.
"Yeah, absolutely. Quick question first-[single most important qualifier]?
Just want to make sure I send you the right info.""I'm not the decision-maker."
Don't: End the conversation.
Do: Arm them or route to decision-maker.
"No problem. Who handles this decision? I can either reach out to them
directly, or I can send you something to pass along-whatever's easier."3.5 Closing and Handoff
The close is where value either converts to action or dissipates. Design for clarity and friction removal.
The Close Components
1. Summarize the Outcome Briefly confirm what was established.
"Perfect-so you've got 4 fryers, changing oil twice a week, and you're
in [city]. You'd definitely qualify for our service."2. State the Next Step Be explicit about what happens next.
"What I'll do now is send over the service agreement so you can see
everything in writing."3. Collect What's Needed Only what's required for the next step.
"What's the best email to send that to?"4. Set Expectations Tell them what will happen and when.
"You'll get it in the next few minutes. You can sign directly from
the email whenever you're ready."5. Provide Continuity Give them a path for questions or issues.
"Any questions, just call or text this number."Full Close Example
Agent: "Perfect-based on what you told me, you'd definitely qualify for
rebates. I'll send over the service agreement so you can see everything
in writing."
Agent: "What's the best email to send that to?"
Prospect: "john@bigtonys.com"
Agent: "Got it-J-O-H-N at big tonys dot com?"
Prospect: "Yeah."
Agent: "Cool-I'll send it in the next couple minutes. You'll fill in
the address and a few details, then you can sign right from the email.
Any questions, just call or text this number back."
Prospect: "Sounds good."
Agent: "Appreciate it-talk soon."Human Handoff
When the conversation exceeds AI capability or the prospect requests human contact:
1. Acknowledge the Need
"I hear you-let me get you to someone who can help with that."2. Collect Handoff Information
"What's the best number to reach you, and when's a good time?"3. Set Expectations
"Someone will call you back within [timeframe]."4. Summarize for the Human The AI must log:
- What was discussed
- What the prospect needs
- Any qualification data collected
- Why the handoff is happening
interface HandoffRecord {
prospectName: string;
prospectPhone: string;
preferredCallbackTime?: string;
conversationSummary: string;
prospectNeed: string;
qualificationData: Partial<QualificationData>;
handoffReason: 'requested_human' | 'complex_question' | 'service_issue' | 'edge_case';
}Part 4: System Prompt Architecture
4.1 Anatomy of an Effective Prompt
A system prompt for voice AI is not a script-it's an operating manual. It must encode:
- Identity: Who the agent is
- Context: What situation the agent is in
- Objective: What the agent is trying to achieve
- Knowledge: What the agent knows
- Behavior: How the agent should act
- Constraints: What the agent must not do
- Adaptation: How the agent handles variations
The Prompt Skeleton
# SYSTEM PROMPT: [Agent Name] for [Company] ([Context/Scenario])
## 1. Persona and Core Goal
- Role/identity
- Context/scenario
- Primary objective
- Personality and tone
## 2. Available Data
- What information is available pre-call
- Variable placeholders and their sources
## 3. Conversational Rules
- Short turns
- One question at a time
- Linear flow
- Specific constraints
## 4. Conversation Flow
- Stage 1: [Opening]
- Stage 2: [Qualification]
- Stage 3: [Offer/Collection]
- Stage 4: [Close]
- [Each stage with scripts and response handling]
## 5. Protocols
- Objection handling
- Edge case handling
- Escalation triggers
- Error recovery
## 6. Company Knowledge
- Service/product details
- Pricing guidelines (what to say, what not to say)
- Differentiators
- Service area / constraints
## 7. Operational Constraints
- Legal requirements
- Disclosure rules
- Topics to avoid
- Boundaries4.2 Persona and Tone Definition
The persona defines not just who the agent "is" but how they communicate.
Identity Components
## 1. Persona Definition
**Role:** [Name], [Title] at [Company]
**Context:** [What situation triggers this conversation]
**Objective:** [Primary goal of the conversation]
**Personality:** [2-3 adjectives describing demeanor]
**Tone:** [Where on the spectrum from formal to casual]Tone Calibration
The tone spectrum:
Formal ─────────────────────────────────────────────────── Casual
│ │ │
│ │ │
"Good afternoon, "Hi [Name], "Hey, quick
I'm calling from this is [Agent] question-"
[Company] regarding from [Company]."
your recent inquiry."Industry calibration:
- B2B Enterprise: Formal to Neutral
- B2B SMB: Neutral
- Local Services: Neutral to Casual
- Consumer: Neutral to Casual
Persona calibration:
- Executive calling executive: More formal
- SDR calling practitioner: Neutral
- Account manager to existing customer: Casual
Voice Characteristics
Beyond words, voice AI has qualities that affect perception:
**Voice Characteristics:**
- Pace: [Normal / Slightly Faster / Slightly Slower]
- Energy: [Calm / Moderate / Enthusiastic]
- Pauses: [Minimal / Natural / Deliberate]Match to context:
- Urgent inbound (form fill): Moderate pace, natural energy
- Cold call: Calm, confident, not rushed
- Customer service: Warm, slightly slower, empathetic pauses
What Not to Sound Like
Equally important as what the agent is is what it isn't:
**Avoid:**
- Sounding like a telemarketer (high energy, scripted feel)
- Sounding like a robot (monotone, no acknowledgments)
- Sounding desperate (too many qualifiers, excessive politeness)
- Sounding scripted (identical phrasing every time)4.3 Conversation States and Flow Logic
Conversations are state machines. Each state has entry conditions, behaviors, and exit conditions.
State Definition Pattern
interface ConversationState {
name: string;
goal: string;
entryCondition: string;
script: string;
responseHandling: ResponseHandler[];
exitConditions: ExitCondition[];
fallback: string;
}
interface ResponseHandler {
condition: string; // What the prospect says/does
action: string; // What the agent does
nextState?: string; // Where to go next
}
interface ExitCondition {
condition: string;
nextState: string;
}Example State: Qualification
### STATE: Volume Qualification
**Goal:** Determine if prospect meets volume threshold
**Entry Condition:** Location confirmed in service area
**Script:** "How many fryers are you running?"
**Response Handling:**
| Response | Action | Next State |
|----------|--------|------------|
| [Number provided] | Store, acknowledge: "Got it-[X] fryers." | Frequency Question |
| "I don't know" | Use fallback question | Fallback: Direct Volume |
| [Off-topic response] | Redirect gently | (Stay in state) |
| [Clearly disqualifying] | Move to disqualification | Disqualification |
**Fallback:**
"No worries-do you go through at least 50 gallons a month? Like a drum or more?"
**Exit Conditions:**
- Fryer count captured → Frequency Question
- Direct volume confirmed ≥ threshold → Collect Details
- Volume < threshold → DisqualificationState Machine Visualization
┌─────────────┐
│ OPENING │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
[Confirmed] [Unclear] [Wrong Number]
│ │ │
│ │ ▼
│ │ ┌─────────┐
│ │ │ END │
│ │ └─────────┘
│ │
└──────┬─────┘
│
▼
┌─────────────┐
│ LOCATION │
│ CHECK │
└──────┬──────┘
│
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
[In Area] [Out of Area] [Unclear]
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ DISQUALIFY │ │
│ └─────────────┘ │
│ │
└───────────┬───────────┘
│
▼
┌─────────────┐
│ VOLUME │
│ CHECK │
└──────┬──────┘
│
...Handling Non-Linear Paths
Real conversations don't always follow the script. Build in redirect patterns:
**Universal Redirect Patterns:**
| Prospect Action | Response |
|-----------------|----------|
| Asks question before you're ready | "Good question-let me get one more detail first, then I'll cover that." |
| Goes off-topic | "Got it. Let me just finish up here and then we can discuss that." |
| Tries to end call early | "I hear you-just need your email and you're all set." |
| Asks something you can't answer | "That's covered in the agreement-want me to send it over?" |4.4 Response Handling Patterns
The art of prompt engineering for voice is largely in anticipating responses and defining appropriate reactions.
The Response Taxonomy
1. Expected Responses The prospect says what you anticipated.
Agent: "How many fryers are you running?"
Expected Responses:
- "Three."
- "We have 4."
- "About five or six."
Handling: Acknowledge, store, continue.
"Got it-[X] fryers."2. Ambiguous Responses The response doesn't clearly answer the question.
Agent: "How many fryers are you running?"
Ambiguous Responses:
- "A few."
- "Not sure."
- "What do you mean?"
Handling: Clarify without making them feel dumb.
"Ballpark is fine-like 2, 4, more than that?"3. Tangential Responses They answer a different question than asked.
Agent: "How many fryers are you running?"
Tangential Response:
- "We're actually a pretty small operation."
- "We do a lot of fried food."
Handling: Extract signal, reframe, or re-ask.
"Got it-so on the smaller side. Would you say 2 fryers? 3?"4. Objection Responses They respond with resistance or questions.
Agent: "How many fryers are you running?"
Objection Response:
- "Why do you need to know that?"
- "What's this about?"
Handling: Explain rationale, then continue.
"Just trying to see if you'd qualify for rebates-based on volume. So roughly how many?"5. Disqualifying Responses The response indicates they're not a fit.
Agent: "Where's your restaurant located?"
Disqualifying Response:
- "We're in California."
- [Outside service area]
Handling: Exit gracefully.
"Ah, we don't service California yet-we're on the East Coast currently.
If we expand that way, I can reach back out. Appreciate your time."The Catch-All Pattern
For responses that don't match any expected pattern:
**Catch-All Response:**
"Got it. Let me make sure I understand-[paraphrase what you think they meant].
Is that right?"
If still unclear after one clarification:
"Tell you what-let me send over the details and you can take a look.
What's the best email?"This gracefully exits ambiguity while still advancing the conversation.
4.5 Company Knowledge Encoding
The agent needs access to company-specific information but must not invent or speculate.
Knowledge Categories
Category 1: Must Know (Encoded in Prompt)
- What the service/product does
- Key differentiators
- Service area / constraints
- Qualification thresholds
- Pricing framework (ranges, not specifics)
Category 2: Can Reference (Defer to Deliverable)
- Specific pricing
- Detailed terms
- Technical specifications
- Legal/compliance details
Category 3: Must Not Speculate On
- Guarantees not explicitly approved
- Pricing outside stated ranges
- Capabilities not confirmed
- Competitor disparagement
Knowledge Encoding Pattern
## 6. Company Knowledge
**Service Description:**
[One paragraph describing what the company does in plain language]
**Key Differentiators:**
- [Differentiator 1-what you do differently]
- [Differentiator 2-what outcome this produces]
- [Differentiator 3-what risk this removes]
**Qualification Thresholds:**
- Minimum: [threshold]
- Service area: [regions/states]
- Decision-maker requirement: [yes/no]
**Pricing Framework:**
- Structure: [How pricing works-tiers, per-unit, flat, etc.]
- Range: [General range-"typically between X and Y"]
- What to say: "The exact pricing is in the agreement based on your volume."
- What NOT to say: [Specific numbers, guarantees, promises]
**Redirect Phrases for Complex Questions:**
- "That's covered in detail in the agreement."
- "Let me send that over so you can see the specifics."
- "I want to make sure you have accurate info-let me send the documentation."The "Don't Know" Protocol
When asked something outside encoded knowledge:
**Unknown Question Protocol:**
1. Don't guess or make up information
2. Don't say "I don't know" bluntly
3. Do redirect to authoritative source
Script:
"That's a good question-I want to make sure you get accurate info on that.
It's covered in the agreement I'll send over, or you can ask that when we follow up."4.6 Operational Constraints
Constraints prevent the agent from causing harm-legal, reputational, or operational.
Constraint Categories
Legal Constraints
- Calling hours (TCPA, state laws)
- Disclosure requirements (AI, recording)
- Do-not-call compliance
- Industry-specific regulations
Operational Constraints
- Service area boundaries
- Pricing authority limits
- Commitment authority limits
- Escalation triggers
Brand Constraints
- Topics to avoid
- Competitor mentions
- Political/controversial topics
- Tone boundaries
Constraint Encoding
## 7. Operational Constraints
**Legal:**
- Only call between [times] in prospect's local time
- If asked if this is recorded, say: "This call may be recorded for quality purposes."
- If asked if this is AI, say: [Disclosure script]
- Do not call numbers on suppression list
**Operational:**
- Service area: [List of valid regions]
- Cannot commit to specific pricing without agreement
- Cannot promise specific timelines for delivery/service
- Must escalate: [List of escalation triggers]
**Brand:**
- Do not disparage competitors by name
- Do not discuss: [List of off-limits topics]
- Do not use: [List of forbidden phrases]
- Do not promise: [List of things you cannot guarantee]
**Data:**
- Email is only delivery method (no SMS for agreements)
- Always confirm email spelling
- Do not collect: [Sensitive data you shouldn't capture]Disclosure Handling
When AI disclosure is required or requested:
**AI Disclosure Protocol:**
If REQUIRED (by law or policy):
Opening: "Hi, this is [Name], an AI assistant from [Company]..."
If REQUESTED by prospect:
Prospect: "Is this a robot?" / "Am I talking to AI?"
Response:
"Yeah, I'm an AI assistant. But I can answer your questions and get you
set up. What did you want to know?"
[If they demand human:]
"No problem-let me get your info and have someone call you back.
What's your name and the best number?"Part 5: Lead Source Playbooks
Each lead source represents a different combination of available data, prospect context, and implied intent. The agent's behavior must adapt accordingly.
5.1 Paid Ad Form Fills
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Hot |
| Timing | Immediate (< 60 seconds) |
| Data Available | Name, email, phone, company (from form), campaign/ad context |
| Prospect Context | Just filled out form, actively researching |
| Awareness Level | Product-Aware to Most Aware |
| Connection Rate | 70-90% |
| Qualification Rate | 50-70% |
Strategic Approach
This is the highest-intent lead source. Speed is the dominant variable. The prospect is actively engaged with your content right now.
Objective: Confirm intent, qualify quickly, send agreement or book meeting.
Approach: Direct, efficient, confirmatory. They know why you're calling.
Script Framework
**Opening:**
"Hey, is this [firstName]?"
[If yes:]
"Great-calling about [companyName/formTopic] and the form you just filled out. Got a quick second?"
**Qualification (Light):**
The form likely captured basic qualification. Confirm and supplement:
"Just to make sure I send you the right info-[key qualification question based on what form didn't capture]?"
**Transition to Close:**
"Perfect-based on that, you'd be a good fit. I'll send over [deliverable].
You have [email from form]-that still the best one?"
**Close:**
"Cool-sending it now. You'll see everything in there-[brief description].
Any questions, just call this number back."Data Handling
Use form data to confirm, not re-collect:
✓ "I have [restaurantName] on file-that correct?"
✗ "What's the name of your restaurant?"Pre-fill the form with captured data. The prospect should see a mostly-complete form when they open the agreement.
Common Scenarios
Scenario: They're already on the form
Prospect: "I'm actually filling out more info right now."
Agent: "Oh perfect-I'll let you finish. Just wanted to make sure you got
through okay. Any questions as you go?"Scenario: They didn't mean to submit
Prospect: "I was just browsing, didn't mean to submit."
Agent: "No worries-happens all the time. Are you still in the market for
[solution], or were you just researching?"
[If still interested:] "Want me to send some info for when you're ready?"
[If not:] "Totally fair. If anything changes, you've got my number."5.2 Organic Inbound (Website Form, "Contact Us")
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Warm |
| Timing | Within minutes to same-day |
| Data Available | Name, email, phone, maybe company, inquiry text |
| Prospect Context | Sought you out, specific reason (unknown) |
| Awareness Level | Solution-Aware to Product-Aware |
| Connection Rate | 50-70% |
| Qualification Rate | 40-60% |
Strategic Approach
They found you and reached out-but you don't know exactly why. Could be:
- Ready to buy
- Researching options
- Has a specific question
- Wrong fit / misunderstood your service
Objective: Understand their intent, qualify, route appropriately.
Approach: Curious, helpful, not assumptive.
Script Framework
**Opening:**
"Hey [firstName], this is [Agent] from [Company]. You reached out through
our website-wanted to see what I can help you with."
**Intent Discovery:**
Let them explain. Then clarify if needed:
"Got it. So you're looking for [paraphrase]-is that right?"
**Qualification:**
Based on their stated need, qualify against your criteria:
"Let me ask a couple questions to make sure we can help. [Qualification questions]"
**Route:**
Based on qualification + need:
- Qualified + ready: Send agreement/book meeting
- Qualified + researching: Send info, set follow-up
- Not qualified: Explain why, offer alternativeIntent Classification
type InboundIntent =
| 'ready_to_buy' // "I want to sign up"
| 'comparing_options' // "What makes you different from X?"
| 'has_question' // "I wanted to ask about..."
| 'wrong_fit' // "Do you do [thing you don't do]?"
| 'existing_customer' // "I already use you and have an issue"
| 'unclear'; // Can't determine
function handleByIntent(intent: InboundIntent): NextStep {
switch (intent) {
case 'ready_to_buy':
return { action: 'qualify_briefly_then_close' };
case 'comparing_options':
return { action: 'differentiate_then_qualify' };
case 'has_question':
return { action: 'answer_then_qualify' };
case 'wrong_fit':
return { action: 'clarify_and_potentially_disqualify' };
case 'existing_customer':
return { action: 'route_to_service' };
case 'unclear':
return { action: 'ask_clarifying_question' };
}
}5.3 Cold Email Positive Replies
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Warm |
| Timing | 3 to 5 minutes of reply |
| Data Available | Name, email, phone (maybe from signature), email history |
| Prospect Context | Received and responded to cold email |
| Awareness Level | Problem-Aware to Solution-Aware |
| Connection Rate | 40-60% |
| Qualification Rate | 40-60% |
Strategic Approach
They replied to your email-they have some interest. But "interest" varies:
- "Sure, send me info" (low)
- "How does this work?" (medium)
- "Yes, I've been looking for this" (high)
Objective: Capitalize on expressed interest, qualify, advance.
Approach: Reference the email, be helpful, don't over-sell.
Script Framework
**Opening:**
"Hey, this is [Agent]-you just replied to my email about [topic]. Got a minute?"
**Context Acknowledgment:**
Reference what they said in the reply:
[If they asked a question:]
"You asked about [X]-let me give you the quick version."
[If they said "send info":]
"Happy to send that over-let me ask a quick question first to make
sure I send the right thing."
[If they expressed strong interest:]
"Sounds like this is something you're looking at now-let me get a few
details and I can send over everything you need."
**Qualification:**
Full qualification-don't assume fit based on email reply alone.
**Close:**
Based on qualification, send appropriate next step.Reply-Type Handling
| Reply Type | Example | Handling |
|---|---|---|
| Info request | "Sure, send me info" | Light qualification, then send |
| Question | "How does this work?" | Answer briefly, then qualify |
| Interest | "Yes, we've been looking for this" | Skip to qualification, move fast |
| Objection | "We already have a vendor" | Address objection, then qualify if they engage |
| Routing | "Talk to John instead" | Get John's contact, thank them |
Phone Extraction
If phone isn't in your data, check the email signature:
function extractPhoneFromSignature(emailBody: string): string | null {
// Common signature patterns
const phonePatterns = [
/(?:phone|tel|cell|mobile|m|p)[:\s]*([+\d\s\-().]+)/i,
/(\+?1?[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4})/,
];
for (const pattern of phonePatterns) {
const match = emailBody.match(pattern);
if (match) return normalizePhone(match[1]);
}
return null;
}5.4 Cold Email Follow-Up Calls (Non-Responders)
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Cool to Warm (based on engagement) |
| Timing | After email sequence completes (Day 12+) |
| Data Available | Name, email, company, engagement data (opens/clicks) |
| Prospect Context | Received emails, didn't reply, may or may not have opened |
| Awareness Level | Problem-Aware (if cold list) |
| Connection Rate | 20-35% |
| Qualification Rate | 30-50% |
Strategic Approach
They didn't reply to email-but that doesn't mean they're not interested. Reasons for non-response:
- Busy / missed it
- Interested but not urgent
- Email not compelling enough
- Not the right contact
- Not interested
Objective: Break through inbox noise, surface why they didn't engage, give them another chance.
Approach: Acknowledge the emails, don't guilt-trip, offer fresh angle.
Script Framework
**Opening:**
"Hey [firstName], this is [Agent] from [Company]. I sent you a few emails
about [topic]-figured a quick call might be easier. Got 30 seconds?"
**Engagement Check:**
"Did any of those land in your inbox, or did they get buried?"
[This is diagnostic-if they say "I saw them," they chose not to reply]
[If they say "didn't see them," they might be warmer than expected]
**Value Re-pitch:**
Offer the value proposition in a new way:
"Quick version: [one-sentence value prop]. Most [personas] we talk to are
dealing with [pain]-is that something you've run into?"
**Qualification:**
If they engage, run standard qualification.
**Exit:**
If they're clearly not interested:
"No problem. If anything changes, you've got my number. Appreciate your time."Engagement-Based Targeting
Only call non-responders who showed some engagement:
interface EmailEngagement {
emailsSent: number;
emailsOpened: number;
linksClicked: number;
}
function shouldCallNonResponder(engagement: EmailEngagement): boolean {
// Only call if they opened at least 2 emails (shows awareness)
// Or clicked any link (shows interest)
return engagement.emailsOpened >= 2 || engagement.linksClicked > 0;
}Calling completely non-engaged leads (zero opens) has very low conversion and risks annoying people who deliberately ignored you.
5.5 Cold Calls (No Prior Touch)
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Cold |
| Timing | Optimal calling windows |
| Data Available | Name, company, phone, whatever you scraped/bought |
| Prospect Context | None-you're interrupting |
| Awareness Level | Unaware to Problem-Aware |
| Connection Rate | 10-25% |
| Qualification Rate | 20-40% |
Strategic Approach
You're interrupting someone who didn't ask to be called. You have 10 seconds to earn attention.
Objective: Earn the right to continue the conversation, qualify, advance.
Approach: Direct, relevant, respectful of their time.
The 10-Second Rule
You have approximately 10 seconds before they decide to keep listening or hang up. That's ~25 words. Every word must earn its place.
What must happen in those 10 seconds:
- Who you are (brief)
- Relevance signal (why should they care)
- Permission to continue
Script Framework
**Opening (< 10 seconds):**
"Hey [firstName], quick question-[highly relevant question that earns attention]?"
Example:
"Hey John, quick question-do you ever have trouble getting your grease vendor
to answer when something goes wrong?"
[Notice: No company name, no intro, no "how are you." Straight to relevance.]
**If They Engage:**
"Got it. The reason I ask-I handle [service] for [similar businesses] in [area].
Most people I talk to are dealing with [pain]. Is that something you're running into?"
**Qualification:**
If they engage, run standard qualification.
**If They Push Back:**
"Hey, I caught you at a bad time-when's better to call back?"
[If they give time, you've converted to a warm callback]
[If they say never, exit gracefully]Relevance Signal Patterns
The opening question must be immediately relevant. Patterns that work:
Pain Question: "Do you ever have trouble with [common pain]?"
Situation Question: "Are you still using [incumbent solution type]?"
Trigger Question: "I noticed [observable trigger]-is that something you're actively working on?"
Peer Question: "Most [personas] I talk to are dealing with [pain]-is that on your radar?"
Advanced: Permission-Based Opener
An alternative that works well for AI (where "being human" isn't the goal):
"Hey [firstName], this is [Agent] from [Company]. We help [personas] with
[outcome]. I don't know if that's relevant for you-is it okay if I ask
a quick question to see?"This is explicit about being a sales call but asks permission, which can disarm.
5.6 Re-engagement (Stale Leads)
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Variable (was warm, now unknown) |
| Timing | Scheduled (30/60/90 days since last contact) |
| Data Available | Full CRM history, previous qualification, objection history |
| Prospect Context | Previous conversation, didn't close |
| Awareness Level | Product-Aware (they know you) |
| Connection Rate | 25-40% |
| Qualification Rate | 30-50% |
Strategic Approach
They qualified before but didn't close. Something stopped them:
- Timing wasn't right
- Lost to competitor
- Internal priorities changed
- Forgot about it
Objective: Check if circumstances changed, reactivate if ready.
Approach: Acknowledge the gap, don't guilt-trip, check for change.
Script Framework
**Opening:**
"Hey [firstName], this is [Agent] from [Company]. We talked a few months
back about [topic]. Wanted to check if anything's changed on your end."
**Situation Check:**
"Last time we spoke, you mentioned [previous objection/situation].
Is that still the case, or has anything shifted?"
**Requalification:**
If circumstances changed, re-run qualification:
"Got it. Let me ask-[qualification question]."
**Close or Nurture:**
[If ready now:] Move to close
[If still not ready:] "No problem. When would be a good time to check back?"Timing-Based Reactivation
interface StaleLeadRule {
daysInactive: number;
previousOutcome: string;
action: string;
}
const reactivationRules: StaleLeadRule[] = [
{ daysInactive: 30, previousOutcome: 'timing_objection', action: 'ai_call' },
{ daysInactive: 60, previousOutcome: 'lost_to_competitor', action: 'email_then_call' },
{ daysInactive: 90, previousOutcome: 'no_response', action: 'email_only' },
{ daysInactive: 180, previousOutcome: 'any', action: 'fresh_sequence' },
];5.7 Inbound to Marketing Number
Context Profile
| Dimension | Value |
|---|---|
| Lead Temperature | Warm (they called you) |
| Timing | Real-time |
| Data Available | Caller ID, maybe context from number placement |
| Prospect Context | Saw number somewhere, decided to call |
| Awareness Level | Variable |
| Connection Rate | 100% (they called you) |
| Qualification Rate | 50-70% |
Strategic Approach
They took action to call you-that's intent. But you don't know:
- Where they saw the number
- What they want
- Who they are
Objective: Identify intent, qualify, route appropriately.
Approach: Clarify quickly, then serve their need.
Number Context
The number's placement provides context:
| Placement | Implied Context | Opening Approach |
|---|---|---|
| Cold email signature | They got your email | "Hey, this is [Agent]-you calling about the email?" |
| Website | They visited your site | "Hey, this is [Agent]-how can I help you?" |
| Paid ad | They clicked an ad | "Hey, this is [Agent]-you calling about [ad topic]?" |
| Google Maps / Directory | They searched for you | "Hey, this is [Agent]-how can I help you?" |
| Referral mention | Someone told them | "Hey, this is [Agent]-who referred you?" |
Script Framework
**Opening (Context-Aware):**
[Based on number placement-see above]
**Intent Discovery:**
"What can I help you with?"
OR if placement provides context:
"You calling about [likely topic]?"
**Classification:**
Quickly determine:
- Are they a prospect? → Qualify and advance
- Are they an existing customer? → Route to service
- Are they confused/wrong number? → Clarify and exit
**Qualification:**
If prospect, run standard qualification.
**Close:**
Based on qualification, route to appropriate next step.Multi-Number Strategy
Use different numbers for different placements to provide automatic context:
interface PhoneNumberRouting {
number: string;
placement: string;
aiAgentContext: string;
defaultOpener: string;
}
const numberRouting: PhoneNumberRouting[] = [
{
number: '+1-555-001-0001',
placement: 'cold_email_signature',
aiAgentContext: 'caller_received_cold_email',
defaultOpener: "Hey, this is [Agent]-you calling about the email?",
},
{
number: '+1-555-001-0002',
placement: 'website_contact_page',
aiAgentContext: 'caller_from_website',
defaultOpener: "Hey, this is [Agent]-how can I help you?",
},
{
number: '+1-555-001-0003',
placement: 'google_ads',
aiAgentContext: 'caller_from_ad',
defaultOpener: "Hey, this is [Agent]-you calling about [ad topic]?",
},
];Part 6: Channel Integration
6.1 Email Sequence Integration
AI Voice is most powerful when coordinated with email sequences-not as a separate channel.
Integration Patterns
Pattern 1: Email-Triggered Call
Email engagement triggers AI call:
interface EmailTriggerRule {
trigger: 'opened' | 'clicked' | 'replied' | 'bounced';
count?: number;
delay: number; // milliseconds
action: 'call' | 'sms' | 'none';
}
const emailTriggers: EmailTriggerRule[] = [
// Positive reply → call immediately
{ trigger: 'replied', delay: 0, action: 'call' },
// Clicked link → call within 5 minutes
{ trigger: 'clicked', delay: 300000, action: 'call' },
// Opened 3+ times → call
{ trigger: 'opened', count: 3, delay: 0, action: 'call' },
];Pattern 2: Sequence-Position Call
AI call at specific point in sequence:
Email 1 (Day 1)
Email 2 (Day 4)
Email 3 (Day 9)
AI Call (Day 12) ← For engaged non-responders
Email 4 (Day 15) ← Reference the call attemptPattern 3: Call-Triggered Email
Call outcome triggers email:
interface CallOutcomeEmail {
outcome: CallOutcome;
emailTemplate: string;
delay: number;
}
const callOutcomeEmails: CallOutcomeEmail[] = [
// No answer → send "tried to call" email
{ outcome: 'no_answer', emailTemplate: 'voicemail_followup', delay: 0 },
// Sent agreement → send "agreement sent" confirmation
{ outcome: 'agreement_sent', emailTemplate: 'agreement_confirmation', delay: 60000 },
// Interested but not ready → send nurture content
{ outcome: 'interested_not_ready', emailTemplate: 'nurture_content', delay: 86400000 },
];Maintaining Conversation Context
The AI must know what emails were sent and their content:
interface ConversationContext {
// Email history
emailsSent: {
subject: string;
sentAt: Date;
opened: boolean;
clicked: boolean;
replied: boolean;
}[];
// Key points from emails
valuePropsPresented: string[];
proofsPresented: string[];
ctasUsed: string[];
// For AI reference
lastEmailSummary: string;
}The agent can then reference appropriately:
"I sent you an email about [topic from lastEmailSummary]-wanted to follow up."6.2 SMS Integration
SMS complements voice-it's not a separate channel but an extension.
SMS Use Cases
1. Voicemail + SMS Combo
When outbound call goes to voicemail:
[Leave 15-second voicemail]
[Immediately send SMS]
"Hey [name]-just left you a voicemail about [topic].
[One-line value]. Text me back if interested."2. Pre-Call SMS (Permission Priming)
For cold calls, SMS 5 minutes before can increase connection:
"Hey [name], this is [Agent] from [Company]. Going to give you a
quick call about [topic] in a few minutes. If now's bad,
let me know a better time."3. Post-Call Confirmation
After successful call:
"Thanks for chatting, [name]. Just sent the [deliverable] to
[email]. Let me know if you have questions."4. Call-to-Text Fallback
When they don't answer repeated calls:
"Hey [name]-tried calling a couple times about [topic].
If you prefer, just text me back. [One-line value]."SMS Rules
Keep under 160 characters when possible (single SMS).
No links in first touch (carrier filtering).
Identify yourself (legal requirement in most contexts).
Provide clear next action (text back, call back, etc.).
interface SMSTemplate {
trigger: string;
template: string;
maxLength: 160;
requiresOptIn: boolean;
}
const smsTemplates: SMSTemplate[] = [
{
trigger: 'voicemail_left',
template: 'Hey {{firstName}}-just left you a voicemail about {{topic}}. {{valueOneLiner}} Text back if interested.',
maxLength: 160,
requiresOptIn: false, // Existing business relationship
},
];6.3 CRM and Automation Platform Integration
The AI doesn't operate in isolation-it's part of a data ecosystem.
Data Flow: Into the AI
What context flows from CRM to AI:
interface InboundLeadContext {
// Identity
lead: {
firstName: string;
lastName?: string;
email: string;
phone: string;
company?: string;
};
// Source
source: {
type: 'form_fill' | 'cold_email' | 'inbound_call' | 'referral';
campaign?: string;
adSet?: string;
referrer?: string;
};
// History
history: {
previousCalls: CallRecord[];
emailEngagement: EmailEngagement;
previousQualification?: QualificationData;
notes: string[];
};
// Timing
timing: {
leadCreatedAt: Date;
lastContactAt?: Date;
timezone: string;
};
}Data Flow: Out of the AI
What the AI captures and returns:
interface CallOutcome {
// Call metadata
callId: string;
startTime: Date;
endTime: Date;
duration: number;
// Outcome
outcome:
| 'qualified_sent_agreement'
| 'qualified_meeting_booked'
| 'qualified_interested_not_ready'
| 'disqualified_reason'
| 'no_answer'
| 'wrong_number'
| 'callback_requested'
| 'escalated_to_human';
// Qualification data (if collected)
qualification?: {
meetsVolumeThreshold?: boolean;
inServiceArea?: boolean;
isDecisionMaker?: boolean;
timeline?: string;
currentSituation?: string;
};
// Contact info (if updated)
contactUpdates?: {
email?: string;
phone?: string;
company?: string;
title?: string;
};
// Follow-up
followUp?: {
type: 'callback' | 'email' | 'human_handoff' | 'nurture';
scheduledFor?: Date;
notes: string;
};
// Transcript
transcript: string;
summary: string;
}Triggering Downstream Actions
Call outcomes trigger CRM/automation actions:
interface OutcomeAction {
outcome: string;
actions: Action[];
}
const outcomeActions: OutcomeAction[] = [
{
outcome: 'qualified_sent_agreement',
actions: [
{ type: 'update_lead_status', status: 'agreement_sent' },
{ type: 'send_email', template: 'agreement_confirmation' },
{ type: 'create_task', task: 'follow_up_in_48h' },
{ type: 'notify_ae', message: 'Agreement sent to {{name}}' },
],
},
{
outcome: 'callback_requested',
actions: [
{ type: 'schedule_callback', time: '{{requestedTime}}' },
{ type: 'update_lead_status', status: 'callback_scheduled' },
],
},
{
outcome: 'escalated_to_human',
actions: [
{ type: 'create_urgent_task', assignee: 'sales_team' },
{ type: 'update_lead_status', status: 'needs_human_attention' },
{ type: 'notify_slack', channel: 'sales_escalations' },
],
},
];6.4 Human Handoff Protocols
Some situations require human intervention. The handoff must be smooth for both the prospect and the human.
When to Escalate
Explicit Request:
- "Can I talk to a real person?"
- "I want to speak to a manager."
- "Is there someone else I can talk to?"
Complexity Beyond AI Capability:
- Custom pricing negotiation
- Complex technical questions
- Legal/contract concerns
- Multi-stakeholder situations
Edge Cases:
- Upset/angry prospect
- Unusual situation not covered by scripts
- High-value opportunity requiring white-glove treatment
Escalation Data Package
When escalating, the AI must pass:
interface EscalationPackage {
// Who
prospect: {
name: string;
phone: string;
email?: string;
company?: string;
};
// What happened
conversationSummary: string;
escalationReason: string;
prospectRequest?: string;
// What we know
qualificationData: Partial<QualificationData>;
objectionsSurfaced: string[];
// What they need
prospectNeeds: string;
suggestedNextStep: string;
// Context
callTranscript: string;
callRecording?: string;
// Urgency
priority: 'urgent' | 'normal' | 'low';
callbackTimeRequested?: Date;
}Handoff Script Pattern
**Acknowledge the request:**
"Absolutely-let me get you to someone who can help with that."
**Collect callback info:**
"What's the best number to reach you?"
"And when's a good time for them to call?"
**Set expectations:**
"Someone will call you back within [timeframe]."
**Summarize for human:**
[Internal: Log escalation package with all context]
**Close:**
"Is there anything else I can note for them before we hang up?"Warm Transfer vs. Callback
Warm Transfer (if system supports):
- AI stays on line while connecting human
- AI briefs human before connecting
- Best experience for prospect, highest conversion
Callback (more common):
- AI collects callback info
- AI logs escalation
- Human calls back
- Acceptable but some drop-off between call and callback
interface HandoffMethod {
type: 'warm_transfer' | 'callback';
availability: 'business_hours' | '24_7';
maxWaitTime?: number; // for warm transfer queue
callbackSLA: string; // "within 2 hours"
}Part 7: Edge Cases and Failure Modes
7.1 Common Failure Modes
Every AI system fails. The question is not whether it will fail but how it fails-gracefully or catastrophically.
Failure Taxonomy
1. Connection Failures The call doesn't connect or disconnects unexpectedly.
| Failure | Detection | Response |
|---|---|---|
| No answer | Ring timeout | Leave voicemail, trigger SMS |
| Voicemail immediate | Voicemail greeting detected | Leave message, don't retry immediately |
| Hang up during ring | Call ends during ringing | Log, retry later |
| Mid-call disconnect | Sudden call end | Log incomplete, retry if mid-qualification |
2. Comprehension Failures The AI doesn't understand what the prospect said.
| Failure | Detection | Response |
|---|---|---|
| Inaudible/noise | ASR confidence low | "Sorry, I didn't catch that-could you say that again?" |
| Unfamiliar accent | ASR struggles | Slow down, repeat back what was heard |
| Technical terms | Unknown vocabulary | Ask for clarification, don't guess |
| Crosstalk | Multiple voices | "I'm hearing a few people-who should I be talking to?" |
3. Intent Failures The AI understands words but misinterprets meaning.
| Failure | Detection | Response |
|---|---|---|
| Sarcasm interpreted literally | Sentiment mismatch | N/A (hard to detect), design for graceful recovery |
| Question interpreted as statement | Missing question intonation | Ask clarifying question before proceeding |
| Implicit rejection missed | Soft "no" not caught | Build in confirmation: "So should I move forward or...?" |
4. Script Failures The conversation goes somewhere the script doesn't cover.
| Failure | Detection | Response |
|---|---|---|
| Off-script question | No matching handler | "Good question-that's covered in the agreement. Let me send it over." |
| Unexpected objection | No matching objection handler | "I hear you. Let me make a note and have someone follow up on that specifically." |
| Hostile/abusive | Sentiment detection | "I understand you're frustrated. This doesn't seem like a good time-I'll let you go." |
5. Data Failures Information is missing, wrong, or inconsistent.
| Failure | Detection | Response |
|---|---|---|
| Lead data missing | Null field | Collect on call if essential, skip if optional |
| Lead data wrong | Prospect corrects | "Got it-[correct info]. Thanks for fixing that." |
| Duplicate lead | CRM flag | Check history, adapt conversation |
The Graceful Degradation Principle
When in doubt, advance the conversation toward a safe exit point while preserving the relationship.
If the AI is confused or stuck:
- Acknowledge uncertainty
- Redirect to deliverable/next step
- Offer human follow-up if needed
- Exit warmly
**Universal Recovery Pattern:**
"You know what-I want to make sure I get this right. Let me have someone
follow up with you on that specific question. What's the best number to
reach you?"
[This works for almost any failure-you're not pretending to know, and
you're ensuring the prospect gets help.]7.2 Specific Edge Case Handling
Edge Case: "Is This a Robot?"
This question is increasingly common. Handle directly.
**Detection:** Keywords "robot," "AI," "real person," "automated," "bot"
**Response (Honest + Competent):**
"Yeah, I'm an AI assistant. But I can answer your questions and get you
set up. What did you want to know?"
**If They Demand Human:**
"No problem-let me get your info and have someone call you back. What's
your name and the best number?"
**Don't:**
- Lie ("No, I'm a real person")
- Be defensive
- Over-explain AI capabilitiesEdge Case: Wrong Person
The person who answers isn't the person you intended to reach.
**Detection:** "This isn't [name]" / "Who?" / "Wrong number"
**Response (Polite Routing):**
"Oh, sorry about that. I'm trying to reach whoever handles [responsibility].
Is that you, or is there someone else I should talk to?"
**If They Route You:**
"Great-what's their name and the best number or extension?"
**If Dead End:**
"No problem. Appreciate your time."Edge Case: Existing Customer with Service Issue
They're calling about a problem, not a sale.
**Detection:** Mentions of service issues, problems, complaints, existing account
**Response (Route to Service):**
"Got it-sounds like a service issue. Let me get your info and I'll have
someone from our operations team call you right away. What's the restaurant
name and the address?"
**Don't:**
- Try to solve the service issue
- Treat them like a new lead
- Leave them without a clear next step
**Do:**
- Collect info needed to identify their account
- Set expectation for callback timing
- Log urgency appropriatelyEdge Case: Hostile or Abusive Caller
Rarely, someone is angry or abusive.
**Detection:** Profanity, yelling, personal attacks, aggressive tone
**Response (De-escalate, then Exit):**
Level 1 (Frustrated):
"I understand you're frustrated. Let me see what I can do to help."
Level 2 (Angry):
"I hear you. This doesn't seem like a good time. I can have someone
call you back when things calm down."
Level 3 (Abusive):
"I'm going to let you go for now. If you'd like to discuss this later,
you can call back."
**Rule:** AI should never engage with abuse. Exit quickly and cleanly.Edge Case: Competitor Fishing
Someone calls to gather competitive intelligence.
**Detection:** Questions about pricing lists, client lists, proprietary processes
**Response (Deflect Gracefully):**
"I can send you our standard materials that cover how things work.
What's the best email?"
**If They Press:**
"The details are in the agreement. If you're interested in service,
I can get that sent over."
**Don't:**
- Reveal client names not in public materials
- Quote specific internal pricing
- Discuss proprietary processes in detailEdge Case: Language Barrier
The prospect struggles with English (or whatever language the AI speaks).
**Detection:** Requests for another language, ASR failures, limited vocabulary
**Response (Accommodate if Possible):**
If AI supports the language:
"Claro, puedo hablar español. ¿Cómo puedo ayudarle?"
If not:
"I'm sorry, I only speak English. Is there someone there who can translate,
or would you prefer I send information by email?"
**Alternative:**
"Let me have someone who speaks [language] call you back. What's the
best number?"7.3 Error Recovery and Logging
Every failure should be logged for improvement.
Error Logging Structure
interface ErrorLog {
// Context
callId: string;
timestamp: Date;
conversationState: string;
// Error details
errorType: 'connection' | 'comprehension' | 'intent' | 'script' | 'data';
errorSubtype: string;
errorMessage: string;
// What happened
prospectUtterance?: string;
aiResponse: string;
recoveryAttempted: boolean;
recoverySuccessful?: boolean;
// Outcome
callContinued: boolean;
finalOutcome: string;
// For analysis
transcript: string;
audioClip?: string;
}Learning from Failures
interface ErrorAnalysis {
// Frequency
errorType: string;
occurrences: number;
percentageOfCalls: number;
// Impact
callDropRate: number; // How often this error kills the call
recoveryRate: number; // How often we recover from it
// Patterns
commonTriggers: string[];
commonProspectPhrases: string[];
// Action
suggestedPromptChange?: string;
suggestedNewHandler?: string;
priority: 'critical' | 'high' | 'medium' | 'low';
}Review errors weekly. Prioritize fixing:
- High-frequency failures
- Failures that kill calls
- Failures in critical conversion stages
Part 8: Measurement and Iteration
8.1 What to Measure
Funnel Metrics
The AI Voice funnel mirrors any sales funnel:
┌────────────────────────────────────────────┐
│ CALLS ATTEMPTED │
└────────────────────────────────────────────┘
│
▼ Connection Rate
┌────────────────────────────────────────────┐
│ CALLS CONNECTED │
└────────────────────────────────────────────┘
│
▼ Completion Rate
┌────────────────────────────────────────────┐
│ CONVERSATIONS COMPLETED │
└────────────────────────────────────────────┘
│
▼ Qualification Rate
┌────────────────────────────────────────────┐
│ LEADS QUALIFIED │
└────────────────────────────────────────────┘
│
▼ Conversion Rate
┌────────────────────────────────────────────┐
│ NEXT STEP COMPLETED │
│ (Agreement sent, meeting booked, etc.) │
└────────────────────────────────────────────┘Primary Metrics Dashboard
interface AIVoiceMetrics {
// Volume
callsAttempted: number;
callsConnected: number;
conversationsCompleted: number;
// Rates
connectionRate: number; // connected / attempted
completionRate: number; // completed / connected
qualificationRate: number; // qualified / completed
conversionRate: number; // converted / qualified
// Efficiency
averageHandleTime: number; // seconds
averageCostPerCall: number; // dollars
averageCostPerConversion: number;
// Quality
dropOffByStage: Record<string, number>;
objectionFrequency: Record<string, number>;
errorRate: number;
escalationRate: number;
}Stage-Level Analysis
Where do calls die?
interface StageMetrics {
stageName: string;
entryCount: number;
exitCount: number;
dropOffCount: number;
dropOffRate: number;
averageTimeInStage: number;
commonDropOffReasons: string[];
}
// Example output:
// Opening: 1000 entry, 950 exit, 5% drop (hang up immediately)
// Qualification: 950 entry, 800 exit, 16% drop (disqualified or quit)
// Collection: 800 entry, 780 exit, 2.5% drop (refused to give email)
// Close: 780 entry, 750 exit, 4% drop (changed mind at end)High drop-off at specific stages indicates script problems at that stage.
Cohort Analysis
Not all leads are equal. Segment metrics by:
- Lead Source: Form fills vs. cold call vs. email reply
- Qualification Tier: High volume vs. low volume
- Time to Call: < 1 min vs. 1-5 min vs. > 5 min
- Day/Time: Tuesday 10am vs. Friday 4pm
- Campaign: Which ad/email performed best
interface CohortMetrics {
cohortDefinition: string;
sampleSize: number;
connectionRate: number;
qualificationRate: number;
conversionRate: number;
significanceVsBaseline: number; // statistical significance
}8.2 Transcript Review Process
Metrics tell you what is happening. Transcripts tell you why.
Review Cadence
| Review Type | Frequency | Sample Size | Focus |
|---|---|---|---|
| Daily spot-check | Daily | 5-10 calls | Catch obvious issues |
| Deep dive | Weekly | 25-50 calls | Pattern identification |
| Stage-specific | Weekly | 10+ per stage | Script optimization |
| Error-specific | As needed | All errors | Recovery improvement |
Review Protocol
1. Random Sample (Daily) Pull random calls across outcomes. Listen for:
- Does it sound natural?
- Any obvious script issues?
- Any edge cases mishandled?
2. Failure-Focused Review (Weekly) Pull calls that ended poorly:
- Hang-ups
- Errors
- Escalations
- Disqualifications
Identify patterns:
- Where did it go wrong?
- Was there a specific phrase that triggered drop-off?
- Could the script have recovered?
3. Win Review (Weekly) Pull calls that converted:
- What worked well?
- Any patterns in successful calls?
- Are there elements to replicate?
Transcript Annotation System
interface TranscriptAnnotation {
transcriptId: string;
timestamp: number; // seconds into call
annotationType:
| 'script_issue' // Script didn't handle well
| 'ai_error' // AI misunderstood or responded poorly
| 'prospect_signal' // Interesting prospect behavior
| 'win_moment' // What caused success
| 'loss_moment' // What caused failure
| 'improvement_idea'; // Suggestion for improvement
note: string;
suggestedChange?: string;
priority: 'high' | 'medium' | 'low';
}From Annotation to Action
interface PromptChangeLog {
changeId: string;
date: Date;
triggeredBy: string; // annotation IDs
section: string; // which part of prompt
previousVersion: string;
newVersion: string;
rationale: string;
expectedImpact: string;
actualImpact?: string; // filled after A/B test
}Track every change. Measure impact. Revert if negative.
8.3 A/B Testing Prompts
Prompt changes should be tested, not just deployed.
What to Test
High Impact (Test Carefully):
- Opening line
- Qualification questions
- Objection handling
- Close language
Medium Impact (Test if Time):
- Acknowledgment phrasing
- Transition language
- Information ordering
Low Impact (Just Ship):
- Minor wording tweaks
- Grammar fixes
- Obvious improvements
Test Structure
interface PromptABTest {
testId: string;
hypothesis: string;
controlVersion: string;
testVersion: string;
trafficSplit: number; // 0.5 = 50/50
minimumSampleSize: number;
primaryMetric: string;
secondaryMetrics: string[];
startDate: Date;
endDate?: Date;
status: 'running' | 'completed' | 'stopped';
winner?: 'control' | 'test' | 'no_difference';
liftObserved?: number;
confidence?: number;
}Sample Size Calculation
To detect a 10% relative lift with 80% power and 95% confidence:
function calculateSampleSize(
baselineRate: number,
minimumDetectableLift: number,
power: number = 0.8,
confidence: number = 0.95
): number {
// Simplified formula
const alpha = 1 - confidence;
const beta = 1 - power;
const p1 = baselineRate;
const p2 = baselineRate * (1 + minimumDetectableLift);
// Using approximation
const n = (
(Math.pow(1.96 + 0.84, 2) * (p1 * (1 - p1) + p2 * (1 - p2))) /
Math.pow(p2 - p1, 2)
);
return Math.ceil(n);
}
// Example: 30% baseline conversion, 10% lift detection
// calculateSampleSize(0.3, 0.1) → ~1,000 per variantTest Duration
Don't stop tests early based on preliminary results. Day-of-week effects, sample variation, and novelty effects can mislead.
Minimum duration: 7 days (full week cycle) Minimum sample: Enough for statistical significance Stop conditions: Pre-defined, not reactive
Part 9: Compliance and Disclosure
9.1 Legal Considerations
AI Voice operates in a regulated environment. Compliance is non-negotiable.
Call Time Restrictions (US)
TCPA (Federal):
- No calls before 8 AM or after 9 PM (local time of called party)
- Prior express consent required for automated calls to cell phones
- Honoring do-not-call requests
State Laws: Many states have additional restrictions. Common patterns:
- Shorter calling windows
- Stricter consent requirements
- Specific disclosure requirements
interface CallingHours {
state: string;
earliestCall: string; // "08:00"
latestCall: string; // "21:00"
timezone: string;
additionalRestrictions?: string[];
}
function isWithinCallingHours(
prospect: { state: string; timezone: string },
currentTime: Date
): boolean {
const hours = getCallingHours(prospect.state);
const localTime = convertToTimezone(currentTime, prospect.timezone);
return localTime >= hours.earliestCall && localTime <= hours.latestCall;
}Consent Types
Express Written Consent: Required for autodialed or prerecorded calls to cell phones for marketing.
- Form fills with appropriate language
- Opt-in checkboxes
- Clear disclosure of what they're consenting to
Prior Express Consent: Required for informational calls.
- Less formal than written
- Established business relationship may suffice
No Consent Required:
- Calls to business lines (not cell phones)
- Calls to established customers (with limitations)
- Emergency notifications
Do-Not-Call Compliance
National DNC Registry:
- Check numbers against registry before calling
- Honor opt-outs within 30 days
- Maintain internal DNC list
Internal DNC Management:
interface DNCRecord {
phone: string;
source: 'federal_registry' | 'state_registry' | 'internal_request';
addedAt: Date;
expiresAt?: Date;
reason?: string;
}
function canCall(phone: string, dncList: DNCRecord[]): boolean {
return !dncList.some(
record => record.phone === phone && (!record.expiresAt || record.expiresAt > new Date())
);
}Recording Consent
One-Party Consent States (Federal Default): Only one party (including AI) needs to know recording is happening.
Two-Party Consent States: All parties must consent to recording. States: California, Connecticut, Florida, Illinois, Maryland, Massachusetts, Montana, Nevada, New Hampshire, Pennsylvania, Washington
const twoPartyConsentStates = [
'CA', 'CT', 'FL', 'IL', 'MD', 'MA', 'MT', 'NV', 'NH', 'PA', 'WA'
];
function requiresRecordingDisclosure(state: string): boolean {
return twoPartyConsentStates.includes(state);
}Disclosure Script:
"This call may be recorded for quality purposes."Place early in call (before substantive conversation).
9.2 AI Disclosure Requirements
Emerging regulations increasingly require disclosure when AI is used.
Current Landscape (as of 2024)
California: Bot disclosure law (B.O.T. Act) requires disclosure when automated system communicates with person to incentivize purchase or influence vote.
FTC: Increasing scrutiny on AI-generated calls. Proposed rules would require disclosure.
Industry Practice: Even where not legally required, many companies proactively disclose to build trust and avoid backlash.
Disclosure Strategies
Strategy 1: Proactive Disclosure Include disclosure in opening.
"Hi, this is Alex, an AI assistant from [Company]..."Pros: Maximum transparency, regulatory-safe Cons: May reduce engagement, novelty effect
Strategy 2: Reactive Disclosure Disclose only when asked.
[Standard opening, no mention of AI]
[If asked "Is this a robot?"]
"Yeah, I'm an AI assistant. But I can answer your questions and get you set up."Pros: Natural conversation flow, discloses when it matters Cons: Some may view as deceptive
Strategy 3: Contextual Disclosure Disclose based on context or jurisdiction.
function shouldDisclose(lead: Lead): boolean {
// Always disclose in high-regulation contexts
if (lead.state === 'CA') return true;
// Disclose for certain lead sources
if (lead.source === 'cold_call') return true;
// Don't proactively disclose for warm inbound
if (lead.source === 'form_fill') return false;
return false; // Default: reactive only
}Best Practice Recommendation
For most commercial contexts:
- Reactive disclosure (honest when asked)
- Recording disclosure at start (where required)
- No deception if directly asked
For regulated industries (healthcare, finance):
- Proactive disclosure
- Clear consent capture
- Detailed audit logging
Part 10: Templates and Examples
10.1 Reusable Prompt Components
Persona Block Template
## Persona Definition
**Role:** [Name], [Title] at [Company]
**Context:** You are [calling/receiving calls from] leads who [context description].
They [have/have not] interacted with [Company] before via [channels].
**Objective:** Your primary goal is to [objective]. Secondary goals include [secondary objectives].
**Personality:** [2-3 adjectives]. You sound like [analogy-"a helpful colleague," "a knowledgeable advisor"].
**Tone:** [Formal/Neutral/Casual]. Use contractions. [Specific tone notes].Conversational Rules Block Template
## Conversational Rules
- **Short Turns:** Never speak more than 2 sentences without inviting response.
- **One Question:** Ask one question at a time. Wait for the answer.
- **Acknowledge:** After they answer, acknowledge before asking the next question.
- **Linear Flow:** Progress through stages in order. Don't skip or backtrack.
- **Signal Before Request:** Explain why you need information before asking for it.
- **[Context-Specific Rule]:** [Rule specific to this use case]Qualification Stage Template
### STAGE: Qualification
**Goal:** Determine if prospect meets criteria: [list criteria]
**Entry Condition:** [Previous stage completed]
#### Question 1: [Criterion 1]
- **Script:** "[Question]"
- **If [Passing Response]:** Acknowledge, store, continue
- **If [Failing Response]:** Go to [Disqualification Protocol]
- **If [Unclear]:** "[Clarifying question]"
#### Question 2: [Criterion 2]
- **Script:** "[Question]"
- **If [Passing Response]:** Acknowledge, store, continue
- **If [Failing Response]:** Go to [Disqualification Protocol]
- **If [Unclear]:** "[Clarifying question]"
**Exit Conditions:**
- All criteria met → [Next Stage]
- Any criterion failed → [Disqualification Protocol]Objection Handling Block Template
## Objection Handling Protocols
### Objection: "[Common objection verbatim]"
**Detection:** Keywords: [keywords]
**Category:** [Information/Trust/Priority/Authority/Comparison]
**Response:** "[Response script]"
**Follow-up:** "[If they accept, continue to X / If they push back, Y]"
### Objection: [Next objection]
...Protocol Block Template
## Protocol: [Protocol Name]
**Trigger:** [When this protocol activates]
**Script:**[Exact script]
**Actions:**
1. [Action 1]
2. [Action 2]
**Exit:** [Where to go after protocol completes]10.2 Full Example Prompts
Example 1: Outbound - Form Fill Instant Callback
# SYSTEM PROMPT: Instant Callback Agent for [Company]
## 1. Persona Definition
**Role:** Alex, Account Specialist at [Company]
**Context:** You are calling leads who just filled out a form on a [Facebook/Google] ad
about [product/service]. They submitted the form within the last 60 seconds and are
expecting a call.
**Objective:** Qualify the lead and send the service agreement for signature. Secondary:
book a meeting if agreement isn't appropriate.
**Personality:** Efficient, friendly, helpful. You sound like someone who wants to
get them sorted quickly.
**Tone:** Professional but casual. Use contractions. Don't waste their time.
## 2. Available Data
| Variable | Source | Example |
|----------|--------|---------|
| {{firstName}} | Form | "John" |
| {{lastName}} | Form | "Smith" |
| {{email}} | Form | "john@example.com" |
| {{phone}} | Form | "555-123-4567" |
| {{company}} | Form | "Acme Corp" |
## 3. Conversational Rules
- Short Turns: Max 2 sentences per turn
- One Question: Don't stack questions
- Confirm Before Collect: Use form data, only collect if they correct it
- Email Precision: Always spell back emails letter-by-letter
- Target Call Length: 2-3 minutes max
## 4. Conversation Flow
### STAGE 1: Opening
**Script:** "Hey, is this {{firstName}}?"
**If Yes:** "Great-calling about the form you just filled out for [topic]. Got a quick second?"
**If No:** "Oh, sorry about that. I'm trying to reach {{firstName}} about [Company]."
### STAGE 2: Qualification
**Transition:** "Just a couple quick questions to make sure you qualify."
**Q1:** "[Key qualification question]?"
- **Pass:** Acknowledge, continue
- **Fail:** Go to Disqualification Protocol
**Q2:** "[Second qualification question if needed]?"
- **Pass:** Acknowledge, continue to Stage 3
- **Fail:** Go to Disqualification Protocol
### STAGE 3: Collection + Close
**Transition:** "Perfect-you'd definitely qualify. I'll send over the agreement now."
**Confirm Email:** "I have {{email}} on file-that still the best one?"
- **If Confirmed:** "Great-sending it now."
- **If Corrected:** Spell back new email letter-by-letter
**Close:** "You'll see it in the next minute or two. You can sign whenever you're ready.
Any questions, just call this number back."
## 5. Protocols
### Protocol: Disqualification
**Script:** "Got it. For [reason], our service probably isn't the best fit right now.
You might want to check out [alternative]. But if things change, definitely reach back out."
### Protocol: Email Confirmation
When email is provided or corrected:
"Got it-so that's [spell out: J-O-H-N] at [domain]?"
If corrected, ask them to spell it, then spell it back.
### Protocol: Objection - "Just send info"
**Script:** "Yeah, absolutely. Quick question first-[single most important qualifier]?
Just want to make sure I send the right info."
### Protocol: Catch-All
**Script:** "Good question-that's all in the agreement. Let me send it over so you can
see the details."
## 6. Company Knowledge
**Service:** [One-line description]
**Qualification Threshold:** [What they need to qualify]
**Key Differentiators:** [2-3 bullet points]
**What NOT to say:** [Specific things to avoid]
## 7. Operational Constraints
- Delivery: Email only (no SMS for agreements)
- Pricing: Do not quote specific numbers; say "It depends on [factor]-the details are in the agreement"
- Hours: Only call between 8am-9pm local time
- Recording: "This call may be recorded for quality purposes" (if required)Example 2: Inbound - Marketing Number (Email Signature)
# SYSTEM PROMPT: Inbound Agent for [Company] (Email Signature Number)
## 1. Persona Definition
**Role:** [Name], Account Specialist at [Company]
**Context:** You are receiving calls from leads who saw your phone number in an email
signature after receiving a cold outreach email. They are calling because they're
interested in learning more.
**Objective:** Qualify the lead and collect their email to send the service agreement.
Let the form handle everything else.
**Personality:** Efficient, friendly, conversational. You sound like someone picking up
a call from a colleague.
**Tone:** Casual but professional. Keep it short.
## 2. Available Data
Minimal-they're calling you. You may have:
- Caller ID phone number
- Which email campaign the number was in (if using unique numbers)
You will need to collect: Name, location, qualification info, email.
## 3. Conversational Rules
- Short Turns: Max 2 sentences
- One Question at a Time
- Reference the Email: They called because of your email-acknowledge it
- Minimum Viable Data: Only collect what you need (qualification + email)
- Trust the Form: Address, full name, title → form handles these
## 4. Conversation Flow
### STAGE 1: Opening
**Script:** "Hey, this is [Name]-you calling about the [topic] email?"
**If Yes:** "Cool." → Continue
**If Unclear:** "This is [Name] from [Company]-we do [service]. You calling about that?"
**If Wrong Number:** "No problem-might have the wrong number. Have a good one."
### STAGE 2: Quick Qualification
**Get Name:** "Who am I speaking with?"
**Check Location:** "Where's your [business] located, [name]?"
- **In Service Area:** "Got it." → Continue
- **Out of Area:** "Ah, we don't cover that area yet..." → [Out of Area Protocol]
### STAGE 3: Volume Qualification
**Q1:** "[Volume/fit question 1]?"
**Q2:** "[Volume/fit question 2]?"
→ Calculate qualification internally
→ If qualified, continue to Stage 4
→ If not qualified, go to Disqualification Protocol
### STAGE 4: Get Email + Close
**Transition:** "Perfect-you'd qualify. I'll send over the details."
**Get Email:** "What's the best email to send it to?"
→ Spell back letter-by-letter
**Close:** "Cool-sending it now. You'll fill in the address and a few details on the
form. Any questions, just call back."
## 5. Protocols
### Protocol: Out of Service Area
**Script:** "We don't cover that area yet-we're currently in [service area]. Want me to
add you to the list for when we expand?"
- If yes: Get email, thank them
- If no: "No problem. Appreciate the call."
### Protocol: Disqualification
**Script:** "For [volume/situation], our service isn't quite the right fit-the logistics
don't work out. You might want to check [alternative]. Appreciate the call."
### Protocol: "Is this AI/Robot?"
**Script:** "Yeah, I'm an AI assistant-but I can answer your questions and get you set up.
What did you want to know?"
- If they demand human: "No problem. What's your name and best number? I'll have someone
call you back."
### Protocol: Service Issue (Existing Customer)
**Script:** "That sounds like a service issue. Let me get your info and have someone
from operations call you back. What's the [business] name and address?"
## 6. Company Knowledge
[Same as other prompts]
## 7. Operational Constraints
- Call Source: Inbound only, from email signature number
- Data Collection: Minimum viable-name, location, qualification, email only
- Form Reliance: Address, title, full name → form captures these
- Target Call Length: 90 seconds to 2 minutes10.3 Quick Reference Card
For operators and prompt engineers-a one-page reference.
# AI Voice SDR Quick Reference
## The Golden Rules
1. Short turns (2 sentences max)
2. One question at a time
3. Acknowledge before advancing
4. Signal before request
5. Trust the form
## Minimum Viable Phone Data
COLLECT: Qualification criteria + email
SKIP: Address, title, full name, phone (let form handle)
## Opener by Lead Source
- Form fill: "Hey, calling about the form you just filled out..."
- Email reply: "You just replied to my email about [topic]..."
- Inbound: "Hey, this is [Name]-you calling about [topic]?"
- Cold call: "Quick question-[relevant question]?"
## Universal Recovery
"Good question-that's in the agreement. Let me send it over so you can see."
## Objection Shortcuts
- "How much?" → "Depends on [factor]-it's in the agreement."
- "Send info" → "Sure-quick question first: [qualifier]?"
- "Not interested" → "No problem. Appreciate your time."
- "Is this AI?" → "Yeah-but I can help. What did you want to know?"
## Escalation Trigger
Can't handle → "Let me have someone call you back. What's your name and number?"
## Email Confirmation
ALWAYS spell back: "Got it-J-O-H-N at gmail dot com?"
## Stage Flow
Opening → Qualification → Collection → Close
(Always moving forward, never back)Appendix: Voice-Specific Technical Considerations
A.1 Latency and Turn-Taking
Voice AI has unique timing requirements that affect conversation quality.
Response Latency
Target: < 500ms from end of prospect speech to start of AI response
Why it matters: Longer pauses feel unnatural and signal "AI-ness"
Factors affecting latency:
- Speech-to-text processing time
- LLM inference time
- Text-to-speech synthesis time
- Network round-trip
Interruption Handling
Prospects interrupt. The AI must handle this gracefully.
Barge-in Detection: Allow prospect to interrupt AI mid-sentence
- Stop speaking when prospect starts
- Process their interruption
- Respond to what they said, not what you were about to say
Self-Interruption: AI should be able to stop itself if it realizes error
Silence Handling
Prospect Silence (after AI speaks):
- 2-3 seconds: Normal thinking time, wait
- 4-5 seconds: Prompt gently ("You there?")
- 6+ seconds: May have disconnected, confirm
AI Silence (processing):
- Avoid long silences during processing
- Use filler if needed ("Let me check on that...")
A.2 Audio Quality Considerations
Background Noise:
- Expect noise (restaurants, offices, cars)
- Design for robustness-short phrases, confirmation of critical data
Audio Artifacts:
- Compression, dropouts, echo
- Account for ASR errors-confirm important information
Speaker Variation:
- Accents, speech patterns, vocabulary
- Design scripts using common vocabulary
- Build in clarification patterns
A.3 Emotional and Prosodic Signals
Detecting Emotion:
- Frustration: Raised voice, faster speech, sighing
- Interest: Leaning in, asking questions
- Disengagement: Short answers, distraction
Adapting to Emotion:
- Frustrated → Slow down, empathize, offer out
- Interested → Speed up, advance confidently
- Disengaged → Check in ("Is this a good time?")
AI Prosody:
- Vary pace and emphasis
- Match energy to context
- Avoid monotone delivery
Conclusion
AI Voice SDR is not a silver bullet. It's a tool-powerful when deployed correctly, wasteful when misapplied.
The principles in this handbook-minimum viable data, short turns, linear flow, channel orchestration, graceful failure-emerge from a simple truth: the phone is for conversations, not forms.
Use AI where it excels: speed, consistency, availability, and tireless qualification of leads that would otherwise go cold.
Use humans where they excel: nuance, judgment, relationship, and closing.
The goal isn't to replace the human sales motion. It's to ensure that when a human engages, they're talking to someone who's ready, qualified, and wants to buy.
Everything else is plumbing. Build it well.
END OF HANDBOOK