イベントバッジジェネレーター
上級
これはDocument Extraction分野の自動化ワークフローで、22個のノードを含みます。主にIf, Code, Gmail, Webhook, HttpRequestなどのノードを使用。 QRコード、HTMLCSStoImage、Gmail、Google Sheetsを使用したイベントバッジ生成
前提条件
- •Googleアカウント + Gmail API認証情報
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Sheets API認証情報
カテゴリー
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "",
"meta": {
"instanceId": "",
"templateCredsSetupCompleted": false
},
"name": "Event Badge Generator",
"tags": [
{
"id": "event-registration",
"name": "Event Registration"
},
{
"id": "conference",
"name": "Conference"
},
{
"id": "automation",
"name": "Automation"
},
{
"id": "productivity",
"name": "Productivity"
}
],
"nodes": [
{
"id": "4c1e6d44-4f5e-4f4e-a6ad-038860f9e11f",
"name": "画像URL抽出",
"type": "n8n-nodes-base.httpRequest",
"position": [
2912,
-112
],
"parameters": {
"url": "={{ $json['Badge URL'] }}",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "badge"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "f875b20b-393e-470c-8bf9-3c4cdfad8fb7",
"name": "バッジデザイン",
"type": "n8n-nodes-htmlcsstoimage.htmlCssToImage",
"position": [
2048,
-16
],
"parameters": {
"html_content": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n \n body {\n font-family: 'Arial', sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n background: transparent;\n padding: 20px;\n }\n \n .badge-container {\n width: 400px;\n height: 650px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 20px;\n padding: 25px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n position: relative;\n overflow: hidden;\n }\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 }\n \n .badge-header {\n text-align: center;\n margin-bottom: 20px;\n position: relative;\n z-index: 1;\n }\n \n .event-logo {\n width: 70px;\n height: 70px;\n background: white;\n border-radius: 50%;\n margin: 0 auto 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 32px;\n font-weight: bold;\n color: #667eea;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);\n }\n \n .event-title {\n font-size: 22px;\n font-weight: bold;\n color: white;\n text-transform: uppercase;\n letter-spacing: 2px;\n margin-bottom: 5px;\n }\n \n .event-date {\n font-size: 13px;\n color: rgba(255, 255, 255, 0.9);\n font-weight: 500;\n }\n \n .badge-body {\n background: white;\n border-radius: 15px;\n padding: 25px 20px;\n text-align: center;\n position: relative;\n z-index: 1;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);\n }\n \n .attendee-photo {\n width: 100px;\n height: 100px;\n border-radius: 50%;\n margin: 0 auto 15px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 42px;\n color: white;\n font-weight: bold;\n border: 4px solid #f0f0f0;\n }\n \n .attendee-name {\n font-size: 26px;\n font-weight: bold;\n color: #2d3748;\n margin-bottom: 6px;\n line-height: 1.2;\n }\n \n .attendee-role {\n font-size: 15px;\n color: #718096;\n margin-bottom: 18px;\n font-weight: 500;\n }\n \n .qr-code-container {\n margin: 20px auto 12px;\n padding: 12px;\n background: #f7fafc;\n border-radius: 10px;\n display: inline-block;\n }\n \n .qr-code-container img {\n width: 140px;\n height: 140px;\n display: block;\n }\n \n .attendee-id {\n font-size: 11px;\n color: #a0aec0;\n font-weight: 600;\n letter-spacing: 1px;\n margin-top: 8px;\n }\n \n .badge-footer {\n text-align: center;\n margin-top: 18px;\n position: relative;\n z-index: 1;\n }\n \n .badge-footer p {\n font-size: 10px;\n color: rgba(255, 255, 255, 0.85);\n line-height: 1.4;\n }\n </style>\n</head>\n<body>\n <div class=\"badge-container\">\n <div class=\"badge-header\">\n <div class=\"event-logo\">{{ $json.initials }}</div>\n <div class=\"event-title\">{{ $json.event }}</div>\n <div class=\"event-date\">{{ $json.eventDate }}</div>\n </div>\n \n <div class=\"badge-body\">\n <div class=\"attendee-photo\">{{ $json.initials }}</div>\n <div class=\"attendee-name\">{{ $json.name }}</div>\n <div class=\"attendee-role\">{{ $json.role }}</div>\n \n <div class=\"qr-code-container\">\n <img src=\"{{ $json.qrCodeUrl }}\" alt=\"QR Code\">\n </div>\n \n <div class=\"attendee-id\">ID: {{ $json.attendeeId }}</div>\n </div>\n \n <div class=\"badge-footer\">\n <p>Please present this badge at the entrance<br>Valid for event duration only</p>\n </div>\n </div>\n</body>\n</html>"
},
"credentials": {
"htmlcsstoimgApi": {
"id": "YOUR_Htmlcsstoimg_API_Key",
"name": "Htmlcsstoimg API"
}
},
"typeVersion": 1
},
{
"id": "d6843d6d-6411-4183-94b0-338bd2e51324",
"name": "付箋10",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-304
],
"parameters": {
"color": 7,
"width": 464,
"height": 500,
"content": "## SETUP CREDENTIALS FIRST\n\n**🔐 HTMLCSStoImage API**\n• Sign up: https://htmlcsstoimg.com\n• Get API credentials from dashboard\n• Add to n8n: Basic Auth credential\n\n**📧 Gmail OAuth2**\n• Select: \"Gmail OAuth2 API\"\n• Connect your Gmail account\n• Grant send permissions\n\n**📊 Google Sheets API** \n• Select: \"Google Sheets OAuth2\"\n• Authenticate with Google\n• Grant read/write access\n\n**Test each credential before running the workflow**\n\n\n**💡 Pro Tips:**\n• Use a dedicated Gmail for automation\n• Create a new Sheet for each event\n• Monitor API rate limits"
},
"typeVersion": 1
},
{
"id": "6bdd8ff7-3561-439c-afb9-cfa4ed7828dd",
"name": "付箋9",
"type": "n8n-nodes-base.stickyNote",
"position": [
2624,
112
],
"parameters": {
"color": 7,
"width": 260,
"height": 568,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n## ERROR HANDLING\n\nTriggered when badge generation fails\n\nSends admin alert with:\n- Full attendee details\n- Attendee ID\n- Timestamp\n- Possible failure causes\n- Action items\n\nTo: admin@example.com\n\nNext steps:\n- Check API status\n- Review logs\n- Retry manually"
},
"typeVersion": 1
},
{
"id": "116af5fb-934d-435d-8038-bffd493a2f37",
"name": "付箋8",
"type": "n8n-nodes-base.stickyNote",
"position": [
3136,
-416
],
"parameters": {
"color": 7,
"width": 372,
"height": 468,
"content": "## STEP 9: SEND BADGE EMAIL\n\nSends via Gmail with:\n- Personalized HTML email\n- Badge download link\n- Event instructions\n- Check-in details\n- Contact information\n\nTo: Attendee email\nAttachment: Badge PNG from URL\n\nContinue on fail: ON"
},
"typeVersion": 1
},
{
"id": "ee261506-4c6f-4f6a-a30d-cb455be0ddb1",
"name": "付箋7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
-368
],
"parameters": {
"color": 7,
"height": 396,
"content": "## STEP 8: EXTRACT BADGE URL\n\nExtracts image URL from API response\n\nReturns clean data:\n- binary file named badge\n\nUsed for: Logging & email"
},
"typeVersion": 1
},
{
"id": "7c784e20-dd16-4f47-94cc-7c905603ce3e",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2256,
-384
],
"parameters": {
"color": 7,
"width": 272,
"height": 524,
"content": "## STEP 6: CONDITIONAL LOGIC\n\nCONDITIONAL CHECK\n\nVerifies badge generation success\n\nCondition: {{ $json.image_url }} is not empty\n\nTRUE (Green):\n→ Badge generated successfully\n→ Continue to email delivery\n\nFALSE (Red):\n→ Generation failed\n→ Send error alert to admin"
},
"typeVersion": 1
},
{
"id": "e44f9c73-c536-4304-8f18-3a5efea15d8c",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1984,
-368
],
"parameters": {
"color": 7,
"height": 500,
"content": "## STEP 5: BUILD HTML BADGE\n\nUses HTMLCSStoImage AP\n\nSends:\n- Full HTML code\n- Viewport: 400x680px\n\nReturns: Image URL\n\nAuth: Basic Auth with API credentials\n\nContinue on fail: ON"
},
"typeVersion": 1
},
{
"id": "f450caab-0b6b-42ce-828e-d1bcffb4ef28",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-256
],
"parameters": {
"color": 7,
"width": 288,
"height": 368,
"content": "## STEP 4: PREPARE QR URL\n\nConverts binary QR to accessible URL\n\nCreates URL:\nhttps://api.qrserver.com/...?data=ATD-XXX\n\nUsed for: Embedding in HTML badge template"
},
"typeVersion": 1
},
{
"id": "ae2d3024-f48b-4fc9-844b-c8fe61350c64",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1424,
-352
],
"parameters": {
"color": 7,
"height": 492,
"content": "## STEP 3: QR CODE GENERATION\n\nCreates QR code via qrserver.com API\n\nParameters:\n- Size: 300x300px\n- Data: Attendee ID\n- Format: PNG image\n\nOutput: Binary QR code file\n\nContinue on fail: ON"
},
"typeVersion": 1
},
{
"id": "aedbf094-b3b9-4230-ac41-9f516fe5ad5d",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1136,
-400
],
"parameters": {
"color": 7,
"width": 256,
"height": 528,
"content": "## STEP 2: DATA VALIDATION\n\nOperations:\n✓ Validates email format\n✓ Checks name exists\n✓ Generates unique attendee ID\n✓ Capitalizes name properly\n✓ Extracts initials (2 letters)\n✓ Normalizes email to lowercase\n✓ Sets default event/role if missing\n✓ Adds timestamp\n\nThrows error if:\n- Email invalid\n- Name missing"
},
"typeVersion": 1
},
{
"id": "2d4702e5-361d-4259-b590-2566225db67e",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
-304
],
"parameters": {
"color": 7,
"width": 368,
"height": 420,
"content": "## STEP 1: WEBHOOK TRIGGER\n\n**Test with cURL:**\n```bash\ncurl -X POST https://your-n8n.com/webhook/admissio\n-H \"Content-Type: application/json\" \\\n-d '{\n \"name\": \"Jane Smith\",\n \"email\": \"your-email@gmail.com\",\n \"event\": \"TechCon 2025\",\n \"role\": \"VIP Speaker\"\n}'\n```"
},
"typeVersion": 1
},
{
"id": "9af27c62-c599-4ace-88b5-2f59ade4770e",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
-960
],
"parameters": {
"color": 7,
"width": 380,
"height": 588,
"content": "## WORKFLOW OVERVIEW\n\n**Purpose:** Automated event badge generation system\n\n**Processing Time:** 5-8 seconds end-to-end\n\n**Workflow Steps:**\n1. Receive registration data via webhook (POST)\n2. Validate email and format inputs\n3. Generate unique QR code with attendee ID\n4. Create custom HTML badge design\n5. Convert HTML to downloadable PNG\n6. Log all data to Google Sheets\n7. Send badge via email with instructions\n\n**Success Path:**\n✅ Valid data → Badge generated → Email sent\n\n**Error Path:**\n❌ Invalid data → Workflow stopped → Error logged\n\n**Perfect For:**\n• Universities & colleges\n• Corporate events\n• Conferences & seminars\n• Training programs"
},
"typeVersion": 1
},
{
"id": "10d6aab4-3b05-45e7-a9f2-a724bc4788f6",
"name": "エラー通知送信",
"type": "n8n-nodes-base.gmail",
"position": [
2688,
128
],
"webhookId": "",
"parameters": {
"sendTo": "admin@example.com",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n .container { max-width: 600px; margin: 0 auto; padding: 20px; }\n .alert-header { background: #dc3545; color: white; padding: 20px; text-align: center; border-radius: 8px 8px 0 0; }\n .alert-content { background: #f8d7da; padding: 20px; border: 1px solid #f5c6cb; border-radius: 0 0 8px 8px; }\n .info-box { background: white; padding: 15px; border-radius: 5px; margin: 15px 0; }\n .info-row { padding: 8px 0; border-bottom: 1px solid #dee2e6; }\n .label { font-weight: bold; color: #495057; }\n .value { color: #212529; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"alert-header\">\n <h2>⚠️ Badge Generation Failed</h2>\n </div>\n \n <div class=\"alert-content\">\n <p><strong>A badge generation request has failed.</strong></p>\n \n <div class=\"info-box\">\n <h3>Attendee Details:</h3>\n <div class=\"info-row\">\n <span class=\"label\">Name:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.name }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"label\">Email:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.email }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"label\">Event:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.event }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"label\">Role:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.role }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"label\">Attendee ID:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.attendeeId }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"label\">Timestamp:</span>\n <span class=\"value\">{{ $('Validate & Sanitize').item.json.timestamp }}</span>\n </div>\n </div>\n \n <h3>Possible Causes:</h3>\n <ul>\n <li>HTMLCSStoImage API is down or rate limited</li>\n <li>API credentials expired or invalid</li>\n <li>Network connectivity issues</li>\n <li>Invalid HTML in badge template</li>\n </ul>\n \n <h3>Action Required:</h3>\n <ol>\n <li>Check n8n workflow execution logs</li>\n <li>Verify HTMLCSStoImage API status</li>\n <li>Manually regenerate badge for this attendee</li>\n <li>Contact attendee if urgent</li>\n </ol>\n \n <p><strong>Workflow Name:</strong> Event Badge Generator</p>\n <p><strong>n8n Instance:</strong> n8n.mediajade.com</p>\n </div>\n </div>\n</body>\n</html>",
"options": {},
"subject": "⚠️ Badge Generation Failed"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAIL_OAUTH2_KEY",
"name": "Gmail OAuth2"
}
},
"typeVersion": 2.1
},
{
"id": "f1a3b78b-c10f-4595-9339-963b6f298d24",
"name": "バッジメール送信",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
3216,
-112
],
"webhookId": "",
"parameters": {
"sendTo": "={{ $json.Email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }\n .container { max-width: 600px; margin: 0 auto; padding: 20px; }\n .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }\n .content { background: #f7fafc; padding: 30px; }\n .badge-info { background: white; padding: 20px; border-radius: 10px; margin: 20px 0; }\n .badge-info h3 { color: #667eea; margin-bottom: 15px; }\n .info-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #e2e8f0; }\n .info-label { font-weight: bold; color: #4a5568; }\n .info-value { color: #2d3748; }\n .button { display: inline-block; background: #667eea; color: white; padding: 15px 30px; text-decoration: none; border-radius: 8px; margin: 20px 0; font-weight: bold; }\n .instructions { background: #fff3cd; padding: 15px; border-radius: 8px; border-left: 4px solid #ffc107; margin: 20px 0; }\n .footer { text-align: center; padding: 20px; color: #718096; font-size: 14px; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h1>🎉 Your Event Badge is Ready!</h1>\n <p>Welcome to {{ $json.Event }}</p>\n </div>\n \n <div class=\"content\">\n <p>Hello <strong>{{ $json.Name }}</strong>,</p>\n \n <p>Great news! Your personalized event badge for <strong>{{ $json.Event }}</strong> has been generated successfully.</p>\n \n <div class=\"badge-info\">\n <h3>📋 Your Badge Details</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Name:</span>\n <span class=\"info-value\">{{ $json.Name }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Role:</span>\n <span class=\"info-value\">{{ $json.Role }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Attendee ID:</span>\n <span class=\"info-value\">{{ $json['Attendee ID'] }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Event:</span>\n <span class=\"info-value\">{{ $json.Event }}</span>\n </div>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"{{ $json['Badge URL'] }}\" class=\"button\">📥 Download Your Badge</a>\n </div>\n \n <div class=\"instructions\">\n <h4>📌 Important Instructions:</h4>\n <ul>\n <li><strong>Download</strong> your badge using the button above</li>\n <li><strong>Print</strong> it in color on standard paper OR save it on your phone</li>\n <li><strong>Present</strong> your badge at the event entrance for check-in</li>\n <li>The QR code on your badge will be scanned for quick entry</li>\n </ul>\n </div>\n \n <p><strong>Event Details:</strong></p>\n <ul>\n <li>📅 <strong>Date:</strong> October 25-27, 2025</li>\n <li>📍 <strong>Venue:</strong> Convention Center</li>\n <li>🕐 <strong>Check-in:</strong> Opens 8:00 AM daily</li>\n </ul>\n \n <p>If you have any questions or need assistance, please reply to this email or contact our support team.</p>\n \n <p>We look forward to seeing you at the event! 🎊</p>\n \n <p>Best regards,<br>\n <strong>TechCon 2025 Team</strong></p>\n </div>\n \n <div class=\"footer\">\n <p>This is an automated email. Please do not reply to this message.</p>\n <p>© 2025 TechCon. All rights reserved.</p>\n </div>\n </div>\n</body>\n</html>",
"options": {
"attachmentsUi": {
"attachmentsBinary": [
{
"property": "badge"
}
]
}
},
"subject": "=Your Event Badge for {{ $json.Event }} 🎫"
},
"credentials": {
"gmailOAuth2": {
"id": "YOUR_GMAIL_OAUTH2_KEY",
"name": "Gmail OAuth2"
}
},
"typeVersion": 2.1
},
{
"id": "160ee018-7b7f-40ef-b448-f453e5ffadb2",
"name": "シートに記録",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
2672,
-112
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Prepare QR URL').item.json.name }}",
"Role": "={{ $('Prepare QR URL').item.json.role }}",
"Email": "={{ $('Prepare QR URL').item.json.email }}",
"Event": "={{ $('Prepare QR URL').item.json.event }}",
"Status": "Sent",
"Badge URL": "={{ $json.image_url }}",
"Timestamp": "={{ $('Prepare QR URL').item.json.timestamp }}",
"Attendee ID": "={{ $('Prepare QR URL').item.json.attendeeId }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event",
"type": "string",
"display": true,
"required": false,
"displayName": "Event",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Role",
"type": "string",
"display": true,
"required": false,
"displayName": "Role",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attendee ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Attendee ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Badge URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Badge URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"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",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID/edit#gid=0",
"cachedResultName": "BadgesLog"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEETS_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID/edit?usp=drivesdk",
"cachedResultName": "Event Badge Tracker"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "YOUR_GOOGLE_SHEETS_OAUTH2_KEY",
"name": "Google Sheets OAuth2"
}
},
"typeVersion": 4.4
},
{
"id": "b06c61ed-c72a-434f-8963-8a9d971553e1",
"name": "バッジ生成済み?",
"type": "n8n-nodes-base.if",
"position": [
2352,
-16
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.image_url }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "046da474-268b-4274-9741-6c73fa1cc462",
"name": "QR URL準備",
"type": "n8n-nodes-base.code",
"position": [
1760,
-16
],
"parameters": {
"jsCode": "// Get attendee data from previous node\nconst data = $input.first().json;\n\n// Create QR code URL that can be used in HTML\nconst qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(data.attendeeId)}`;\n\n// Return all data with QR URL\nreturn {\n name: data.name,\n email: data.email,\n event: data.event,\n role: data.role,\n attendeeId: data.attendeeId,\n initials: data.initials,\n eventDate: data.eventDate,\n timestamp: data.timestamp,\n qrCodeUrl: qrCodeUrl\n};"
},
"typeVersion": 2
},
{
"id": "ae88dca5-7d9d-47cc-a26c-99b1fd937476",
"name": "QRコード生成",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1504,
-16
],
"parameters": {
"url": "https://api.qrserver.com/v1/create-qr-code/",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "qrcode"
}
}
},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "size",
"value": "300x300"
},
{
"name": "data",
"value": "={{ $json.attendeeId }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "fbd2eb39-1544-4697-8a48-21439fd1eddc",
"name": "検証&サニタイズ",
"type": "n8n-nodes-base.code",
"position": [
1232,
-16
],
"parameters": {
"jsCode": "// Get input data from webhook body\nconst webhookData = $input.item.json.body;\n\n// Validation function\nfunction validateEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n// Extract and validate data\nconst name = webhookData.name?.trim() || '';\nconst email = webhookData.email?.trim().toLowerCase() || '';\nconst eventTitle = webhookData.event || 'TechCon 2025';\nconst role = webhookData.role || 'Attendee';\n\n// Check for required fields\nif (!name) {\n throw new Error('Name is required');\n}\n\nif (!email || !validateEmail(email)) {\n throw new Error('Valid email is required');\n}\n\n// Generate unique attendee ID\nconst attendeeId = 'ATD-' + Date.now().toString(36).toUpperCase() + '-' + Math.random().toString(36).substr(2, 4).toUpperCase();\n\n// Capitalize name properly\nconst capitalizedName = name\n .toLowerCase()\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n// Get initials for badge\nconst initials = capitalizedName\n .split(' ')\n .map(word => word[0])\n .join('')\n .toUpperCase()\n .substr(0, 2);\n\n// Current date for event\nconst eventDate = 'October 25-27, 2025';\n\n// Return sanitized data\nreturn {\n name: capitalizedName,\n email: email,\n event: eventTitle,\n role: role,\n attendeeId: attendeeId,\n initials: initials,\n eventDate: eventDate,\n timestamp: new Date().toISOString()\n};"
},
"typeVersion": 2
},
{
"id": "3855779b-e567-4b44-8ac8-18ea02328f5c",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
992,
-16
],
"webhookId": "",
"parameters": {
"path": "new-attendee",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1.1
},
{
"id": "dd40ecde-5b4c-455d-998f-06c3f8b15a23",
"name": "付箋11",
"type": "n8n-nodes-base.stickyNote",
"position": [
2576,
-448
],
"parameters": {
"color": 7,
"height": 480,
"content": "## STEP 9: LOG TO GOOGLE SHEETS\n\nAppends row to tracking sheet:\n- Name\n- Email\n- Event\n- Role\n- Attendee ID\n- Badge URL\n- Timestamp\n\nSheet: Event Badge Tracker\nContinue on fail: ON"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "",
"connections": {
"3855779b-e567-4b44-8ac8-18ea02328f5c": {
"main": [
[
{
"node": "fbd2eb39-1544-4697-8a48-21439fd1eddc",
"type": "main",
"index": 0
}
]
]
},
"f875b20b-393e-470c-8bf9-3c4cdfad8fb7": {
"main": [
[
{
"node": "b06c61ed-c72a-434f-8963-8a9d971553e1",
"type": "main",
"index": 0
}
]
]
},
"160ee018-7b7f-40ef-b448-f453e5ffadb2": {
"main": [
[
{
"node": "4c1e6d44-4f5e-4f4e-a6ad-038860f9e11f",
"type": "main",
"index": 0
}
]
]
},
"046da474-268b-4274-9741-6c73fa1cc462": {
"main": [
[
{
"node": "f875b20b-393e-470c-8bf9-3c4cdfad8fb7",
"type": "main",
"index": 0
}
]
]
},
"ae88dca5-7d9d-47cc-a26c-99b1fd937476": {
"main": [
[
{
"node": "046da474-268b-4274-9741-6c73fa1cc462",
"type": "main",
"index": 0
}
]
]
},
"4c1e6d44-4f5e-4f4e-a6ad-038860f9e11f": {
"main": [
[
{
"node": "f1a3b78b-c10f-4595-9339-963b6f298d24",
"type": "main",
"index": 0
}
]
]
},
"b06c61ed-c72a-434f-8963-8a9d971553e1": {
"main": [
[
{
"node": "160ee018-7b7f-40ef-b448-f453e5ffadb2",
"type": "main",
"index": 0
}
],
[
{
"node": "10d6aab4-3b05-45e7-a9f2-a724bc4788f6",
"type": "main",
"index": 0
}
]
]
},
"fbd2eb39-1544-4697-8a48-21439fd1eddc": {
"main": [
[
{
"node": "ae88dca5-7d9d-47cc-a26c-99b1fd937476",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 文書抽出
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
検証済みゲストパス生成ツール
メール検証、パスと Slack リマインダーを使用した訪問者管理の自動化
If
Set
Code
+
If
Set
Code
22 ノードJitesh Dugar
文書抽出
保護者の同意の自動化
メール確認、PDF生成、Google Driveを使った学校旅行の同意書自動化
If
Code
Gmail
+
If
Code
Gmail
22 ノードJitesh Dugar
文書抽出
セミナー講演者証明書の事前発行システム
JotForm、メール検証、Google Workspace を統合した自動化ワークショップ 証明書システム
If
Code
Gmail
+
If
Code
Gmail
24 ノードJitesh Dugar
文書抽出
認証済みユーザー自身のプロファイル作成
メール検証、PDF生成、Gmail配送を使用して検証済みユーザープロフィールを作成する
If
Set
Gmail
+
If
Set
Gmail
20 ノードJitesh Dugar
文書抽出
インフルエンサー広告施策管理システムの自動化
Instagram / YouTube API を使ったインフルエンサー評価とイベント管理の自動化
If
Code
Gmail
+
If
Code
Gmail
24 ノードJitesh Dugar
コンテンツ作成
詐欺防止型リードキャプチャ・育成千リードシステム
AIによるスコアリング、テーブル追跡、マルチチャネルアラートを使って詐欺対策リードをキャプチャーし育成
If
Set
Code
+
If
Set
Code
28 ノードJitesh Dugar
コンテンツ作成
ワークフロー情報
難易度
上級
ノード数22
カテゴリー1
ノードタイプ8
作成者
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で表示 →
このワークフローを共有