Technical Reference

Laura AI Voice System

Complete workflow map showing every step, tool call, data payload, and decision point across all three call flows
Prepared for Mitchell, Nicole, and Daniel | April 2026
Team Key
Laura - AI Voice Agent (Retell AI)
Daniel - Pre-Closer
Mitchell - Estimator / Co-Owner
Nicole - CEO / Co-Owner

Flow 1: Inbound Calls

Every incoming call to Equipped Painting's number is answered by Laura. Here is exactly what happens from the moment the phone rings.

1
Trigger

Customer Dials Equipped Painting

A customer calls the main Equipped Painting business number. This could be from Google search, a yard sign, a referral, or any other source.
2
Phone System

Quo Forwards to Twilio SIP Trunk

Quo's call forwarding routes the call to the Twilio SIP trunk. Twilio bridges the PSTN call into the Retell AI platform using SIP protocol.
Twilio Number +1 (425) 390-8352
SIP Endpoint sip:sip.retellai.com
Trunk SID TKa78353ddd4966ba3fd0df05ec4aea74c
3
AI Agent

Retell Activates Laura (Inbound Agent)

Retell receives the SIP call and spins up the Laura inbound agent. The LLM receives the system prompt and is ready to interact. No static greeting is played - Laura's first action is a tool call.
Agent ID agent_67a8e0339050755cfa9ff38fb8
LLM gpt-4.1 via Retell-hosted LLM
Voice ElevenLabs - Marissa
Max Duration 60 minutes
4
Tool Call

Laura Calls check_hours (Mandatory First Action)

Before saying a single word, Laura calls the check_hours tool on our Cloudflare backend. This determines whether Daniel is currently available for a live transfer, which changes the entire call flow.
Endpoint POST /equipped/check-hours
Server vapi-backends.camanse-j.workers.dev
Business Hours Mon-Fri, 9:00 AM - 6:00 PM Pacific
Returns { is_business_hours: true/false, message: "..." }
5
AI Agent

Laura Greets the Caller

Based on the check_hours result, Laura uses a different opening. During hours she keeps it simple. After hours she sets the expectation that she'll help get things set up for the team.
During Hours "Hi, thanks for calling Equipped Painting! This is Laura. How can I help you today?"
After Hours "Hi, thanks for calling Equipped Painting! This is Laura. The team's done for the day, but I can absolutely help you get set up with a free estimate or answer some questions."
6
AI Agent

Laura Identifies Caller Intent

Laura listens to what the caller needs and routes accordingly. She handles five distinct scenarios:
Wants Estimate Proceed to qualification (Step 7)
Has Questions Answer using company info, then guide to qualification
Existing Customer Capture issue via capture_issue tool, escalate if urgent
Wants Daniel Quick qualify then transfer (during hours) or offer booking (after hours)
Not a Customer Politely end: "It sounds like this might not be the right fit."
7
AI Agent - Qualification

Laura Qualifies the Lead (One Question at a Time)

Laura asks each question individually and waits for the customer's full response before moving to the next. She never bunches multiple questions together. She does not ask about primary residency.
Question 1 "Interior or exterior painting?"
Question 2 "Residential or commercial?"
Question 3 "Address or general area?" (confirms King/Snohomish County)
Question 4 "Timeline for getting started?"
Question 5 "Name?"
Question 6 "Best phone number?"
Question 7 "Email for the written proposal?" (optional, no pressure)
8
AI Agent - Soft-Close

Laura Runs Soft-Close Questions (Mandatory Before Booking)

These prevent phantom assessments on Mitchell's calendar. Each question is asked individually, with a full pause for the answer. If decision makers aren't available, Laura suggests rescheduling.
Question 1 "Will all decision makers be available at the property during the estimate?"
Question 2 "Rough square footage or number of rooms?"
Question 3 "Colors in mind, or any prep work already done?"
Question 4 "Ready to move forward with getting a proposal? Mitchell will put together a detailed 'No-Guess' proposal on site."
9
Decision Point

Route Based on Business Hours Result

The check_hours result from Step 4 now determines the routing path. Three possible outcomes:
During Hours
Live Transfer to Daniel
  1. Laura says: "Let me connect you with Daniel - he'll go over a few details and get your estimate scheduled with Mitchell."
  2. Laura calls transferCall tool
  3. Cold transfer to Daniel at +1 (253) 893-4599
  4. Daniel pre-closes, confirms details, schedules Mitchell's on-site estimate
