{
  "name": "Vulcani — No-Show Reminder (free)",
  "nodes": [
    {
      "parameters": {
        "content": "## No-Show Reminder  ·  free from vulcani.io\n\n**What it does:** sends a friendly appointment reminder with one-tap **Confirm** and **Reschedule** links, so customers who'd otherwise forget (or quietly no-show) tell you instead. Most no-shows are forgetfulness, not bad intent.\n\n**Wire it (1 cred, ~3 min):**\n1. **Webhook** — copy the Production URL. Have your booking system POST to it for each appointment with: `customer_name`, `customer_email`, `appointment_time`, `business_name`, `confirm_link`, `reschedule_link`.\n2. **Gmail** — set your Gmail credential on *Send Reminder*. (Swap for Twilio to send by SMS.)\n\n**Make it a sequence (recommended):** add a **Wait** node so this fires the day before + a few hours before. The one-tap reschedule is the key — make moving the appointment easier than ghosting and most people do.\n\nMore free workflows → vulcani.io/free/",
        "height": 420,
        "width": 390,
        "color": 4
      },
      "id": "d4e5f6a7-0001-4000-8000-000000000001",
      "name": "README",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-180, 60]
    },
    {
      "parameters": { "httpMethod": "POST", "path": "appointment-reminder", "responseMode": "lastNode", "options": {} },
      "id": "d4e5f6a7-0002-4000-8000-000000000002",
      "name": "Appointment",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [320, 320],
      "webhookId": "vulcani-no-show-reminder"
    },
    {
      "parameters": {
        "assignments": { "assignments": [
          { "id": "n-1", "name": "to", "value": "={{ $json.body.customer_email || $json.customer_email }}", "type": "string" },
          { "id": "n-2", "name": "subject", "value": "=Reminder: your appointment with {{ $json.body.business_name || $json.business_name }}", "type": "string" },
          { "id": "n-3", "name": "html", "value": "=<p>Hi {{ $json.body.customer_name || $json.customer_name }},</p><p>Quick reminder of your appointment with <strong>{{ $json.body.business_name || $json.business_name }}</strong> on <strong>{{ $json.body.appointment_time || $json.appointment_time }}</strong>.</p><p>Can you make it?</p><p><a href=\"{{ $json.body.confirm_link || $json.confirm_link }}\">&#9989; Yes, confirm</a> &nbsp;&middot;&nbsp; <a href=\"{{ $json.body.reschedule_link || $json.reschedule_link }}\">&#128197; Need to reschedule</a></p><p>See you soon!</p>", "type": "string" }
        ] },
        "options": {}
      },
      "id": "d4e5f6a7-0003-4000-8000-000000000003",
      "name": "Build Reminder",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [560, 320]
    },
    {
      "parameters": { "sendTo": "={{ $json.to }}", "subject": "={{ $json.subject }}", "emailType": "html", "message": "={{ $json.html }}", "options": {} },
      "id": "d4e5f6a7-0004-4000-8000-000000000004",
      "name": "Send Reminder",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [800, 320]
    }
  ],
  "connections": {
    "Appointment": { "main": [[{ "node": "Build Reminder", "type": "main", "index": 0 }]] },
    "Build Reminder": { "main": [[{ "node": "Send Reminder", "type": "main", "index": 0 }]] }
  },
  "settings": { "executionOrder": "v1" }
}
