8
n8n 中文网amn8n.com

减少Calendly会议缺席率(模板)

高级

这是一个Lead Nurturing, AI Summarization领域的自动化工作流,包含 22 个节点。主要使用 If, Code, Wait, Twilio, EmailSend 等节点。 通过Gemini AI、邮件和WhatsApp提醒减少Calendly会议缺席

前置要求
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "QpilLWi7ZJID0IK3",
  "meta": {
    "instanceId": "e0abec5d9b13345e424c0dbbc512271f89fb17de3b268697e13a797de2271404",
    "templateCredsSetupCompleted": true
  },
  "name": "减少 Calendly 会议缺席率(模板)",
  "tags": [],
  "nodes": [
    {
      "id": "1fb2d001-2f04-4f5e-8f93-0c7668f246e0",
      "name": "发送提醒邮件",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1680,
        -80
      ],
      "webhookId": "e971be6e-d7e5-4146-b974-93aa5491c0ac",
      "parameters": {
        "text": "Hi {{$json[\"invitee_name\"]}},\\n\\nJust a quick reminder about our strategy call scheduled for {{$json[\"meeting_time\"]}}, {{$json[\"meeting_date\"]}} (EET).\\n\\nWe'll discuss how to scale smarter with AI and data-driven systems.\\n\\nJoin via: {{$json[\"meeting_link\"]}}\\n\\nTalk soon,\\n[HOST_NAME]",
        "options": {},
        "subject": "Reminder: Your AI Strategy Call {{ $json.type === '24h' ? 'Tomorrow' : 'in 1 hour' }}",
        "toEmail": "={{ $('extract from email').item.json.output.invitee_email }}",
        "fromEmail": "[HOST_EMAIL]"
      },
      "typeVersion": 2
    },
    {
      "id": "4ca79811-a7eb-42af-b461-f4166824172b",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        96,
        160
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"invitee_name\": \"string\",\n  \"invitee_email\": \"string\",\n  \"phone_number\": \"string\",\n  \"meeting_date\": \"date\",\n  \"meeting_time\": \"time\",\n  \"meeting_link\": \"string\",\n  \"meeting_goal\": \"string\",\n  \"needs_more_info\": \"boolean\",\n  \"additional_info\": \"string\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "12c9c9e9-9d62-4f69-83fb-ad4f16947201",
      "name": "计算器",
      "type": "@n8n/n8n-nodes-langchain.toolCalculator",
      "position": [
        -32,
        160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "54205d4e-0f6c-4f54-acb0-4f98a5d2b326",
      "name": "收到通知",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        -384,
        -64
      ],
      "parameters": {
        "options": {},
        "postProcessAction": "nothing"
      },
      "typeVersion": 2.1
    },
    {
      "id": "3a212390-ff8a-4d0b-8db1-7290a5a348fa",
      "name": "LLM 模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -160,
        160
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f043a10a-ec90-4702-82fa-344ff68951be",
      "name": "检查是否需要更多信息",
      "type": "n8n-nodes-base.if",
      "position": [
        304,
        -64
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.output.needs_more_info }}",
              "value2": "true"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "252ae5b4-7342-41e1-861d-d9f091e391f2",
      "name": "计算等待时间",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        -64
      ],
      "parameters": {
        "jsCode": "// === Parse email received date ===\nconst emailReceivedStr = $('Notification received').first().json.date; // e.g., \"Tue, 28 Oct 2025 22:34:56 +0200\"\nconst emailReceived = new Date(emailReceivedStr);\n\n// === Parse meeting date and time from Output Parser ===\nconst meetingDateStr = $input.first().json.output.meeting_date; // e.g., \"2025-10-29\"\nconst meetingTimeStr = $input.first().json.output.meeting_time; // e.g., \"16:00\"\n\n// === Combine meeting date and time with EET offset (+02:00) ===\nconst meetingDateTime = new Date(`${meetingDateStr}T${meetingTimeStr}:00+02:00`);\n\n// === Calculate difference in hours between meeting and email received ===\nconst diffHrs = (meetingDateTime - emailReceived) / (1000 * 60 * 60);\n\n// === Prepare wait times for reminders ===\nconst waitOutput = {\n    wait_24h: 0, // Reminder 24h before meeting\n    wait_1h: 0   // Reminder 1h before meeting\n};\n\n// If the difference is more than 24h, calculate 24h reminder\nif (diffHrs > 24) {\n    waitOutput.wait_24h = Math.floor(diffHrs - 24);\n}\n\n// If the difference is less than 24h, calculate 1h reminder\nif (diffHrs < 24) {\n    waitOutput.wait_1h = Math.floor(diffHrs - 1);\n}\n\n// Ensure both fields are numbers (null replaced with 0)\nwaitOutput.wait_24h = waitOutput.wait_24h || 0;\nwaitOutput.wait_1h = waitOutput.wait_1h || 0;\n\n// === Return JSON object ===\nreturn [\n    {\n        json: waitOutput\n    }\n];\n"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "edb48348-1a46-4486-8a2c-188bb8971b00",
      "name": "发送时间",
      "type": "n8n-nodes-base.if",
      "position": [
        1056,
        -64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5029e2f0-c526-4ff9-8b51-ce763c11bcba",
              "operator": {
                "type": "number",
                "operation": "equals"
              },
              "leftValue": "={{ $json.wait_24h }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "902b64a0-ba2b-429e-af79-38327a4c6d7a",
      "name": "等待会议前1小时发送",
      "type": "n8n-nodes-base.wait",
      "position": [
        1296,
        -256
      ],
      "webhookId": "45f9ddd0-f1a2-470e-b5fb-5cee857d81f6",
      "parameters": {
        "amount": "={{ $json.wait_24h }}"
      },
      "typeVersion": 1
    },
    {
      "id": "841cafba-7dba-4fe7-adf3-57d68f00f51c",
      "name": "等待会议前24小时发送",
      "type": "n8n-nodes-base.wait",
      "position": [
        1296,
        -16
      ],
      "webhookId": "588ef178-4da2-4808-91d3-7c02aa5f7a54",
      "parameters": {
        "amount": "={{ $('Calculate Waiting Time').item.json.wait_24h }}"
      },
      "typeVersion": 1
    },
    {
      "id": "bcf10853-cb1b-43d7-b7b5-1a09ff272c08",
      "name": "等待24小时后会议前1小时发送",
      "type": "n8n-nodes-base.wait",
      "position": [
        1296,
        224
      ],
      "webhookId": "f62dfee2-8297-431e-8c39-a6585b2bb7a5",
      "parameters": {
        "amount": "={{ $('Calculate Waiting Time').item.json.wait_1h }}+{{ $('Calculate Waiting Time').item.json.wait_24h }}"
      },
      "typeVersion": 1
    },
    {
      "id": "8b82159a-c4ca-4efb-adc6-86b2df259d57",
      "name": "发送澄清请求",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        528,
        -80
      ],
      "webhookId": "74415f90-ca61-4aef-9a48-60ab3437519d",
      "parameters": {
        "text": "Hi {{$json[\"invitee_name\"]}},\\n\\nI noticed you mentioned '{{$json[\"additional_info\"]}}'. Could you please share more details before our call? This will help me tailor our session to your goals.\\n\\nLooking forward to our meeting,\\n\\n[HOST_NAME]",
        "options": {},
        "subject": "Quick question before our strategy call",
        "toEmail": "={{$json[\"invitee_email\"]}}",
        "fromEmail": "[HOST_EMAIL]"
      },
      "typeVersion": 2
    },
    {
      "id": "cff10792-a670-4e93-983e-ecc3a5e4e664",
      "name": "发送 WhatsApp 提醒",
      "type": "n8n-nodes-base.twilio",
      "position": [
        1680,
        112
      ],
      "parameters": {
        "to": "=whatsapp:={{ $('extract from email').item.json.output.phone_number.replace(/\\s+/g,'').replace('+','') }}",
        "from": "whatsapp:[TWILIO_WHATSAPP_FROM]",
        "message": "Hi {{ $('analyze email').item.json.output.invitee_name }}, just a reminder that your AI strategy call is {{ $('analyze email').item.json.output.meeting_date }} @ {{ $('analyze email').item.json.output.meeting_time }} (EET).\\nJoin via: {{ $('analyze email').item.json.output.meeting_link }}\\nLooking forward! - [HOST_NAME]",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "3701bdb4-d51e-4e4c-b252-c8f6b1abfde6",
      "name": "从邮件中提取",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -112,
        -64
      ],
      "parameters": {
        "text": "=You are an AI assistant that extracts meeting information from Calendly booking emails.\nRead the email and return a structured JSON with the following fields:\n- invitee_name\n- invitee_email\n- phone_number\n- meeting_date (format YYYY-MM-DD)\n- meeting_time (HH:mm)\n- meeting_link\n- meeting_goal\n- needs_more_info (true/false)\n- additional_info (brief summary if attendee provided extra notes)\n\nTime zone is always Eastern European Time (EET).\nKeep the output strictly in JSON format, no additional text.\nemail: {{ $json.textPlain }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2,
      "alwaysOutputData": true
    },
    {
      "id": "8493d399-3f6e-45ae-9968-45489bdb8765",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -608
      ],
      "parameters": {
        "color": 6,
        "width": 464,
        "height": 912,
        "content": "## 通过可定制的提醒和跟进减少缺席率"
      },
      "typeVersion": 1
    },
    {
      "id": "f5806527-1eff-4634-b287-4d78959054fd",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        -336
      ],
      "parameters": {
        "width": 224,
        "height": 432,
        "content": "## 收到通知"
      },
      "typeVersion": 1
    },
    {
      "id": "f0a2b1b2-7c64-469d-953a-cb1d8e79da65",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -608
      ],
      "parameters": {
        "width": 336,
        "height": 704,
        "content": "## 数据提取"
      },
      "typeVersion": 1
    },
    {
      "id": "a5323425-53b1-470d-b14a-5d6585b437a2",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        -400
      ],
      "parameters": {
        "width": 432,
        "height": 496,
        "content": "## 是否需要更多信息?"
      },
      "typeVersion": 1
    },
    {
      "id": "0e523bfa-76e5-4c6c-a190-78621e4bc791",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -400
      ],
      "parameters": {
        "height": 496,
        "content": "## 计算等待时间:"
      },
      "typeVersion": 1
    },
    {
      "id": "c8d6b1ac-4606-4186-8621-d964e4342fa4",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        992,
        -672
      ],
      "parameters": {
        "width": 464,
        "height": 1072,
        "content": "## 何时发送?"
      },
      "typeVersion": 1
    },
    {
      "id": "074fc85b-63a4-464a-98f9-d02121c40396",
      "name": "### 需要帮助?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1536,
        -672
      ],
      "parameters": {
        "width": 352,
        "height": 976,
        "content": "## 发送提醒"
      },
      "typeVersion": 1
    },
    {
      "id": "06d9170c-a147-4f43-be32-c3dd4a927a57",
      "name": "## 试试看!",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        400
      ],
      "parameters": {
        "color": 3,
        "width": 1072,
        "height": 224,
        "content": "## 要求和自定义"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false,
    "executionOrder": "v1",
    "saveExecutionProgress": true,
    "timeSavedPerExecution": 4
  },
  "versionId": "c7304cad-6675-47fd-b991-2ec8ce6de7ca",
  "connections": {
    "LLM model": {
      "ai_languageModel": [
        [
          {
            "node": "extract from email",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Calculator": {
      "ai_tool": [
        [
          {
            "node": "extract from email",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When to send": {
      "main": [
        [
          {
            "node": "Wait to send 1h before meeting",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait to send 24h before meeting",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait to send 1h before meeting after 24h",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "extract from email": {
      "main": [
        [
          {
            "node": "Check if More Info is Needed",
            "type": "main",
            "index": 0
          },
          {
            "node": "Calculate Waiting Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notification received": {
      "main": [
        [
          {
            "node": "extract from email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Waiting Time": {
      "main": [
        [
          {
            "node": "When to send",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "extract from email",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Check if More Info is Needed": {
      "main": [
        [
          {
            "node": "Send Clarification request",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Wait to send 1h before meeting": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send WhatsApp Reminder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait to send 24h before meeting": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send WhatsApp Reminder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait to send 1h before meeting after 24h": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send WhatsApp Reminder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 客户培育, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量22
分类2
节点类型11
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Razvan Bara

Razvan Bara

@amzneer

Whether you're launching your first product or scaling, I'll help you build an AI-powered, data-driven system that runs your business while you focus on strategic growth. Let's discuss how strategic optimization combined with business intelligence and custom AI agents can transform your operations and accelerate your success. Ready to scale smarter with AI and data? Let's talk.

外部链接
在 n8n.io 查看

分享此工作流