8
n8n 中文网amn8n.com

将开放日潜在客户从 SignSnapHome 同步至 HubSpot(含自动邮件跟进)

高级

这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 16 个节点。主要使用 If, Set, Code, Hubspot, Webhook 等节点。 将开放日潜在客户从 SignSnapHome 同步至 HubSpot,支持自动邮件跟进

前置要求
  • HubSpot API Key
  • HTTP Webhook 端点(n8n 会自动生成)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "105694f414213a0eca348284005921253960bd1b0223294a4970522d0da53055",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "8451445c-cf7f-43b3-b8e5-6fb377befcab",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -576
      ],
      "parameters": {
        "color": 4,
        "width": 346,
        "height": 472,
        "content": "## 📋 设置说明"
      },
      "typeVersion": 1
    },
    {
      "id": "74585b1c-f23b-4001-b81e-a38291312481",
      "name": "Webhook: SignSnap Home",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -144,
        -224
      ],
      "webhookId": "84838b43-c8d0-4eb8-a602-443fcc8a20fc",
      "parameters": {
        "path": "signsnap-hubspot",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "a3562394-ff96-408f-8e5f-2cfaa5e7dd08",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -656
      ],
      "parameters": {
        "color": 4,
        "width": 289,
        "height": 380,
        "content": "## 🎯 WEBHOOK 接收数据"
      },
      "typeVersion": 1
    },
    {
      "id": "7d256ab8-0b49-4638-b3a3-736fdb921c47",
      "name": "解析 SignSnap 数据",
      "type": "n8n-nodes-base.code",
      "position": [
        80,
        -224
      ],
      "parameters": {
        "jsCode": "// Extract and process SignSnap Home data for HubSpot\nconst items = $input.all();\nconst guestData = items[0].json.body;\n\n// Extract core contact information\nconst email = guestData.email || null;\nconst firstName = guestData.first_name || '';\nconst lastName = guestData.last_name || '';\nconst phone = guestData.phone_number || null;\n\n// Extract open house details\nconst propertyAddress = guestData.openHouseTitle || '';\nconst visitDate = guestData.submissionTimestamp || new Date().toISOString();\nconst hasAgent = guestData.are_you_currently_working_with_an_agent || 'Not specified';\n\n// Optional fields (may not exist in all forms)\nconst rating = guestData.what_did_you_rate_the_house || null;\nconst buyerAgreement = guestData.do_you_have_a_signed_buyer_agreement || null;\n\n// Separate standard fields from custom fields\nconst standardFields = [\n  'openHouseTitle', 'openHouseType', 'submissionTimestamp',\n  'guestPhotoUrl', 'first_name', 'last_name', 'phone_number',\n  'email', 'are_you_currently_working_with_an_agent',\n  'what_did_you_rate_the_house', 'do_you_have_a_signed_buyer_agreement',\n  'webhookUrl', 'executionMode'\n];\n\nconst customFields = {};\nfor (const [key, value] of Object.entries(guestData)) {\n  if (!standardFields.includes(key) && value !== null && value !== undefined && value !== '') {\n    customFields[key] = value;\n  }\n}\n\n// Build custom fields text for notes\nconst customFieldsText = Object.entries(customFields)\n  .map(([key, value]) => {\n    const formattedKey = key.replace(/_/g, ' ')\n      .split(' ')\n      .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n      .join(' ');\n    return `${formattedKey}: ${value}`;\n  })\n  .join('\\n');\n\n// Calculate lead score (0-100)\nlet leadScore = 50; // Base score\n\nif (hasAgent === 'No' || hasAgent === 'no') {\n  leadScore += 30; // Hot lead - no agent\n}\n\nif (rating) {\n  const ratingNum = parseInt(rating);\n  if (ratingNum >= 4) leadScore += 20; // High rating\n  else if (ratingNum <= 2) leadScore -= 20; // Low rating\n}\n\nif (buyerAgreement === 'No' || buyerAgreement === 'no') {\n  leadScore += 10; // No agreement = more available\n}\n\nleadScore = Math.max(0, Math.min(100, leadScore)); // Clamp 0-100\n\n// Determine lead status\nlet leadStatus = 'OPEN';\nif (leadScore >= 70) leadStatus = 'HOT';\nelse if (leadScore >= 50) leadStatus = 'WARM';\nelse if (leadScore < 40) leadStatus = 'COLD';\n\n// Build comprehensive notes for HubSpot\nconst notes = `🏠 Open House Visit\\n\\nProperty: ${propertyAddress}\\nVisit Date: ${new Date(visitDate).toLocaleString('en-US', { dateStyle: 'full', timeStyle: 'short' })}\\nHas Agent: ${hasAgent}${rating ? `\\nProperty Rating: ${rating}/5` : ''}${buyerAgreement ? `\\nBuyer Agreement: ${buyerAgreement}` : ''}\\n\\nLead Score: ${leadScore}/100\\nLead Status: ${leadStatus}${customFieldsText ? `\\n\\n--- Additional Information ---\\n${customFieldsText}` : ''}\\n\\n📍 Source: SignSnap Home Open House Sign-In`;\n\nreturn [{\n  json: {\n    // HubSpot contact fields\n    email: email,\n    firstname: firstName,\n    lastname: lastName,\n    phone: phone,\n    \n    // Property & visit details\n    propertyAddress: propertyAddress,\n    visitDate: visitDate,\n    hasAgent: hasAgent,\n    rating: rating,\n    \n    // Scoring\n    leadScore: leadScore,\n    leadStatus: leadStatus,\n    \n    // Notes to add to contact\n    notes: notes,\n    \n    // Lifecycle stage\n    lifecyclestage: 'lead',\n    \n    // Original data for reference\n    _raw: guestData\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "bae80e9f-b4fe-4c0e-a945-a1d2b5937e8e",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -672
      ],
      "parameters": {
        "color": 4,
        "width": 303,
        "height": 373,
        "content": "## ⚙️ 数据处理"
      },
      "typeVersion": 1
    },
    {
      "id": "9f28800b-f6fd-4ca8-b41f-43dcc7fde6f9",
      "name": "有邮箱吗?",
      "type": "n8n-nodes-base.if",
      "position": [
        304,
        -224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "email-check",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.email }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1c5ca9b2-cba1-4709-a02c-9df049310f4d",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        -656
      ],
      "parameters": {
        "color": 4,
        "width": 262,
        "height": 248,
        "content": "## ✉️ 邮箱必填"
      },
      "typeVersion": 1
    },
    {
      "id": "fdebbdbb-0116-4f6a-92ea-3fdef2fbcded",
      "name": "创建/更新 HubSpot 联系人",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        528,
        -352
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "options": {},
        "authentication": "appToken",
        "additionalFields": {
          "lastName": "={{ $json.lastname }}",
          "firstName": "={{ $json.firstname }}",
          "phoneNumber": "={{ $('Parse SignSnap Data').item.json._raw.phone_number }}",
          "membershipNote": "={{ $('Parse SignSnap Data').item.json.notes }}"
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "XUCfDvhuGiD9t0za",
          "name": "HubSpot account"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fbc3e0a7-97d3-4822-b57a-6c8f8b279eba",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        -496
      ],
      "parameters": {
        "color": 5,
        "width": 262,
        "height": 300,
        "content": "## 🎯 HUBSPOT"
      },
      "typeVersion": 1
    },
    {
      "id": "25b03343-3dfe-46ab-8860-b36dea6fbebf",
      "name": "发送感谢邮件",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        528,
        -160
      ],
      "webhookId": "de450abb-d8a5-42f3-937e-ded6115ec33f",
      "parameters": {
        "html": "=Hi {{ $('Parse SignSnap Data').item.json.firstname }}!\n\nThank you for visiting {{ $('Parse SignSnap Data').item.json.propertyAddress }} today.\n\n{{ $('Parse SignSnap Data').item.json.hasAgent === 'No' ? \"Our team would love to help you on your home buying journey! We specialize in this area and can provide exclusive listings and personalized service. We're here to make finding your dream home easy and stress-free.\\n\\n\" : \"\" }}If you have any questions about this property or would like to schedule another viewing, please don't hesitate to reply to this email.\n\nBest regards,\nYour Real Estate Team",
        "options": {},
        "subject": "=Thank You for Visiting {{ $('Parse SignSnap Data').item.json.propertyAddress }}!",
        "toEmail": "={{ $('Parse SignSnap Data').item.json.email }}",
        "fromEmail": "YOUR_EMAIL@DOMAIN.COM"
      },
      "typeVersion": 2.1
    },
    {
      "id": "b714c9f3-c953-4ecb-9456-3f2e346b31ef",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 262,
        "height": 268,
        "content": "## 📧 自动跟进"
      },
      "typeVersion": 1
    },
    {
      "id": "61c0140b-7043-4f12-9498-6bf3d850c37b",
      "name": "记录缺失邮箱",
      "type": "n8n-nodes-base.set",
      "position": [
        528,
        16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "error-message",
              "name": "error_reason",
              "type": "string",
              "value": "No email address provided"
            },
            {
              "id": "guest-name",
              "name": "guest_name",
              "type": "string",
              "value": "={{ $json.firstname }} {{ $json.lastname }}"
            },
            {
              "id": "property",
              "name": "property",
              "type": "string",
              "value": "={{ $json.propertyAddress }}"
            },
            {
              "id": "phone",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "098055b4-f2e3-4376-ad9d-cc7f2ab1ff26",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        176
      ],
      "parameters": {
        "color": 6,
        "width": 262,
        "height": 231,
        "content": "## ⚠️ 无邮箱处理"
      },
      "typeVersion": 1
    },
    {
      "id": "4c31c975-05e6-4bed-8e9f-96d5e8c426c9",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -112
      ],
      "parameters": {
        "color": 3,
        "width": 361,
        "height": 670,
        "content": "## 📊 自定义 HubSpot 属性(可选)"
      },
      "typeVersion": 1
    },
    {
      "id": "3d3a1a95-f7ba-4e1d-9304-524604993896",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 349,
        "height": 734,
        "content": "## 💡 专业技巧与增强功能"
      },
      "typeVersion": 1
    },
    {
      "id": "2b6fca52-ae4b-4788-8283-4997cd4d2757",
      "name": "便签9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -16
      ],
      "parameters": {
        "color": 6,
        "width": 333,
        "height": 702,
        "content": "## 🔧 故障排除"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Has Email?": {
      "main": [
        [
          {
            "node": "Create/Update HubSpot Contact",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Thank You Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Missing Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse SignSnap Data": {
      "main": [
        [
          {
            "node": "Has Email?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: SignSnap Home": {
      "main": [
        [
          {
            "node": "Parse SignSnap Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 内容创作, 多模态 AI

需要付费吗?

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

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

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

作者
Kaden Reese

Kaden Reese

@kadenreese

I started automating with Python in 2020 and still use it in workflows when needed, but I’ve recently leaned into n8n for client-facing solutions. Lately I’ve focused on real estate automations, though I also build workflows for email, scraping, and other use cases. Currently Building 👇🏻

外部链接
在 n8n.io 查看

分享此工作流