{
  "name": "No-show Follow-up SMS (abuusof.com)",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "appointment-status",
        "options": {}
      },
      "id": "8e2d3b21-2222-4b02-8d02-b2c3d4e5f601",
      "name": "Appointment status (Webhook)",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [0, 0],
      "webhookId": "appointment-status"
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": false, "leftValue": "", "typeValidation": "loose" },
          "conditions": [
            {
              "leftValue": "={{ $json.body.status }}",
              "rightValue": "noshow",
              "operator": { "type": "string", "operation": "equals" }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "8e2d3b21-2222-4b02-8d02-b2c3d4e5f602",
      "name": "Is no-show?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [220, 0]
    },
    {
      "parameters": {
        "amount": 60,
        "unit": "minutes"
      },
      "id": "8e2d3b21-2222-4b02-8d02-b2c3d4e5f603",
      "name": "Wait 1 hour",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [440, -80],
      "webhookId": "wait-noshow"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://services.leadconnectorhq.com/conversations/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            { "name": "Authorization", "value": "Bearer YOUR_PRIVATE_INTEGRATION_TOKEN" },
            { "name": "Version", "value": "2021-07-28" },
            { "name": "Content-Type", "value": "application/json" }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ type: 'SMS', contactId: $json.body.contactId, message: 'Hi ' + ($json.body.firstName || 'there') + \", sorry we missed you today! Reply YES and we'll get you rebooked — or grab a slot here: YOUR_BOOKING_LINK\" }) }}",
        "options": {}
      },
      "id": "8e2d3b21-2222-4b02-8d02-b2c3d4e5f604",
      "name": "Send follow-up SMS",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [660, -80]
    }
  ],
  "connections": {
    "Appointment status (Webhook)": { "main": [[{ "node": "Is no-show?", "type": "main", "index": 0 }]] },
    "Is no-show?": { "main": [[{ "node": "Wait 1 hour", "type": "main", "index": 0 }], []] },
    "Wait 1 hour": { "main": [[{ "node": "Send follow-up SMS", "type": "main", "index": 0 }]] }
  },
  "pinData": {},
  "settings": { "executionOrder": "v1" },
  "meta": {
    "notes": "Point a GHL workflow Webhook action here when an appointment is marked no-show (send contactId, firstName, status). Replace the token (scopes: conversations/message.write), and YOUR_BOOKING_LINK. From abuusof.com/connect-n8n-to-gohighlevel/"
  }
}
