8
n8n 中文网amn8n.com

JotForm到Zoho潜在客户自动化(已提交)

中级

这是一个自动化工作流,包含 15 个节点。主要使用 Set, Gmail, ZohoCrm, JotFormTrigger, Agent 等节点。 使用JotForm、Google表格和Gemini AI到Zoho CRM自动化房地产潜在客户匹配

前置要求
  • Google 账号和 Gmail API 凭证
  • Google Sheets API 凭证
  • Google Gemini API Key

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "DPZycgH7MnQo6dpN",
  "meta": {
    "instanceId": "7f1a0694161455be3a7e71f1e0dea04908b0376a1a81e3a0c1e5ac879d48f83a"
  },
  "name": "JotForm 到 Zoho Lead 自动化(已提交)",
  "tags": [],
  "nodes": [
    {
      "id": "95504a3e-0464-4260-b058-011b59b035d9",
      "name": "设置:标准化潜在客户",
      "type": "n8n-nodes-base.set",
      "position": [
        -80,
        624
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "lead_fullName",
              "name": "lead.fullName",
              "type": "string",
              "value": "={{ $json.name || $json['Name'] || '' }}"
            },
            {
              "id": "lead_email",
              "name": "lead.email",
              "type": "string",
              "value": "={{ $json.email || $json['Email'] || '' }}"
            },
            {
              "id": "lead_phone",
              "name": "lead.phone",
              "type": "string",
              "value": "={{ $json.phone || $json['Cell Phone Number'] || '' }}"
            },
            {
              "id": "lead_moveInDate",
              "name": "lead.moveInDate",
              "type": "string",
              "value": "={{ $json.move_in_date || $json['Desired move in date'] || '' }}"
            },
            {
              "id": "lead_mustHaves",
              "name": "lead.mustHaves",
              "type": "string",
              "value": "={{ ($json.must_haves || $json['Any \\'must haves\\' for your apartment?'] || '').toString().trim() }}"
            },
            {
              "id": "lead_minBedrooms",
              "name": "lead.minBedrooms",
              "type": "string",
              "value": "={{ $json['Minimum # of bedrooms desired'] }}"
            },
            {
              "id": "lead_minBathrooms",
              "name": "lead.minBathrooms",
              "type": "string",
              "value": "={{ $json['Minimum # of bathrooms desired'] }}"
            },
            {
              "id": "lead_needsAssignedParking",
              "name": "lead.needsAssignedParking",
              "type": "boolean",
              "value": "={{ ($json.assigned_parking || $json['Do you need assigned parking?'] || '').toString().toLowerCase() === 'yes' }}"
            },
            {
              "id": "lead_hasPets",
              "name": "lead.hasPets",
              "type": "boolean",
              "value": "={{ ($json.has_pets || $json['Do you have pets?'] || '').toString().toLowerCase().includes('dont') }}"
            },
            {
              "id": "lead_preferredNeighborhoods",
              "name": "lead.preferredNeighborhoods",
              "type": "array",
              "value": "={{ ($json.preferred_neighborhoods || $json['List your preferred neighborhoods'] || '').toString().split(/,|\\n/).map(s => s.trim()).filter(s => s.length > 0) }}"
            },
            {
              "id": "lead_maxMonthlyRent",
              "name": "lead.maxMonthlyRent",
              "type": "number",
              "value": "={{ (() => { const val = ($json.price_range || $json['What is the price range you are considering?'] || '').toString().replace(/[^0-9.]/g, ''); return val ? Number(val) : null; })() }}"
            },
            {
              "id": "lead_submittedAt",
              "name": "lead.submittedAt",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e4430f1c-e7b6-4360-9826-4717bdceec21",
      "name": "JotForm 触发器",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -384,
        624
      ],
      "webhookId": "WEBHOOK_ID_PLACEHOLDER",
      "parameters": {
        "form": "YOUR_JOTFORM_FORM_ID"
      },
      "typeVersion": 1
    },
    {
      "id": "3eebca56-8295-4c30-91af-a97f35a8b7b3",
      "name": "AI 代理",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        176,
        624
      ],
      "parameters": {
        "text": "={\n  \"lead\": {{ JSON.stringify($json.lead) }},\n  \"listings\": googleSheets tool node \n}\n",
        "options": {
          "systemMessage": "=You are a real-estate assistant that receives a customer’s apartment search criteria and finds the best matching listings from a Google Sheet database.\n\nYou have access to the tool \"googleSheets\" which contains all available apartment listings. Each row includes fields such as:\nlisting_id, supplier_name, supplier_type, bedrooms, bathrooms, assigned_parking, rent, pets_allowed, furnished, neighborhoods, available_from, address, contact_email, contact_phone, crm_listing_id, images, sqft, floor, elevator, balcony, supplier_rating.\n\nYour goal:\n1. Search the sheet for apartments that match the user’s criteria.\n2. Return the top 3 matches ranked by overall suitability.\n3. Return your reasoning and summarize why each match fits.\n4. Always output in valid JSON.\n\n### Matching rules\n- Bedrooms ≥ requested minimum.\n- Bathrooms ≥ requested minimum.\n- Assigned parking must be \"Yes\" if the user needs it.\n- Rent ≤ maximum price range (if provided).\n- If user has a pet → only listings where `pets_allowed` = \"Yes\".\n- Preferred neighborhoods → give higher score to exact matches or close alternatives.\n- Consider soonest available dates ≥ requested move-in date.\n- Higher `supplier_rating` is better.\n- Ignore listings that violate hard constraints (e.g. rent too high or parking required but missing).\n\n### Required Output Format\nUse this exact structure (valid JSON only):\n\n{\n  \"recommendedListingId\": \"string\",\n  \"topMatches\": [\n    {\n      \"listingId\": \"string\",\n      \"score\": number,\n      \"reason\": \"string\",\n      \"rent\": number,\n      \"bedrooms\": number,\n      \"bathrooms\": number,\n      \"neighborhood\": \"string\",\n      \"availableFrom\": \"string\"\n    }\n  ],\n  \"notes\": \"string\"\n}\n\nDo not include explanations or prose outside this JSON.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "1b2e69b8-bde7-45d2-bfb0-2886ac2f3997",
      "name": "Google Gemini 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        16,
        912
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "5e06fdc6-e204-41e1-a3e5-dd0fce8cffd2",
      "name": "googleSheets",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        272,
        928
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SHEET_GID_OR_NAME",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_DOCUMENT_ID/edit#gid=YOUR_SHEET_GID_OR_NAME",
          "cachedResultName": "Sheet Name (Template)"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Sample Database (Template)"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "dfdfbe18-115f-4d97-a75f-915dff0b3e11",
      "name": "多表:您可以连接多个表以实现有组织的数据结构",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        512,
        896
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"recommendedListingId\": \"string\",\n  \"topMatches\": [\n    {\n      \"listingId\": \"string\",\n      \"score\": \"\",\n      \"reason\": \"string\",\n      \"rent\": \"\",\n      \"bedrooms\": \"\",\n      \"bathrooms\": \"\",\n      \"neighborhood\": \"string\",\n      \"availableFrom\": \"string\"\n    }\n  ],\n  \"notes\": \"string\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "29e27f69-2060-4058-87dd-1c118acfd4be",
      "name": "发送消息",
      "type": "n8n-nodes-base.gmail",
      "position": [
        672,
        624
      ],
      "webhookId": "WEBHOOK_ID_PLACEHOLDER",
      "parameters": {
        "sendTo": "={{ $('JotForm Trigger').item.json.Email }}",
        "message": "=Hi {{ $('JotForm Trigger').item.json.Name }},\n\nGreat news! 🎉 Based on your preferences, we’ve found several apartments that closely match what you’re looking for. \n\nWe’d love to discuss these options with you and help you pick the perfect one.\n\nPlease use the link below to book a quick meeting with our property consultant: 👉 YOUR_CALENDLY_LINK\n\nDuring the call, we’ll review the listings, confirm availability, and guide you through the next steps.\n\nThe Real Estate Team — If you’ve already scheduled a call, please disregard this message.\n\nLooking forward to speaking with you soon!\nBest regards,\n",
        "options": {},
        "subject": "Your apartment search results are ready",
        "emailType": "text"
      },
      "typeVersion": 2.1,
      "alwaysOutputData": false
    },
    {
      "id": "e0793c85-9b49-4a34-9b1a-03862379c05f",
      "name": "创建潜在客户",
      "type": "n8n-nodes-base.zohoCrm",
      "position": [
        928,
        624
      ],
      "parameters": {
        "Company": "TEMPLATED_COMPANY_NAME",
        "lastName": "={{ $('JotForm Trigger').item.json.Name }}",
        "resource": "lead",
        "additionalFields": {
          "Email": "={{ $('JotForm Trigger').item.json.Email }}",
          "Mobile": "={{ $('JotForm Trigger').item.json['Cell Phone Number'] }}",
          "Full_Name": "={{ $('JotForm Trigger').item.json.Name }}",
          "Description": "=🧭 Apartment Match Summary\n──────────────────────────\nLead Name: {{ $('JotForm Trigger').item.json.Name }}\nEmail: {{ $('JotForm Trigger').item.json.Email }}\nPhone: {{ $('JotForm Trigger').item.json['Cell Phone Number'] }}\nMove-in Date: {{ $('Set: Normalize Lead').item.json.lead.moveInDate }}\nPreferred Neighborhoods: {{ $('Set: Normalize Lead').item.json.lead.preferredNeighborhoods }}\nMax Rent: {{ $('Set: Normalize Lead').item.json.lead.maxMonthlyRent }} EGP\nNeeds Parking: {{ $('Set: Normalize Lead').item.json.lead.needsAssignedParking }}\nHas Pets: {{ $('Set: Normalize Lead').item.json.lead.hasPets }}\n\n──────────────────────────\n🏠 AI Recommended Listing\nRecommended Listing ID: {{ $json.output.recommendedListingId }}\nTop Match Neighborhood: {{ $json.output.topMatches[0].neighborhood }}\nRent: {{ $json.output.topMatches[0].rent }} EGP\nBedrooms/Bathrooms: {{ $json.output.topMatches[0].bedrooms }}/{{ $json.output.topMatches[0].bathrooms }}\nAvailable From: {{ $json.output.topMatches[0].availableFrom }}\n\n──────────────────────────\n🏘️ Other Good Matches\n2️⃣ {{ $json.output.topMatches[1].listingId }} — {{ $json.output.topMatches[1].neighborhood }}\n   Rent: {{ $json.output.topMatches[1].rent }} EGP\n\n3️⃣ {{ $json.output.topMatches[2].listingId }} — {{ $json.output.topMatches[2].neighborhood }}\n   Rent:  {{ $json.output.topMatches[2].rent }} EGP\n\n\n",
          "Lead_Source": "JotForm form"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ad8beca-d9ad-414f-a0ad-bc56011f0993",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        544
      ],
      "parameters": {
        "color": 3,
        "content": "当用户提交 JotForm 时启动工作流,捕获原始潜在客户数据。"
      },
      "typeVersion": 1
    },
    {
      "id": "df77592b-4994-41a5-b47c-59ce7923bb44",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        544
      ],
      "parameters": {
        "color": 4,
        "content": "将原始表单字段映射到标准化的潜在客户对象,以实现一致的数据使用。"
      },
      "typeVersion": 1
    },
    {
      "id": "80c58506-ad79-481e-9d5a-24985dbb3cd5",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        528
      ],
      "parameters": {
        "color": 6,
        "width": 336,
        "content": "核心逻辑。使用潜在客户标准和 googleSheets 工具来查找并排名前三个匹配的房源。"
      },
      "typeVersion": 1
    },
    {
      "id": "4c92a0b0-2f32-4b94-81cf-0b0dd4d842ef",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        976
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "content": "。"
      },
      "typeVersion": 1
    },
    {
      "id": "9a308dff-e55f-47fc-b5b6-1319b6e78e52",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        528
      ],
      "parameters": {
        "color": 4,
        "width": 256,
        "content": "自动向潜在客户发送电子邮件,通知他们结果已准备就绪,并提示他们预订后续咨询。"
      },
      "typeVersion": 1
    },
    {
      "id": "cbe5ea3e-4edc-4a3d-8bbf-ddaaefc9baee",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        528
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "content": "在 Zoho CRM 中创建一个新的、详细的潜在客户记录,包括客户需求和 AI 的顶级房源推荐。"
      },
      "typeVersion": 1
    },
    {
      "id": "3873d283-f68d-4bc3-90ae-4ebf61767759",
      "name": "便签12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        -224
      ],
      "parameters": {
        "width": 1024,
        "height": 736,
        "content": "# JotForm 设置指南"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "27b5e246-a6bf-40c4-8ddf-52a41aeb2040",
  "connections": {
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "googleSheets": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        [
          {
            "node": "Create a lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JotForm Trigger": {
      "main": [
        [
          {
            "node": "Set: Normalize Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set: Normalize Lead": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

中级

需要付费吗?

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

工作流信息
难度等级
中级
节点数量15
分类-
节点类型9
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Abdullah Alshiekh

Abdullah Alshiekh

@abdullah01

🚀 Automation pro building AI-powered workflows with n8n. 💼 Special focus on real use cases 🔧 Love clean, flexible, and business-ready automations.

外部链接
在 n8n.io 查看

分享此工作流