โ™ ๏ธ Ace Diabetic Supply

Cron Workflow Map โ€” Updated April 14, 2026

๐Ÿ“ฅ
Lead Intake
Zapier โ†’ Worker (0 LLM cost)
Automated Flow
FB Lead Ad โ†’ Zapier โ†’ Airtable (New) โ†’ Worker /new-lead โ†’ GHL SMS (instant intro)
    โ†ณ Bilingual (Spanish name detection), supply-type matching, price-anchored intros
    โ†ณ 90s delay before text (feels human)
Backup (LLM-powered)
hybrid-outreach.sh โ€” 8AM catch for overnight leads that fell through (cron-based)
๐Ÿ”„
Lead Lifecycle
6 crons
CONTACTED (intro sent)
GHL Poll Every 15 min glm-5.1
Reads inbound messages, quotes leads, negotiates, flags to Anthony
โ†’ #ace-alerts
VAPI Quick Call Every 15 min
Calls leads 5min after intro text
CONTACTED
Smart Contacted Follow-up Every 30min 9AM-8PM glm-5.1
Day 1-2: friendly check ยท Day 3-5: value nudge ยท Day 7-10: direct ask ยท Day 14+: close out ยท 5 leads/run
โ†’ #ace-alerts
QUOTED
Smart Quoted Follow-up Hourly 9AM-8PM glm-5.1
Day 2: soft check ยท Day 4: interest nudge ยท Day 7: direct ask ยท Day 14: close-out ยท 5 leads/run
โ†’ #ace-alerts
DEAL MADE
Shipping Follow-up 10AM Mon-Sat glm-5.1
Nudges leads to drop off packages + flags void candidates (21+ days unused labels)
โ†’ #ace-alerts
โœ… COMPLETE
๐Ÿ‘๏ธ
Monitoring
5 crons
Delivery Monitor
Checks tracking for delivered packages, flags for payment
8AM 10AM 12PM 2PM 4PM 6PM daily glm-5.1
Message Gap Audit
Detects inbound msgs that got no reply
Every 30min 9AM-7PM (19x/day) glm-5.1
Conversation Audit
End-of-day quality review of conversations
9PM daily glm-5.1 โ†’ Telegram
Flagged Items Digest
Summarizes flagged leads to Slack
Every 3hrs (~8x/day)
Kit Tracker
Tracks outbound kits: Preparing โ†’ Mailed โ†’ Delivered โ†’ Nudged โ†’ Shipped Back. Reports to #ace-alerts
10AM Mon-Sat glm-5.1
๐ŸŒฑ
Nurture
1 cron
Nurture Follow-up 10:30AM + 1:30PM + 4:30PM glm-5.1
Soft 30-day check-ins for leads not ready to sell yet
โšก
Webhooks & API Endpoints
Cloudflare Worker
Base URL
https://ace-vapi-api.anthony-1cd.workers.dev
POST /
VAPI serverUrl โ€” routes assistant requests, end-of-call reports, and function calls
VAPI Assistant
POST /vapi-webhook
End-of-call reports โ†’ logs to Airtable + DMs Lance
VAPI End-of-Call
POST /lookup-customer
Looks up caller by phone in Airtable โ€” recognizes repeat customers
VAPI Function Call
POST /get-quote
Real-time quote calculation (55% of wholesale) during calls
VAPI Function Call
POST /new-lead
Zapier webhook โ€” instant intro SMS to new leads. Supply-type matching, bilingual, GHL contact creation. 0 LLM cost
Zapier โ†’ Worker
POST /follow-up
Follow-up drip โ€” disabled (replaced by OpenClaw Smart Follow-up crons)
Disabled
GET /health
Health check endpoint โ€” uptime monitoring
Monitoring
Call Flow
๐Ÿ“ž Caller โ†’ GHL (512-643-6823) โ†’ VAPI (737-702-6080)
    โ†’ POST / (assistant request)
    โ†’ lookupCustomer(phone) โ†’ Airtable
    โ†’ getQuote(items) โ†’ Price data
    โ†’ end-of-call-report โ†’ Airtable + Slack DM Lance
