This community is about Claude Code and n8n, so I figured it’d be worth sharing exactly how I’m using both in a production automation system. Setup: KnockKnock (AI SMS) + GHL (CRM/calendar) + n8n (orchestration) + Claude (intent classification) Here’s the full flow: Trigger (GHL): Missed call or form submit → GHL fires a webhook to n8n. First n8n check: query GHL to see if an active conversation already exists on this contact’s number. If yes → stop. Prevents double-threading when a lead calls twice. First message (KnockKnock): KK sends an SMS within 60 seconds. “Hey [Name] — saw you reached out about [service type]. Is that still something you’re looking into?” Short. Human. No pitch. Intent classification (Claude via n8n): When the lead replies, n8n passes the text to Claude with a simple system prompt: “Classify this SMS reply as HOT, WARM, or COLD. HOT = clear interest or booking signal. WARM = soft interest. COLD = not interested or wrong person.” Claude returns a single word. n8n routes via switch node. HOT branch: Send GHL booking link → appointment auto-creates in GHL calendar → pipeline stage updates → owner notification fires. WARM branch: Contact enters GHL 48-72hr nurture sequence. If they re-engage → back into HOT routing. COLD branch: Tag in GHL. Remove from active flow. Long-term drip. Write-back to GHL (every branch): n8n updates the GHL contact record: • Last intent: hot/warm/cold • Service mentioned: extracted from Claude’s output • Execution ID: [YYYY-MM]-[workflow-name]-[version] • Last message timestamp The Execution ID matters: query it at the start of every n8n run to detect duplicates. When debugging a specific contact, it gives you the exact execution to pull up. Stack summary: GHL → trigger, CRM, calendar, pipeline, notifications n8n → all logic: routing, Claude calls, duplicate detection, write-back KnockKnock → AI SMS layer Claude → intent classification (one clean word output = easy switch node routing)