After Hours
Book on Mitchell's Calendar
  1. Laura asks for preferred day/time
  2. Laura calls book_calendar_consultation tool
  3. Cloudflare Worker hits Google Calendar API, finds next available slot on Mitchell's calendar (sales@equippedpainting.com)
  4. Calendar event created with lead details in the description
  5. Laura confirms the date and mentions Daniel will follow up to finalize
Transfer Fails
Fallback Chain
  1. Daniel doesn't answer or transfer errors out
  2. Laura: "Looks like Daniel just stepped away. Let me book you directly on Mitchell's calendar."
  3. Falls through to calendar booking flow
  4. If calendar also fails, book_consultation tool sends lead to DripJobs via Zapier as last resort
10
Tool Calls - Every Path

Lead Captured + Notifications Sent

Regardless of which path the call took, these tool calls fire during the conversation to capture the lead and notify the team:

Triggered on Every Call

DripJobs Lead Created

Lead data posted to Zapier webhook, which creates/updates the lead in DripJobs CRM. Payload includes split name (first/last), phone, email, address (street/city/state/zip), project type, and source.

Live
Slack Notification

Formatted message posted to #sales-leads with lead name, phone, project type, urgency, and call outcome. Gives estimators full context before any follow-up.

Needs Webhook URL from Nicole
End-of-Call Report

When the call ends, Retell fires a webhook to /equipped/end-of-call. Logs call summary, duration, success evaluation, and recording URL. Also posted to Slack.

Live
Zapier Webhook hooks.zapier.com/hooks/catch/22115870/unkcjb4/
End-of-Call POST /equipped/end-of-call
Slack Webhook EQUIPPED_SLACK_WEBHOOK_URL (not yet set - waiting on Nicole)

Flow 2: Speed-to-Lead

When a potential customer submits a form on the website, Facebook, or Google, Laura automatically calls them back within seconds. No human action required.

1
Trigger

Lead Submits a Form

A potential customer fills out a contact form on the Equipped Painting website, a Facebook lead ad, or a Google form. The form data includes their name, phone number, and what they're looking for.
2
CRM

DripJobs Creates a New Lead

The form submission lands in DripJobs, creating a new lead record with the customer's information and source.
3
Automation - Zapier Zap #2

Zapier Fires the Speed-to-Lead Trigger

Zapier's "Speed-to-Lead" zap detects the new DripJobs lead and immediately sends a POST request to our Cloudflare Worker endpoint with the lead data.
Zap Name Equipped Painting - Speed-to-Lead
Trigger DripJobs - New Lead Created
Action POST /equipped/speed-to-lead
{ "customer_name": "Sarah Johnson", "customer_phone": "+12065551234", "lead_source": "website", "project_type": "exterior residential" }
4
Backend - Cloudflare Worker

Worker Validates and Triggers Retell Outbound Call

The Cloudflare Worker receives the payload, normalizes the phone number to E.164 format, and calls the Retell API to initiate an outbound phone call. The lead's name, source, and project type are passed as dynamic variables so Laura already knows context when the call connects.
Retell API POST https://api.retellai.com/v2/create-phone-call
From Number +14253908352 (same Equipped number)
Agent agent_7f705119c348b683550edbbaf1 (Outbound Laura)
// Dynamic variables passed to the LLM: { "customer_name": "Sarah Johnson", "lead_source": "website", "project_type": "exterior residential" }
5
Notification

Slack Notification: Speed-to-Lead Triggered

Immediately after triggering the call, the Worker posts a formatted message to Slack with the lead's name, phone, source, project type, and call status (initiated or failed). This gives the team visibility in real time.
Needs Webhook URL
6
AI Agent

Laura Calls the Lead

Retell dials the lead's phone number from the Equipped Painting number. When the lead answers, Laura's first action is check_hours (same as inbound). Then she opens with a speed-to-lead greeting that references their form submission:
Opening "Hey Sarah, this is Laura with Equipped Painting. I see you just reached out about a painting project - I wanted to follow up real quick. Did I catch you at a good time?"
7
Lead Answers?

Three Possible Outcomes

Lead Answers - Available
Qualify + Route

Same one-at-a-time qualification and soft-close flow as inbound. Then route to Daniel (during hours) or book on Mitchell's calendar (after hours).

Lead Answers - Bad Time
Schedule Callback
  1. "No worries. When would be a better time?"
  2. Laura calls schedule_callback tool
  3. Callback details logged for team follow-up
Voicemail
Leave Message + Log
  1. Laura leaves a short voicemail mentioning free estimate
  2. Calls log_voicemail tool
  3. Voicemail logged with lead source and timestamp
8
AI Agent - Objection Handling

Laura Handles Common Objections Naturally