๐Ÿ“ž
VAPI Call Flow โ€” How It All Connects
Inbound + Outbound
โฌ‡๏ธ Inbound Call (customer calls us)
Customer โ”€โ”€โ”€โ”€โ†’ GHL (512-643-6823) โ”€โ”€โ”€โ”€โ†’ VAPI (737-702-6080)
โ”‚
Step 1: VAPI sends POST / to Worker (assistant-request)
Worker โ†’ Airtable lookupCustomer(phone)
Worker โ†’ Returns context to VAPI (name, repeat status, agreed pricing, shipment history)
โ”‚
Step 2: VAPI AI talks to customer, may call getQuote(items)
VAPI AI โ†’ Worker getQuote() โ†’ Price data (55% of wholesale)
โ†ณ AI quotes customer live on the call (e.g. "I can offer $165 per box")
โ”‚
Step 3: Call ends โ†’ VAPI sends end-of-call-report to Worker
Worker โ†’ OpenRouter GLM-5.1 classifyCall() (Quoted / Contacted / Dead / Nurture)
Worker โ†’ Airtable (update status + notes)
Worker โ†’ Slack #ace-alerts (call summary + DM Lance)
Worker โ†’ Creates new Airtable lead if new caller
โฌ†๏ธ Outbound Call (we call lead)
Trigger: OpenClaw cron runs vapi-quick-call.sh (every 15 min, 10AM-7PM)
Cron โ†’ Airtable (finds Contacted leads w/ 3+ texts, no reply) โ†’ VAPI API (create call)
Step 1: VAPI calls lead from (512) 488-1528 (Twilio outbound)
โ†ณ Uses Outbound Agent (Elliot voice, different from Inbound Agent)
โ†ณ Opens with "following up on the form you submitted"
โ”‚
Step 2: Same Worker flow as inbound โ€” assistant request, function calls
โ”‚
Step 3: End-of-call report โ†’ same Worker processing
Worker โ†’ GLM-5.1 classifyCall()
Worker โ†’ Airtable (status + notes)
Worker โ†’ Slack #ace-alerts
โ†ณ Voicemail detection โ†’ logs "no answer" if only AI spoke
โ†ณ After 2 failed calls โ†’ moves lead to "No Response"
๐Ÿ—๏ธ Architecture โ€” What Runs Where
VAPI (Cloud)
โ€ข Voice AI agent (inbound + outbound)
โ€ข Speech-to-text + text-to-speech
โ€ข Function call orchestration
โ€ข Sends webhooks to Worker
โ€ข Phones: 737-702-6080 (in), 512-488-1528 (out)
Cloudflare Worker
โ€ข Receives VAPI webhooks
โ€ข Customer lookup (Airtable)
โ€ข Quote calculation (price data)
โ€ข Call classification (GLM-5.1 via OpenRouter)
โ€ข New lead outreach (Zapier โ†’ /new-lead)
โ€ข Zero cold start, global edge
OpenClaw (MacBook)
โ€ข GHL Polling cron (every 15 min)
โ€ข VAPI Quick Call cron (triggers outbound)
โ€ข Smart Follow-up crons
โ€ข Delivery / Shipping monitors
โ€ข Main session (Anthony's chat)
โ€ข All LLM calls via OpenRouter GLM-5.1
๐Ÿ’ฒ
Pricing Architecture โ€” How Offers Get Calculated
Override โ†’ Wholesale โ†’ Offer
โšก Step 0: Override
price-overrides.json
โ€ข Manual overrides set by Anthony
โ€ข Only Anthony changes this file
โ€ข Checked FIRST before anything else
โ€ข If item matches โ†’ use this price, skip Steps 1-2
โ€ข Format: { "item": "G7 15 Day FT-012", "wholesalePrice": 95 }
๐Ÿ“Š Step 1: Wholesale
wholesaler-price-list.md
โ€ข Auto-synced daily at 7 AM (Price Sync cron)
โ€ข Reflects what wholesalers actually pay us
โ€ข 4 CSV sources: FCM + W2 (3 sheets)
โ€ข Sync NEVER overwrites override items
โ€ข Ask / NT ATM = not available
๐Ÿงฎ Step 2: Offer
Calculated at quote time
โ€ข 55% of wholesale (standard)
โ€ข Up to 70% (VIP / repeat / tough negotiation)
โ€ข Profit check: wholesale โˆ’ offer โˆ’ $12 shipping
โ€ข <$50 profit = BLOCK, $50-74 = thin, $75+ = go
โ€ข GHL Poll cron + Worker both use this flow
๐Ÿ”€ Pricing Lookup Flow (GHL Poll + VAPI Worker)
Customer asks price โ”€โ”€โ†’ Read price-overrides.json โ”€โ”€โ†’ Match found?
YES โ†’ Use override wholesalePrice โ†’ calculate 55-70% offer โ†’ DONE
NO โ†’ Read wholesaler-price-list.md โ†’ get wholesale price โ†’ calculate 55-70% offer โ†’ DONE
โš ๏ธ Daily Price Sync cron (7 AM) fetches fresh CSVs from wholesalers โ†’ updates wholesaler-price-list.md โ†’ but NEVER overwrites items in price-overrides.json (noted in Slack if CSV differs)
๐Ÿ“‹ Active Overrides (price-overrides.json)
Skyrizi
Wholesale: $600 (was NT ATM in sheet)
Set: 4/12
G7 15 Day STP-FT-012
Wholesale: $95 (sheet says Ask)
Set: 4/14
โš™๏ธ
Backend & Maintenance
Staggered Morning Schedule
System Backups & Checks
6:00 AM โ€” Airtable Daily Backup
6:45 AM โ€” Daily Health Check

Data & Prompt Synchronization (Staggered to prevent LLM timeouts)
7:00 AM โ€” Wholesaler Price Sync (Pulls from sheet)
7:05 AM โ€” Airtable Daily Maintenance (+5m offset)
7:35 AM โ€” VAPI Price Sync (+5m offset from GHL Poll)

Morning Action Catch-Up
8:05 AM โ€” New Lead Outreach (+5m offset)
10:00 AM โ€” Shipping Follow-up
10:05 AM โ€” Kit Tracker (+5m offset)
10:10 AM โ€” Delivery Check Reminder (+10m offset)
10:15 AM โ€” Monthly Ad Spend Reminder (1st of month)
10:35 AM โ€” Nurture Check-in (+5m offset)
10:45 AM โ€” Repeat Customer Follow-up (+15m offset)

Evening Audits
9:00 PM โ€” Conversation Audit
9:00 PM โ€” Daily Summary