Sharing the full stack for a missed-call-to-booking automation I’ve built on top of GHL. Happy to get feedback or answer questions on any part of it. The problem it solves: A service business misses a call. The lead calls a competitor within 5 minutes. The owner doesn’t find out until it’s too late. This happens constantly — not because the owner doesn’t care, but because they’re on a job. The stack: GHL (trigger layer) → Missed call fires a webhook to n8n → n8n checks: does this contact have an active AI conversation already? If yes → stop (prevents double-threading) KnockKnock (AI SMS conversation layer) → Personalised text in under 60 seconds: “Hey [Name] — sorry we missed you. Were you calling about [service]?” → Follows up with 2-3 qualification questions: what’s the job, how urgent, any specifics Claude via n8n (intent classification) → Receives conversation transcript → Returns HOT / WARM / COLD / UNCLEAR GHL (action layer, based on intent): ⇒ HOT → sends GHL booking link → appointment auto-created in calendar → owner notified ⇒ WARM → starts 48-72hr nurture sequence ⇒ COLD → tagged, long-term drip ⇒ UNCLEAR → workflow pauses + GHL internal notification sent to owner with transcript Deduplication: Execution ID written to GHL contact custom field at workflow start. If the same trigger fires again, n8n reads the field and stops execution before any outreach. Prevents duplicate messages. Works for any inbound service business. Qualifying questions change per niche (HVAC, legal, cleaning, financial, etc.) — the architecture stays the same. Happy to go deeper on the Claude prompt, the n8n webhook structure, or the GHL workflow side if useful.