8
n8n 中文网amn8n.com

已验证访客通行证生成器

高级

这是一个Document Extraction领域的自动化工作流,包含 22 个节点。主要使用 If, Set, Code, Gmail, Slack 等节点。 使用邮件验证、通行证和 Slack 提醒自动化访客管理

前置要求
  • Google 账号和 Gmail API 凭证
  • Slack Bot Token 或 Webhook URL
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "",
  "meta": {
    "instanceId": ""
  },
  "name": "已验证访客通行证生成器",
  "tags": [],
  "nodes": [
    {
      "id": "c897caf3-b83b-46fd-9eb3-a73ea8b563a1",
      "name": "设置 - 提取表单数据",
      "type": "n8n-nodes-base.set",
      "position": [
        192,
        384
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4276ef9c-3abd-4b5b-8187-56ac307c5a13",
              "name": "visitorName",
              "type": "string",
              "value": "={{ $json.body[0]['Full Name'].first + ' ' + $json.body[0]['Full Name'].last }}"
            },
            {
              "id": "5cb740d2-679e-4fc8-a6e1-264ee34ba06e",
              "name": "firstName",
              "type": "string",
              "value": "={{ $json.body[0]['Full Name'].first }}"
            },
            {
              "id": "c99fe4bc-fdc9-4290-9e0d-429917a0606c",
              "name": "lastName",
              "type": "string",
              "value": "={{ $json.body[0]['Full Name'].last }}"
            },
            {
              "id": "2b5e9fe9-cf86-4c9f-b85b-bb0a459c632d",
              "name": "visitorEmail",
              "type": "string",
              "value": "={{ $json.body[0].Email }}"
            },
            {
              "id": "ec0336a1-0421-4a51-964d-2a85b245de0a",
              "name": "visitDate",
              "type": "string",
              "value": "={{ $json.body[0]['Visit Date '].year }}-{{ $json.body[0]['Visit Date '].month.padStart(2, '0') }}-{{ $json.body[0]['Visit Date '].day.padStart(2, '0') }}"
            },
            {
              "id": "23e49d51-97c9-4ae7-b23c-73919c657d09",
              "name": "visitDateFormatted",
              "type": "string",
              "value": "={{ $json.body[0]['Visit Date '].month }}/{{ $json.body[0]['Visit Date '].day }}/{{ $json.body[0]['Visit Date '].year }}"
            },
            {
              "id": "c89c6db2-c36e-4ead-a06f-35d1d892f367",
              "name": "purpose",
              "type": "string",
              "value": "={{ $json.body[0]['Purpose of Visit'] }}"
            },
            {
              "id": "03695cab-73b4-4434-b12f-d1e73e2ad0fd",
              "name": "company",
              "type": "string",
              "value": "={{ $json.body[0]['Company/Organization'] }}"
            },
            {
              "id": "090d4bce-785d-4197-8786-f256e90bdf1c",
              "name": " photoUrl",
              "type": "string",
              "value": "={{ $json.body[0][\"Profile Photo\"] }}"
            },
            {
              "id": "001b90de-55f0-44fc-9e76-b86a667cac1d",
              "name": " submissionId",
              "type": "string",
              "value": "={{ $now.format('yyyyMMddHHmmss') }}"
            },
            {
              "id": "72a3157b-8e06-4765-bb21-351b140c3e3e",
              "name": " timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "01532eac-8645-4137-b17e-283a31800072",
      "name": "IF - 检查邮箱有效性",
      "type": "n8n-nodes-base.if",
      "position": [
        944,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "email-valid-check",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.valid }}",
              "rightValue": "valid"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d2f63287-e0f0-41e2-bc7a-141a8fa05367",
      "name": "函数 - 生成访客ID和二维码",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        288
      ],
      "parameters": {
        "jsCode": "// Get visitor data from the Set node\nconst visitorData = $('Set - Extract Form Data').item.json;\n\n// Generate unique visitor ID\nconst timestamp = Date.now();\nconst dateStr = new Date().toISOString().split('T')[0].replace(/-/g, '');\nconst visitorId = `VIS-${dateStr}-${timestamp.toString().slice(-6)}`;\n\n// Create QR code data with all visitor information\nconst qrCodeData = JSON.stringify({\n  id: visitorId,\n  name: visitorData.visitorName,\n  email: visitorData.visitorEmail,\n  date: visitorData.visitDate,\n  purpose: visitorData.purpose,\n  company: visitorData.company,\n  timestamp: new Date().toISOString(),\n  verified: true\n});\n\n// Simple format for basic QR readers (alternative)\nconst qrCodeSimple = `VISITOR|${visitorId}|${visitorData.visitorName}|${visitorData.visitDate}|${visitorData.company}`;\n\n// Generate QR code image URL\nconst qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(qrCodeSimple)}`;\n\n// Alternative high-quality QR code API\nconst qrCodeUrlAlt = `https://quickchart.io/qr?text=${encodeURIComponent(qrCodeSimple)}&size=300&margin=2`;\n\n// Return the generated data\nreturn {\n  json: {\n    visitorId: visitorId,\n    qrCodeData: qrCodeData,\n    qrCodeSimple: qrCodeSimple,\n    qrCodeUrl: qrCodeUrl,\n    qrCodeUrlAlt: qrCodeUrlAlt,\n    generatedAt: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "d1630c9e-05c5-43ae-9370-e22a778d86d5",
      "name": "HTML/CSS转图片",
      "type": "n8n-nodes-htmlcsstoimage.htmlCssToImage",
      "position": [
        1712,
        288
      ],
      "parameters": {
        "html_content": "=<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<style>\n  * { margin: 0; padding: 0; box-sizing: border-box; }\n  body {\n    font-family: 'Segoe UI', 'Roboto', 'Arial', sans-serif;\n    background: #f5f5f5;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    min-height: 100vh;\n    padding: 20px;\n  }\n  .badge-container {\n    width: 400px;\n    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n    border-radius: 20px;\n    padding: 40px 30px;\n    box-shadow: 0 20px 60px rgba(0,0,0,0.3);\n    position: relative;\n    overflow: hidden;\n  }\n  .badge-container::before {\n    content: '';\n    position: absolute;\n    top: -50%;\n    right: -50%;\n    width: 200%;\n    height: 200%;\n    background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);\n    pointer-events: none;\n  }\n  .header {\n    text-align: center;\n    margin-bottom: 20px;\n    position: relative;\n    z-index: 1;\n  }\n  .logo {\n    width: 80px;\n    height: 80px;\n    background: white;\n    border-radius: 50%;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    margin-bottom: 10px;\n    box-shadow: 0 4px 15px rgba(0,0,0,0.2);\n  }\n  .logo-text {\n    font-size: 24px;\n    font-weight: bold;\n    color: #667eea;\n  }\n  .badge-title {\n    color: white;\n    font-size: 14px;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 300;\n  }\n  .visitor-photo-container {\n    text-align: center;\n    margin: 25px 0;\n    position: relative;\n    z-index: 1;\n  }\n  .visitor-photo {\n    width: 140px;\n    height: 140px;\n    border-radius: 50%;\n    border: 5px solid white;\n    object-fit: cover;\n    box-shadow: 0 8px 25px rgba(0,0,0,0.3);\n    background: white;\n  }\n  .verified-badge {\n    position: absolute;\n    bottom: 5px;\n    right: calc(50% - 70px);\n    background: #27ae60;\n    color: white;\n    width: 35px;\n    height: 35px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 18px;\n    border: 3px solid white;\n    box-shadow: 0 2px 10px rgba(0,0,0,0.2);\n  }\n  .visitor-name {\n    text-align: center;\n    font-size: 32px;\n    font-weight: bold;\n    color: white;\n    margin: 20px 0 10px;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    text-shadow: 0 2px 10px rgba(0,0,0,0.2);\n    position: relative;\n    z-index: 1;\n  }\n  .visitor-id {\n    text-align: center;\n    font-size: 12px;\n    color: rgba(255,255,255,0.8);\n    margin-bottom: 20px;\n    font-family: 'Courier New', monospace;\n    letter-spacing: 1px;\n    position: relative;\n    z-index: 1;\n  }\n  .details-section {\n    background: rgba(255,255,255,0.15);\n    backdrop-filter: blur(10px);\n    border-radius: 15px;\n    padding: 20px;\n    margin: 20px 0;\n    border: 1px solid rgba(255,255,255,0.2);\n    position: relative;\n    z-index: 1;\n  }\n  .detail-row {\n    display: flex;\n    align-items: center;\n    margin: 12px 0;\n    color: white;\n  }\n  .detail-icon {\n    font-size: 20px;\n    margin-right: 12px;\n    width: 25px;\n  }\n  .detail-label {\n    font-size: 11px;\n    text-transform: uppercase;\n    opacity: 0.8;\n    letter-spacing: 1px;\n    margin-bottom: 3px;\n  }\n  .detail-value {\n    font-size: 15px;\n    font-weight: 600;\n  }\n  .qr-section {\n    background: white;\n    padding: 20px;\n    border-radius: 15px;\n    text-align: center;\n    margin-top: 20px;\n    box-shadow: 0 4px 15px rgba(0,0,0,0.2);\n    position: relative;\n    z-index: 1;\n  }\n  .qr-title {\n    font-size: 12px;\n    color: #666;\n    margin-bottom: 10px;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .qr-code {\n    width: 200px;\n    height: 200px;\n    margin: 0 auto;\n  }\n  .footer {\n    text-align: center;\n    margin-top: 20px;\n    padding-top: 15px;\n    border-top: 1px solid rgba(255,255,255,0.2);\n    color: white;\n    font-size: 11px;\n    opacity: 0.9;\n    position: relative;\n    z-index: 1;\n  }\n  .status-verified {\n    display: inline-block;\n    background: #27ae60;\n    color: white;\n    padding: 4px 12px;\n    border-radius: 20px;\n    font-size: 10px;\n    font-weight: bold;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-top: 5px;\n  }\n</style>\n</head>\n<body>\n  <div class=\"badge-container\">\n    <div class=\"header\">\n      <div class=\"logo\">\n        <span class=\"logo-text\">MJ</span>\n      </div>\n      <div class=\"badge-title\">Visitor Pass</div>\n    </div>\n    \n    <div class=\"visitor-photo-container\">\n      <img src=\"{{ $('Set - Extract Form Data').item.json[' photoUrl'] }}\" class=\"visitor-photo\" alt=\"Visitor Photo\" onerror=\"this.src='https://ui-avatars.com/api/?name={{ encodeURIComponent($('Set - Extract Form Data').item.json.visitorName) }}&size=200&background=667eea&color=fff&bold=true'\">\n      <div class=\"verified-badge\">✓</div>\n    </div>\n    \n    <div class=\"visitor-name\">{{ $('Set - Extract Form Data').item.json.visitorName }}</div>\n    <div class=\"visitor-id\">ID: {{ $json.visitorId }}</div>\n    \n    <div class=\"details-section\">\n      <div class=\"detail-row\">\n        <span class=\"detail-icon\">📅</span>\n        <div>\n          <div class=\"detail-label\">Visit Date</div>\n          <div class=\"detail-value\">{{ $('Set - Extract Form Data').item.json.visitDateFormatted }}</div>\n        </div>\n      </div>\n      \n      <div class=\"detail-row\">\n        <span class=\"detail-icon\">🎯</span>\n        <div>\n          <div class=\"detail-label\">Purpose</div>\n          <div class=\"detail-value\">{{ $('Set - Extract Form Data').item.json.purpose }}</div>\n        </div>\n      </div>\n      \n      <div class=\"detail-row\">\n        <span class=\"detail-icon\">🏢</span>\n        <div>\n          <div class=\"detail-label\">Company</div>\n          <div class=\"detail-value\">{{ $('Set - Extract Form Data').item.json.company }}</div>\n        </div>\n      </div>\n    </div>\n    \n    <div class=\"qr-section\">\n      <div class=\"qr-title\">Scan for Entry</div>\n      <img src=\"{{ $json.qrCodeUrl }}\" class=\"qr-code\" alt=\"QR Code\">\n    </div>\n    \n    <div class=\"footer\">\n      <div class=\"status-verified\">✓ VERIFIED ENTRY</div>\n      <div style=\"margin-top:8px;\">MediaJade Coworking Space</div>\n      <div>{{ $('Set - Extract Form Data').item.json[' timestamp'] }}</div>\n    </div>\n  </div>\n</body>\n</html>"
      },
      "credentials": {
        "htmlcsstoimgApi": {
          "id": "YOUR HTMLCSSTOIMG API ID",
          "name": "Htmlcsstoimg API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "24b92189-7f95-46a8-a65b-426070b99316",
      "name": "发送消息1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2208,
        0
      ],
      "webhookId": "",
      "parameters": {
        "sendTo": "={{ $('Set - Extract Form Data').item.json.visitorEmail }}",
        "message": "=<!DOCTYPE html>\n<html>\n<head>\n<style>\n  body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 0; }\n  .email-container { max-width: 600px; margin: 0 auto; background: #ffffff; }\n  .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px 20px; text-align: center; }\n  .header h1 { margin: 0; font-size: 28px; }\n  .header p { margin: 10px 0 0; opacity: 0.9; }\n  .content { padding: 40px 30px; }\n  .badge-preview { text-align: center; margin: 30px 0; }\n  .badge-preview img { max-width: 100%; height: auto; border-radius: 10px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); }\n  .info-box { background: #f8f9fa; border-left: 4px solid #667eea; padding: 20px; margin: 25px 0; border-radius: 5px; }\n  .info-box h3 { margin: 0 0 15px; color: #667eea; font-size: 18px; }\n  .info-row { display: flex; margin: 10px 0; }\n  .info-label { font-weight: bold; min-width: 120px; color: #555; }\n  .info-value { color: #333; }\n  .instructions { background: #fff3cd; border: 1px solid #ffc107; padding: 20px; border-radius: 5px; margin: 25px 0; }\n  .instructions h3 { margin: 0 0 10px; color: #856404; }\n  .button { display: inline-block; padding: 15px 40px; background: #667eea; color: white; text-decoration: none; border-radius: 5px; margin: 20px 0; font-weight: bold; }\n  .footer { background: #f1f3f5; padding: 30px; text-align: center; color: #666; font-size: 14px; }\n</style>\n</head>\n<body>\n<div class=\"email-container\">\n  <div class=\"header\">\n    <h1>✅ Visitor Pass Verified & Issued</h1>\n    <p>Welcome to MediaJade Coworking Space</p>\n  </div>\n  \n  <div class=\"content\">\n    <p>Dear <strong>{{ $('Set - Extract Form Data').item.json.visitorName }}</strong>,</p>\n    \n    <p>Great news! Your visitor pass has been verified and is now ready to use. We look forward to welcoming you to our space.</p>\n    \n    <div class=\"info-box\">\n      <h3>📋 Your Visit Details</h3>\n      <div class=\"info-row\">\n        <span class=\"info-label\">Visitor ID:</span>\n        <span class=\"info-value\">{{ $('Function - Generate Visitor ID & QR').item.json.visitorId }}</span>\n      </div>\n      <div class=\"info-row\">\n        <span class=\"info-label\">Visit Date:</span>\n        <span class=\"info-value\">{{ $('Set - Extract Form Data').item.json.visitDateFormatted }}</span>\n      </div>\n      <div class=\"info-row\">\n        <span class=\"info-label\">Purpose:</span>\n        <span class=\"info-value\">{{ $('Set - Extract Form Data').item.json.purpose }}</span>\n      </div>\n      <div class=\"info-row\">\n        <span class=\"info-label\">Company:</span>\n        <span class=\"info-value\">{{ $('Set - Extract Form Data').item.json.company }}</span>\n      </div>\n    </div>\n    \n    <div class=\"badge-preview\">\n      <h3>Your Digital Visitor Pass</h3>\n      <img src=\"{{ $json.image_url }}\" alt=\"Your Visitor Pass\">\n      <p style=\"color: #666; font-size: 14px; margin-top: 10px;\">Please save this pass or show this email at reception</p>\n    </div>\n    \n    <div class=\"instructions\">\n      <h3>📱 How to Use Your Pass</h3>\n      <ol style=\"margin: 10px 0 0 20px; padding: 0;\">\n        <li><strong>Digital:</strong> Show this email on your phone at reception</li>\n        <li><strong>QR Code:</strong> Our staff will scan your QR code for instant verification</li>\n        <li><strong>ID Check:</strong> Please bring a valid photo ID for security purposes</li>\n        <li><strong>Arrival:</strong> Check in at the reception desk on arrival</li>\n      </ol>\n    </div>\n    \n    <div style=\"background: #e8f4fd; padding: 20px; border-radius: 5px; margin: 25px 0;\">\n      <h3 style=\"color: #0066cc; margin: 0 0 10px;\">🏢 Location & Arrival</h3>\n      <p style=\"margin: 5px 0;\"><strong>Address:</strong> MediaJade Coworking, 123 Business Street</p>\n      <p style=\"margin: 5px 0;\"><strong>Reception Hours:</strong> Monday-Friday, 8:00 AM - 6:00 PM</p>\n      <p style=\"margin: 5px 0;\"><strong>Contact:</strong> +1 (555) 123-4567</p>\n    </div>\n    \n    <p><strong>Need to make changes?</strong> Please contact our reception team at least 24 hours before your visit.</p>\n    \n    <p style=\"margin-top: 30px;\">We're excited to host you!</p>\n    \n    <p>Best regards,<br>\n    <strong>Reception Team</strong><br>\n    MediaJade Coworking Space</p>\n  </div>\n  \n  <div class=\"footer\">\n    <p><strong>Contact Us</strong></p>\n    <p>📧 reception@mediajade.com | 📞 +1 (555) 123-4567</p>\n    <p style=\"margin-top: 20px; font-size: 12px;\">This is an automated message generated by our visitor management system.</p>\n  </div>\n</div>\n</body>\n</html>",
        "options": {},
        "subject": "=🎫 Your Verified Visitor Pass - {{ $('Set - Extract Form Data').item.json.visitDateFormatted }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "YOUR GMAIL OAUTH2 ID",
          "name": "Gmail OAuth2"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8b759709-dbea-4680-932d-4bffd248e037",
      "name": "Slack - 通知安全团队",
      "type": "n8n-nodes-base.slack",
      "position": [
        2320,
        288
      ],
      "webhookId": "",
      "parameters": {
        "text": "=🟢 *New Verified Visitor*\n\n👤 *Name:* {{ $('Set - Extract Form Data').item.json.visitorName }}\n📧 *Email:* {{ $('Set - Extract Form Data').item.json.visitorEmail }}\n📅 *Visit Date:* {{ $('Set - Extract Form Data').item.json.visitDate }}\n🎯 *Purpose:* {{ $('Set - Extract Form Data').item.json.purpose }}\n🏢 *Company:* {{ $('Set - Extract Form Data').item.json.company }}\n🆔 *Visitor ID:* {{ $('Function - Generate Visitor ID & QR').item.json.visitorId }}\n✅ *Status:* Email Verified & Pass Sent\n⏰ *Submitted:* {{ $('Set - Extract Form Data').item.json[' timestamp'] }}\n\n📎 Badge Image: {{ $json.image_url }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR SLACK CHANNEL ID",
          "cachedResultName": "YOUR SLACK CHANNEL NAME"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "id": "YOUR SLACK API ID",
          "name": "Slack API"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "8f13df6c-3418-464d-b333-4ff900c2ebc0",
      "name": "Google Sheets - 记录访客",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2224,
        560
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Set - Extract Form Data').item.json.visitorEmail }}",
            "Status": "Pass Sent",
            "Company": "={{ $('Set - Extract Form Data').item.json.company }}",
            "Purpose": "={{ $('Set - Extract Form Data').item.json.purpose }}",
            "Full Name": "={{ $('Set - Extract Form Data').item.json.visitorName }}",
            "Timestamp": "={{ $('Set - Extract Form Data').item.json[\" timestamp\"] }}",
            "Visit Date": "={{ $('Set - Extract Form Data').item.json.visitDate }}",
            "Visitor ID": "={{ $('Function - Generate Visitor ID & QR').item.json.visitorId }}",
            "Email Verified": "Yes",
            "Badge Image URL": "={{ $json.image_url }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Visitor ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Visitor ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Visit Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Visit Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Purpose",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Purpose",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Verified",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Verified",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Badge Image URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Badge Image URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR GOOGLE SHEETS DOCUMENT ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR GOOGLE SHEETS DOCUMENT ID/edit?usp=drivesdk",
          "cachedResultName": "Workshop Registrations & Certificates"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YOUR GOOGLE SHEETS OAUTH2 ID",
          "name": "Google Sheets OAuth2"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "0df8d27a-411a-4e4b-be7b-d40ea8c78691",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        592,
        384
      ],
      "parameters": {
        "email": "={{ $json.visitorEmail }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "id": "YOUR VERIFIEMAIL API ID",
          "name": "VerifiEmail API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d6dd5889-309a-4f37-a55a-b4c80425baa2",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -224,
        384
      ],
      "webhookId": "",
      "parameters": {
        "path": "visitor-registration",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "31b44373-0af2-46d4-8b0b-6fd85824bd12",
      "name": "停止并报错",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1360,
        528
      ],
      "parameters": {
        "errorMessage": "Invalid Email"
      },
      "typeVersion": 1
    },
    {
      "id": "922d05d1-426d-426b-918c-36065bc8b2b1",
      "name": "Sticky Note - 概览",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        -736
      ],
      "parameters": {
        "color": 4,
        "width": 347,
        "height": 368,
        "content": "## 🎯 工作流概览"
      },
      "typeVersion": 1
    },
    {
      "id": "b3f56e5d-a276-4c20-aff6-f2ffe8cfd524",
      "name": "便签 - 凭据",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -752,
        -352
      ],
      "parameters": {
        "color": 5,
        "width": 443,
        "height": 660,
        "content": "## 🔐 凭据设置指南"
      },
      "typeVersion": 1
    },
    {
      "id": "b24936a8-334b-4035-a367-fdc51a26e2b7",
      "name": "便签 - Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        -16
      ],
      "parameters": {
        "color": 6,
        "width": 367,
        "height": 532,
        "content": "## 📥 步骤1:WEBHOOK触发器"
      },
      "typeVersion": 1
    },
    {
      "id": "e0297444-b797-411b-9df5-b2c2ad9fe2dd",
      "name": "便签 - 设置提取",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        112
      ],
      "parameters": {
        "color": 6,
        "width": 383,
        "height": 424,
        "content": "## 🔄 步骤2:提取和组织数据"
      },
      "typeVersion": 1
    },
    {
      "id": "a6716cea-e840-42d5-a632-860890132bab",
      "name": "便签 - Verifi邮箱",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        112
      ],
      "parameters": {
        "color": 6,
        "width": 335,
        "height": 416,
        "content": "## ✅ 步骤3:邮箱验证"
      },
      "typeVersion": 1
    },
    {
      "id": "c1760877-16f2-4416-ba40-89288fd91ff1",
      "name": "便签 - IF节点",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        144
      ],
      "parameters": {
        "color": 6,
        "width": 383,
        "height": 384,
        "content": "## 🔀 步骤4:验证决策点"
      },
      "typeVersion": 1
    },
    {
      "id": "373d6fcc-490c-4625-9606-4008585158af",
      "name": "便签 - 函数",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        48
      ],
      "parameters": {
        "color": 6,
        "width": 383,
        "height": 396,
        "content": "## 🆔 步骤5:生成访客ID和二维码"
      },
      "typeVersion": 1
    },
    {
      "id": "7a69ca42-4c7a-4d27-a58a-a59ad8ebbab1",
      "name": "便签 - HTML转图片",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1648,
        -160
      ],
      "parameters": {
        "color": 6,
        "width": 367,
        "height": 596,
        "content": "## 🎨 步骤6:创建访客徽章图片"
      },
      "typeVersion": 1
    },
    {
      "id": "ae0d79a7-33ae-457b-81c0-bd3658dbd972",
      "name": "便签 - 邮箱",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        -240
      ],
      "parameters": {
        "color": 6,
        "width": 383,
        "height": 388,
        "content": "## 📧 步骤7:邮件发送访客通行证"
      },
      "typeVersion": 1
    },
    {
      "id": "0d44e4e6-add8-4e61-ac3a-aa0e6e1b0a6b",
      "name": "便签 - Slack",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        192
      ],
      "parameters": {
        "color": 6,
        "width": 479,
        "height": 308,
        "content": "## 💬 步骤8:SLACK安全提醒"
      },
      "typeVersion": 1
    },
    {
      "id": "70256371-d8a1-4e0c-9118-30edcb8887ad",
      "name": "便签 - 表格",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        544
      ],
      "parameters": {
        "color": 6,
        "width": 351,
        "height": 712,
        "content": "## 📊 步骤9:记录到GOOGLE SHEETS"
      },
      "typeVersion": 1
    },
    {
      "id": "0d03ee1f-d600-40c3-b34d-e7be412996f8",
      "name": "便签 - 停止错误",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        512
      ],
      "parameters": {
        "color": 6,
        "width": 335,
        "height": 448,
        "content": "## ❌ 步骤4B:无效邮箱处理"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Set - Extract Form Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verifi Email": {
      "main": [
        [
          {
            "node": "IF - Check Email Valid",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML/CSS to Image": {
      "main": [
        [
          {
            "node": "Send a message1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack - Notify Security Team",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets - Log Visitor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Check Email Valid": {
      "main": [
        [
          {
            "node": "Function - Generate Visitor ID & QR",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop and Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set - Extract Form Data": {
      "main": [
        [
          {
            "node": "Verifi Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function - Generate Visitor ID & QR": {
      "main": [
        [
          {
            "node": "HTML/CSS to Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 文档提取

需要付费吗?

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

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

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

作者
Jitesh Dugar

Jitesh Dugar

@jiteshdugar

AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.

外部链接
在 n8n.io 查看

分享此工作流