已验证访客通行证生成器
高级
这是一个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)可能需要您自行付费。
相关工作流推荐
证书生成器
使用VerifiEmail和HTMLcsstoImg生成证书并通过Gmail发送
If
Code
Gmail
+8
25 节点Jitesh Dugar
内容创作
客户入职邮件验证
使用VerifiEmail、Gmail和Slack的自动化邮件验证与入职流程
If
Code
Gmail
+6
21 节点Jitesh Dugar
内容创作
防欺诈潜在客户捕获与培育系统
通过AI评分、表格跟踪和多渠道提醒捕获和培育防欺诈潜在客户
If
Set
Code
+11
28 节点Jitesh Dugar
内容创作
已验证用户个人资料创建
通过邮件验证、PDF生成和Gmail投递创建已验证用户个人资料
If
Set
Gmail
+6
20 节点Jitesh Dugar
文档提取
活动徽章生成器
使用QR码、HTMLCSStoImage、Gmail和Google Sheets生成活动徽章
If
Code
Gmail
+5
22 节点Jitesh Dugar
文档提取
已验证产品退货指南生成器
使用邮件验证、PDF/图片生成和二维码自动化电商退货指南
Set
Code
Gmail
+10
23 节点Jitesh Dugar
内容创作
工作流信息
难度等级
高级
节点数量22
分类1
节点类型11
作者
Jitesh Dugar
@jiteshdugarAI 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 查看 →
分享此工作流