If the lead pushes back, Laura has scripted responses that keep things low-pressure and transparent:
"Just shopping" "Totally makes sense. Mitchell comes out for free, no obligation, and you get a written proposal with exact numbers."
"How much?" "Every project is different, which is why Mitchell does the free estimate. Competitively priced, locked-in price, no surprises."
"Not ready" "No rush. Want me to have the team follow up in a couple weeks?" (uses capture_lead with follow-up date)
"Don't call me" Immediately complies. "Absolutely, I'll make sure you're removed." (uses capture_lead with do_not_call: true)

Flow 3: Manual Outbound (Cold Calls)

Daniel selects leads from a database and manually triggers Laura to call them. Same backend, same routing, different opening.

1
Team Action

Daniel Selects a Lead from the Database

Daniel reviews the lead list (Google Sheet or DripJobs) and picks a lead to call. He triggers the call either through Zapier or by hitting the API endpoint directly.
2
Automation

Trigger Hits Speed-to-Lead Endpoint

Same endpoint as Flow 2. The only difference is the lead_source field is set to "cold" instead of "website", which changes Laura's opening line.
{ "customer_name": "Mike Rivera", "customer_phone": "+12065559876", "lead_source": "cold", "project_type": "painting project" }
3
AI Agent

Laura Calls with Cold Outbound Opening

Because lead_source is "cold", Laura uses a different opening that doesn't reference a form submission:
Opening "Hey Mike, this is Laura with the team at Equipped Painting. We're a local painting company here in the Renton area and I was calling to see if you have any upcoming painting projects we could help with."
4
AI Agent

Same Qualify, Soft-Close, and Routing Logic

From here, the call follows the exact same path as Flow 2: one-at-a-time qualification, soft-close questions, route to Daniel (during hours) or book on Mitchell's calendar (after hours). Same objection handling, same TCPA compliance, same 3-minute target.

System Integrations

Every service connected to Laura and how they fit together

Quo

Equipped Painting's existing phone provider. All incoming calls to the business number land here first. Quo's call forwarding is configured to route calls to the Twilio SIP trunk, which bridges them into the AI system. No changes needed on Quo's side beyond the forwarding rule Mitchell sets up.

Forwards to Twilio at +14253908352
Active

Retell AI

Voice AI platform. Hosts both Laura agents. Handles real-time speech-to-text (transcription), LLM inference (GPT-4.1), text-to-speech (ElevenLabs Marissa), and tool execution. Manages turn-taking, interruption handling, and backchannel responses ("mm-hmm").

Two agents: inbound receptionist + outbound caller
Active

Cloudflare Workers

Serverless API backend. Nine endpoints handle all business logic: hours checking, calendar booking, lead capture, issue logging, speed-to-lead triggering, voicemail logging, callback scheduling, consultation booking, and end-of-call reporting.

Deployed at vapi-backends.camanse-j.workers.dev
Active

Twilio

SIP trunking for phone connectivity. Elastic SIP Trunk bridges Quo's PSTN calls into Retell AI. Handles inbound routing via SIP origination and outbound caller ID. IP whitelist configured for Retell's servers (18.98.16.120/30).

Trunk: TKa78353d... | Number: +14253908352
Active

Google Calendar

Mitchell's estimate calendar. Laura books directly via the Google Calendar API using OAuth2 with a refresh token. The Worker finds the next available slot, creates an event with full lead details in the description, and confirms the time to the caller.

Calendar: sales@equippedpainting.com
Active

DripJobs via Zapier

CRM integration. Two Zapier zaps connect DripJobs to the voice system. Zap 1 ("Voice Agent Router") receives call outcomes and creates/routes leads. Zap 2 ("Speed-to-Lead") detects new DripJobs leads and triggers outbound calls.

Webhook: hooks.zapier.com/.../unkcjb4/
Active

Slack

Real-time team notifications. Every lead capture, speed-to-lead trigger, and end-of-call summary posts a formatted message to #sales-leads. This gives estimators full context (name, phone, project, outcome) before any follow-up call.

Incoming Webhook to #sales-leads channel
Needs Webhook URL

5-Week Launch Plan

Phased rollout from manual testing to full production

Week 0

Manual outbound testing. Daniel learns to trigger calls. Team reviews call recordings and refines Laura's script.

Week 1

Speed-to-lead goes live. Form submissions trigger automatic callbacks. Team monitors quality and response times.

Week 2

Cold outbound refinement. Morning and afternoon calling blocks. Daniel builds comfort with lead selection and volume.

Week 3

Inbound receptionist activated. Quo forwarding turned on. Laura answers all incoming calls. Monitor transfer success rate.

Weeks 4-5

Full production. All three flows active. Script optimization based on real call data. Performance review and adjustments.