Eight agents. One pipeline.
Zero missed leads.
Real LLM pipelines — not chatbot toys. Built on OpenAI function calling, Claude, n8n, and Twilio — integrated into your booking system, CRM, and Google Business Profile.
trigger → classify → LLM call → structured action → human escalation path
How every agent is structured
8 agents I build for local businesses
Each card shows the real trigger, model, and function schema. These are deployed pipelines — not demos.
Fires the moment a lead fills a form, messages your GBP, or clicks a Facebook Lead Ad. Pulls context from your service list and sends a personalised reply that sounds like you — in under 60 seconds.
function schema›
{
"name": "qualify_lead",
"parameters": {
"name": "string",
"service_interest": "enum[haircut,colour,blowout]",
"preferred_time": "string",
"urgency": "enum[today,this_week,flexible]"
}
}Monitors Google Business Profile, Yelp, and Facebook for new reviews. Generates a reply that references the specific service mentioned, thanks by name, and matches your brand tone. Negative reviews route to you first.
function schema›
{
"name": "draft_review_reply",
"parameters": {
"reviewer_name": "string",
"rating": "integer(1-5)",
"service_mentioned": "string",
"sentiment": "enum[positive,neutral,negative]",
"reply_tone": "enum[warm,professional,empathetic]"
}
}A multi-turn conversational agent that handles the full booking flow — asks about service, stylist preference, and date, checks real-time availability via Calendly/Acuity/Square API, and confirms the appointment.
function schema›
{
"name": "create_booking",
"parameters": {
"service": "string",
"staff_preference": "string | null",
"date": "ISO8601",
"duration_mins": "integer",
"customer_phone": "string",
"send_reminder": "boolean"
}
}When a call goes unanswered, Twilio fires a webhook. The agent sends a personalised SMS within 30 seconds, offers a direct booking link, and starts a two-way SMS conversation to capture the lead before they call a competitor.
function schema›
{
"name": "handle_missed_call",
"parameters": {
"caller_number": "string",
"call_time": "ISO8601",
"business_hours": "boolean",
"prior_customer": "boolean",
"message_template": "enum[new_lead,returning,after_hours]"
}
}A multi-step sequence: 48h before → SMS reminder with one-tap confirm. 2h before → final nudge. No reply? Agent sends a reschedule offer and marks the slot potentially free — reducing dead time on your calendar.
function schema›
{
"name": "send_reminder",
"parameters": {
"booking_id": "string",
"customer_name": "string",
"service": "string",
"appointment_time": "ISO8601",
"reminder_stage": "enum[48h,2h,1h]",
"channel": "enum[sms,email,whatsapp]"
}
}RAG-powered chat agent trained on your services, pricing, hours, and policies. Uses vector search over your content to give accurate, specific answers. Unknown questions route to you with full conversation context.
function schema›
{
"name": "query_knowledge_base",
"parameters": {
"query": "string",
"context_window": "integer",
"top_k_chunks": "integer(1-5)",
"confidence_threshold": "float(0-1)",
"fallback_action": "enum[escalate,capture_email,suggest_call]"
}
}Queries your booking system for clients who haven't visited in 60+ days, segments them by last service type, and sends a personalised re-engagement message with a tailored offer. Tracks opens and re-bookings automatically.
function schema›
{
"name": "reactivate_client",
"parameters": {
"client_id": "string",
"last_service": "string",
"days_since_visit": "integer",
"lifetime_value": "number",
"offer_type": "enum[discount,gift,priority_booking,none]",
"channel": "enum[sms,email]"
}
}After a completed appointment, the agent sends a satisfaction check via SMS. Happy customers (4–5 stars) get a direct link to your Google review page. Unhappy customers get a private feedback form — protecting your public rating.
function schema›
{
"name": "route_review_request",
"parameters": {
"customer_id": "string",
"service_completed": "string",
"internal_rating": "integer(1-5)",
"google_review_url": "string",
"private_form_url": "string",
"send_delay_mins": "integer"
}
}Monitors your booking system, new reviews, and seasonal events — then writes and publishes on-brand content to Instagram, Facebook, and Google Business Profile. Before/afters for salons, daily specials for cafés, class schedules for gyms. Each platform gets native content, not copy-paste.
function schema›
{
"name": "generate_social_post",
"parameters": {
"business_type": "enum[salon,cafe,gym,pet_groomer]",
"post_type": "enum[promotion,before_after,review_highlight,seasonal,class_schedule]",
"platform": "enum[instagram,facebook,gbp]",
"tone": "enum[warm,professional,playful,urgent]",
"include_cta": "boolean",
"cta_type": "enum[book_now,call_us,visit_link,dm_us]"
}
}Tools I use to build and deploy agents
Lead Responder — full pipeline config
This is an abbreviated version of the n8n workflow + OpenAI function definition used in a real hair salon deployment. The agent handles 40–60 inbound leads per month, responds within 45 seconds, and books ~28% into consultations.
{
"workflow": "lead_responder_v2",
"trigger": {
"type": "webhook",
"method": "POST",
"path": "/leads/inbound",
"auth": "bearer"
},
"nodes": [
{
"id": "classify_source",
"type": "switch",
"conditions": [
{ "field": "$.source", "equals": "gbp_message", "next": "enrich_gbp" },
{ "field": "$.source", "equals": "facebook_lead", "next": "enrich_fb" },
{ "field": "$.source", "equals": "web_form", "next": "enrich_form" }
]
},
{
"id": "call_llm",
"type": "openai_chat",
"model": "gpt-4o-mini",
"system_prompt": "You are a warm, concise assistant for {business_name}...",
"tools": [
{
"name": "qualify_lead",
"description": "Extract lead intent and urgency",
"parameters": {
"type": "object",
"properties": {
"service_interest": { "type": "string", "enum": ["haircut","colour","blowout","other"] },
"urgency": { "type": "string", "enum": ["today","this_week","flexible"] },
"contact_preference":{ "type": "string", "enum": ["sms","email","call"] }
},
"required": ["service_interest", "urgency"]
}
},
{
"name": "check_availability",
"description": "Query Calendly API for open slots",
"parameters": {
"type": "object",
"properties": {
"service_type": { "type": "string" },
"preferred_date": { "type": "string", "format": "date" },
"duration_mins": { "type": "integer", "default": 60 }
}
}
}
],
"fallback_on_error": "escalate_to_human"
},
{
"id": "send_reply",
"type": "twilio_sms",
"to": "{{trigger.phone}}",
"body": "{{llm.generated_reply}}",
"timeout_ms": 8000
},
{
"id": "create_crm_contact",
"type": "gohighlevel_api",
"action": "upsert_contact",
"data": {
"name": "{{trigger.name}}",
"phone": "{{trigger.phone}}",
"tags": ["ai_lead", "{{nodes.call_llm.service_interest}}"],
"pipeline": "new_leads"
}
},
{
"id": "escalate_to_human",
"type": "notify",
"channels": ["sms_owner", "slack"],
"message": "⚠️ AI handoff: {{trigger.name}} — low confidence or error. Conversation: {{context_url}}"
}
],
"sla": {
"max_response_ms": 60000,
"escalation_on_timeout": true
}
}* Simplified for clarity. Production config includes retry logic, PII scrubbing, and audit logging.
✓ What you get
This engagement is best for:
Technical questions answered
What's the difference between a workflow automation and an AI agent?
A workflow automation (Zapier, Make) follows a fixed if/then path — it can't reason or adapt. An AI agent uses an LLM to understand unstructured input, decide what action to take, and call the right tool. For example: a workflow can auto-send a confirmation email. An agent can read an ambiguous 'I want to come in Thursday but maybe Friday' message, extract the intent, check availability, and respond naturally.
Do you use GPT-4o or Claude? How do you choose?
It depends on the task. GPT-4o with function calling is best for structured data extraction, booking flows, and tool use. Claude 3.5 Sonnet/Haiku is better for customer-facing text where tone consistency matters — it's harder to make sound robotic. For most setups I run a hybrid: Claude for the customer-facing layer, GPT-4o-mini for the background data work.
Can agents access my existing booking system or CRM?
Yes, if it has an API (which most do — Calendly, Acuity, Square, Mindbody, GoHighLevel, HubSpot, Salesforce all do). I map the API endpoints into OpenAI function definitions or n8n HTTP nodes, so the agent can read availability, create bookings, and update contact records in real time.
How do you handle hallucinations or wrong answers?
For customer-facing agents I use RAG (retrieval-augmented generation) — the agent answers only from your approved content, not from general training data. I set confidence thresholds: if the retrieval score is below the threshold, the agent escalates to a human instead of guessing. Critical actions (booking creation, refunds) always require explicit confirmation steps.
What does a typical build cost and how long does it take?
A single-agent setup (e.g. missed call text-back + FAQ bot) typically takes 1–2 weeks and runs $800–$2,000 one-time depending on integration complexity. A full multi-agent pipeline (lead responder + booking + no-show reducer + reactivation) is 3–5 weeks, $2,500–$5,000. Monthly tool costs run $50–$200 (API calls, n8n hosting, Twilio). I provide full documentation so you can manage and update it yourself.
What happens when the AI gets something wrong or a customer complains?
Every agent has a human escalation path. The fallback triggers when: confidence score is low, the customer uses escalation keywords ('speak to a person', 'this is wrong'), or the conversation exceeds a set turn limit without resolution. You get a Slack/SMS alert with full conversation context so you can step in immediately. Nothing gets auto-resolved without a clear success condition.
Explore related services
Ready to brew up better results?
Let's take a look at your current setup — totally free, no pressure.
Get Your Free Marketing Audit