8
n8n 中文网amn8n.com

使用GPT-4o-mini、JotForm和Gmail自动化物业维护请求

高级

这是一个自动化工作流,包含 21 个节点。主要使用 If, Set, Code, Gmail, GoogleSheets 等节点。 使用GPT-4o-mini、JotForm和Gmail自动化物业维护请求

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

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "5661c7cd-d26d-4170-9b40-f62a005ded25",
      "name": "JotForm 触发器",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -1008,
        528
      ],
      "webhookId": "maintenance-request",
      "parameters": {
        "form": "252864531445460"
      },
      "credentials": {
        "jotFormApi": {
          "id": "W7O1b225FpOwkwDT",
          "name": "JotForm account-Deepanshi"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1929aeb3-feab-43a0-b755-680568c9e239",
      "name": "解析请求数据",
      "type": "n8n-nodes-base.code",
      "position": [
        -672,
        528
      ],
      "parameters": {
        "jsCode": "// Parse maintenance request form data\nconst formData = $input.first().json;\n\nreturn {\n  json: {\n    requestId: formData.submissionID || 'REQ-' + Date.now(),\n    tenantName: formData.tenantName || formData.q3_tenantName,\n    tenantEmail: formData.tenantEmail || formData.q4_tenantEmail,\n    tenantPhone: formData.tenantPhone || formData.q5_tenantPhone,\n    unitNumber: formData.unitNumber || formData.q6_unitNumber,\n    propertyAddress: formData.propertyAddress || formData.q7_propertyAddress,\n    issueDescription: formData.issueDescription || formData.q8_issueDescription,\n    urgencyLevel: formData.urgencyLevel || formData.q9_urgencyLevel || 'normal',\n    photoUrl: formData.photoUrl || formData.q10_photo,\n    accessInstructions: formData.accessInstructions || formData.q11_accessInstructions,\n    preferredContactMethod: formData.preferredContactMethod || formData.q12_preferredContactMethod || 'email',\n    submittedAt: new Date().toISOString(),\n    status: 'new'\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "abcf8b09-1c79-49d7-8207-7896070bc9a0",
      "name": "AI 维护分析",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -304,
        800
      ],
      "parameters": {
        "text": "=You are an expert property maintenance analyst. Analyze this maintenance request and provide comprehensive categorization and recommendations.\n\n**Request Details:**\n- Unit Number: {{ $json.unitNumber }}\n- Tenant: {{ $json.tenantName }}\n- Urgency Level (Tenant-Reported): {{ $json.urgencyLevel }}\n- Issue Description: {{ $json.issueDescription }}\n\n**Access Instructions:**\n{{ $json.accessInstructions }}\n\nProvide a detailed analysis in JSON format:\n{\n  \"issueCategory\": {\n    \"primary\": \"plumbing|electrical|hvac|appliance|structural|pest_control|lockout|general_repair|other\",\n    \"secondary\": [\"specific sub-categories\"],\n    \"confidence\": 0-100\n  },\n  \"priorityAssessment\": {\n    \"level\": \"emergency|urgent|high|normal|low\",\n    \"reasoning\": \"why this priority was assigned\",\n    \"keywords_detected\": [\"emergency keywords found\"],\n    \"safety_concern\": true|false,\n    \"habitability_issue\": true|false\n  },\n  \"estimatedComplexity\": {\n    \"level\": \"simple|moderate|complex|major\",\n    \"estimated_hours\": number,\n    \"requires_specialist\": true|false\n  },\n  \"recommendedVendor\": {\n    \"type\": \"plumber|electrician|hvac_tech|handyman|locksmith|pest_control|general_contractor\",\n    \"urgency\": \"emergency_dispatch|same_day|within_24h|within_48h|scheduled\",\n    \"specialization_needed\": \"specific expertise if required\"\n  },\n  \"cost_estimate\": {\n    \"range\": \"$min - $max\",\n    \"factors\": [\"cost factors to consider\"]\n  },\n  \"tenant_communication\": {\n    \"initial_response\": \"message to send tenant immediately\",\n    \"estimated_resolution\": \"timeframe estimate\",\n    \"temporary_solutions\": [\"interim fixes tenant can do\"]\n  },\n  \"safety_protocols\": [\n    \"safety step 1\",\n    \"safety step 2\"\n  ],\n  \"recurring_issue_check\": {\n    \"likely_recurring\": true|false,\n    \"warranty_applicable\": true|false,\n    \"preventive_recommendation\": \"suggestion to prevent future issues\"\n  },\n  \"contractor_instructions\": [\n    \"specific instruction 1\",\n    \"specific instruction 2\",\n    \"what to bring/check\"\n  ],\n  \"legal_compliance\": {\n    \"urgent_legal_requirement\": true|false,\n    \"habitability_law_concern\": true|false,\n    \"documentation_needed\": \"what needs to be documented\"\n  }\n}",
        "options": {
          "systemMessage": "You are an expert property maintenance coordinator with 20+ years of experience in residential and commercial property management. You understand emergency protocols, vendor capabilities, legal requirements, and cost optimization."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.6
    },
    {
      "id": "2f21e918-270c-481d-870c-bff0576ec812",
      "name": "提取AI响应",
      "type": "n8n-nodes-base.set",
      "position": [
        64,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "aiAnalysis",
              "name": "aiAnalysis",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "fc2f820d-a761-4960-8617-5ef22110be24",
      "name": "合并 AI 分析",
      "type": "n8n-nodes-base.code",
      "position": [
        320,
        480
      ],
      "parameters": {
        "jsCode": "// Merge AI analysis with request data\nconst requestData = $input.first().json;\nconst aiAnalysisRaw = requestData.aiAnalysis;\n\n// Parse AI analysis\nlet aiAnalysis;\ntry {\n  aiAnalysis = JSON.parse(aiAnalysisRaw);\n} catch (e) {\n  // Fallback if parsing fails\n  aiAnalysis = {\n    issueCategory: {\n      primary: 'general_repair',\n      secondary: ['maintenance'],\n      confidence: 60\n    },\n    priorityAssessment: {\n      level: 'normal',\n      reasoning: 'Standard maintenance request',\n      keywords_detected: [],\n      safety_concern: false,\n      habitability_issue: false\n    },\n    estimatedComplexity: {\n      level: 'moderate',\n      estimated_hours: 2,\n      requires_specialist: false\n    },\n    recommendedVendor: {\n      type: 'handyman',\n      urgency: 'within_24h',\n      specialization_needed: 'General repair'\n    },\n    cost_estimate: {\n      range: '$100 - $300',\n      factors: ['Labor', 'Materials']\n    },\n    tenant_communication: {\n      initial_response: 'We have received your request and are assigning a technician.',\n      estimated_resolution: '24-48 hours',\n      temporary_solutions: []\n    },\n    safety_protocols: ['Standard safety procedures'],\n    recurring_issue_check: {\n      likely_recurring: false,\n      warranty_applicable: false,\n      preventive_recommendation: 'Regular maintenance'\n    },\n    contractor_instructions: ['Assess issue', 'Provide quote if major repair needed'],\n    legal_compliance: {\n      urgent_legal_requirement: false,\n      habitability_law_concern: false,\n      documentation_needed: 'Before/after photos'\n    }\n  };\n}\n\n// Determine work order priority\nconst priorityMap = {\n  'emergency': 1,\n  'urgent': 2,\n  'high': 3,\n  'normal': 4,\n  'low': 5\n};\n\n// Select contractor based on vendor type\nconst contractorDatabase = {\n  'plumber': { name: 'QuickFix Plumbing', phone: '+1-555-PLUMB', email: 'dispatch@quickfixplumbing.com' },\n  'electrician': { name: 'Bright Spark Electric', phone: '+1-555-SPARK', email: 'service@brightspark.com' },\n  'hvac_tech': { name: 'Cool Breeze HVAC', phone: '+1-555-HVAC1', email: 'emergency@coolbreeze.com' },\n  'handyman': { name: 'All-Fix Handyman', phone: '+1-555-FIX-IT', email: 'jobs@allfix.com' },\n  'locksmith': { name: '24/7 Locksmith', phone: '+1-555-LOCKS', email: 'service@247locksmith.com' },\n  'pest_control': { name: 'No-Bug Pest Control', phone: '+1-555-BUGS0', email: 'service@nobug.com' },\n  'general_contractor': { name: 'BuildRight Contractors', phone: '+1-555-BUILD', email: 'projects@buildright.com' }\n};\n\nconst vendorType = aiAnalysis.recommendedVendor.type;\nconst contractor = contractorDatabase[vendorType] || contractorDatabase['handyman'];\n\nreturn {\n  json: {\n    ...requestData,\n    issueCategory: aiAnalysis.issueCategory.primary,\n    subCategories: aiAnalysis.issueCategory.secondary,\n    aiConfidence: aiAnalysis.issueCategory.confidence,\n    finalPriority: aiAnalysis.priorityAssessment.level,\n    priorityNumber: priorityMap[aiAnalysis.priorityAssessment.level] || 4,\n    priorityReasoning: aiAnalysis.priorityAssessment.reasoning,\n    keywordsDetected: aiAnalysis.priorityAssessment.keywords_detected,\n    safetyConcern: aiAnalysis.priorityAssessment.safety_concern,\n    habitabilityIssue: aiAnalysis.priorityAssessment.habitability_issue,\n    complexity: aiAnalysis.estimatedComplexity.level,\n    estimatedHours: aiAnalysis.estimatedComplexity.estimated_hours,\n    requiresSpecialist: aiAnalysis.estimatedComplexity.requires_specialist,\n    vendorType: vendorType,\n    vendorUrgency: aiAnalysis.recommendedVendor.urgency,\n    specialization: aiAnalysis.recommendedVendor.specialization_needed,\n    costEstimate: aiAnalysis.cost_estimate.range,\n    costFactors: aiAnalysis.cost_estimate.factors,\n    tenantMessage: aiAnalysis.tenant_communication.initial_response,\n    estimatedResolution: aiAnalysis.tenant_communication.estimated_resolution,\n    temporarySolutions: aiAnalysis.tenant_communication.temporary_solutions,\n    safetyProtocols: aiAnalysis.safety_protocols,\n    likelyRecurring: aiAnalysis.recurring_issue_check.likely_recurring,\n    warrantyApplicable: aiAnalysis.recurring_issue_check.warranty_applicable,\n    preventiveRecommendation: aiAnalysis.recurring_issue_check.preventive_recommendation,\n    contractorInstructions: aiAnalysis.contractor_instructions,\n    legalUrgent: aiAnalysis.legal_compliance.urgent_legal_requirement,\n    habitabilityLaw: aiAnalysis.legal_compliance.habitability_law_concern,\n    documentationNeeded: aiAnalysis.legal_compliance.documentation_needed,\n    assignedContractor: contractor.name,\n    contractorPhone: contractor.phone,\n    contractorEmail: contractor.email,\n    workOrderNumber: 'WO-' + Date.now(),\n    aiSummary: `${aiAnalysis.issueCategory.primary} issue - ${aiAnalysis.priorityAssessment.level} priority. ${aiAnalysis.priorityAssessment.reasoning}`\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "4e267be8-b8a5-46de-9598-303dbe3e0481",
      "name": "是否为紧急情况?",
      "type": "n8n-nodes-base.if",
      "position": [
        624,
        352
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "condition1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.finalPriority }}",
              "rightValue": "emergency"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "43d6ddfb-7629-4fa2-86bd-1bc09f3a953c",
      "name": "向承包商发送紧急邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1008,
        512
      ],
      "webhookId": "66472a1b-b0a4-4b1b-a99e-a0b08478d100",
      "parameters": {
        "sendTo": "={{ $json.contractorEmail }}",
        "message": "=🚨 EMERGENCY MAINTENANCE REQUEST\n\nWork Order: {{ $json.workOrderNumber }}\nPriority: EMERGENCY\nCategory: {{ $json.issueCategory }}\n\n📍 PROPERTY DETAILS:\nAddress: {{ $json.propertyAddress }}\nUnit: {{ $json.unitNumber }}\n\n👤 TENANT CONTACT:\nName: {{ $json.tenantName }}\nPhone: {{ $json.tenantPhone }}\nEmail: {{ $json.tenantEmail }}\nPreferred Contact: {{ $json.preferredContactMethod }}\n\n🔧 ISSUE DESCRIPTION:\n{{ $json.issueDescription }}\n\n🤖 AI ANALYSIS:\nCategory: {{ $json.issueCategory }}\nComplexity: {{ $json.complexity }}\nEstimated Hours: {{ $json.estimatedHours }}\nCost Estimate: {{ $json.costEstimate }}\n\n⚠️ PRIORITY ASSESSMENT:\n{{ $json.priorityReasoning }}\nSafety Concern: {{ $json.safetyConcern ? 'YES ⚠️' : 'No' }}\nHabitability Issue: {{ $json.habitabilityIssue ? 'YES - URGENT' : 'No' }}\n\n🔑 ACCESS INSTRUCTIONS:\n{{ $json.accessInstructions }}\n\n📋 CONTRACTOR INSTRUCTIONS:\n{{ $json.contractorInstructions.map((inst, i) => (i + 1) + '. ' + inst).join('\\n') }}\n\n🛡️ SAFETY PROTOCOLS:\n{{ $json.safetyProtocols.map((protocol, i) => (i + 1) + '. ' + protocol).join('\\n') }}\n\n📸 PHOTO: {{ $json.photoUrl || 'No photo provided' }}\n\n⏱️ RESPONSE REQUIRED: IMMEDIATE\nEstimated Resolution: {{ $json.estimatedResolution }}\n\n📝 DOCUMENTATION REQUIRED:\n{{ $json.documentationNeeded }}\n\n{{ $json.legalUrgent ? '⚖️ LEGAL COMPLIANCE URGENT - This repair may be legally required under habitability laws.' : '' }}\n\nPlease respond immediately with ETA.\n\nProperty Management Team\n---\nThis is an AI-enhanced emergency dispatch",
        "options": {},
        "subject": "=🚨 EMERGENCY WORK ORDER - {{ $json.workOrderNumber }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "PIMDNhXNj8Zyiz3G",
          "name": "Gmail account - Deepanshi"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ea9fd8e1-825f-4438-9fc5-46900019e0bc",
      "name": "向承包商发送标准邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1008,
        800
      ],
      "webhookId": "611a2b01-ed15-4d44-9893-3d65fdec9020",
      "parameters": {
        "sendTo": "={{ $json.contractorEmail }}",
        "message": "=📋 MAINTENANCE WORK ORDER\n\nWork Order: {{ $json.workOrderNumber }}\nPriority: {{ $json.finalPriority.toUpperCase() }}\nCategory: {{ $json.issueCategory }}\nRequested: {{ $json.submittedAt }}\n\n📍 PROPERTY DETAILS:\nAddress: {{ $json.propertyAddress }}\nUnit: {{ $json.unitNumber }}\n\n👤 TENANT CONTACT:\nName: {{ $json.tenantName }}\nPhone: {{ $json.tenantPhone }}\nEmail: {{ $json.tenantEmail }}\nPreferred Contact: {{ $json.preferredContactMethod }}\n\n🔧 ISSUE DESCRIPTION:\n{{ $json.issueDescription }}\n\n🤖 AI ANALYSIS:\nCategory: {{ $json.issueCategory }} ({{ $json.subCategories.join(', ') }})\nConfidence: {{ $json.aiConfidence }}%\nComplexity: {{ $json.complexity }}\nEstimated Hours: {{ $json.estimatedHours }}\nCost Estimate: {{ $json.costEstimate }}\nSpecialization: {{ $json.specialization }}\n\n💡 AI INSIGHTS:\n{{ $json.aiSummary }}\n\n🔑 ACCESS INSTRUCTIONS:\n{{ $json.accessInstructions }}\n\n📋 CONTRACTOR INSTRUCTIONS:\n{{ $json.contractorInstructions.map((inst, i) => (i + 1) + '. ' + inst).join('\\n') }}\n\n🛡️ SAFETY PROTOCOLS:\n{{ $json.safetyProtocols.map((protocol, i) => (i + 1) + '. ' + protocol).join('\\n') }}\n\n📸 PHOTO: {{ $json.photoUrl || 'No photo provided' }}\n\n⏱️ TARGET RESPONSE TIME: {{ $json.vendorUrgency }}\nEstimated Resolution: {{ $json.estimatedResolution }}\n\n📝 DOCUMENTATION REQUIRED:\n{{ $json.documentationNeeded }}\n- Before photos\n- After photos\n- Parts/materials used\n- Time spent\n- Any additional issues found\n\n{{ $json.warrantyApplicable ? '🔧 WARRANTY CHECK: This may be under warranty - please verify before proceeding.' : '' }}\n\n{{ $json.likelyRecurring ? '🔄 RECURRING ISSUE ALERT: Similar issues may have been reported. Check history.' : '' }}\n\n💡 PREVENTIVE RECOMMENDATION:\n{{ $json.preventiveRecommendation }}\n\nPlease confirm receipt and provide ETA.\n\nBest regards,\nProperty Management Team\n\n---\nThis work order was generated using AI analysis for optimal routing and prioritization.",
        "options": {},
        "subject": "=Work Order: {{ $json.workOrderNumber }} - {{ $json.issueCategory }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "PIMDNhXNj8Zyiz3G",
          "name": "Gmail account - Deepanshi"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "06d7272f-ee56-4acd-9731-344995d4e56e",
      "name": "发送租户确认",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1344,
        480
      ],
      "webhookId": "9f39bc81-91ed-43c7-b35b-0b50853f4a63",
      "parameters": {
        "sendTo": "={{ $('JotForm Trigger').item.json['tenant Email'] }}",
        "message": "=Hi, {{ $('JotForm Trigger').item.json['tenant Name'].first }}\n\nThank you for submitting your maintenance request. We've received your report and are taking immediate action.\n\n📋 **Your Request Details:**\nRequest ID: {{ $json.requestId }}\nUnit: {{ $json.unitNumber }}\nIssue: {{ $json.issueCategory }}\nPriority: {{ $json.finalPriority.toUpperCase() }}\n\n🤖 **AI Analysis Results:**\n{{ $json.tenantMessage }}\n\n🔧 **What's Happening Next:**\n• A {{ $json.vendorType.replace('_', ' ') }} has been assigned\n• Contractor: {{ $json.assignedContractor }}\n• Expected Response: {{ $json.vendorUrgency.replace('_', ' ') }}\n• Estimated Resolution: {{ $json.estimatedResolution }}\n• Cost Estimate: {{ $json.costEstimate }}\n\n{{ $json.temporarySolutions.length > 0 ? '💡 **Temporary Solutions (while you wait):**\\n' + $json.temporarySolutions.map((sol, i) => (i + 1) + '. ' + sol).join('\\n') + '\\n\\n' : '' }}\n\n{{ $json.safetyConcern ? '⚠️ **SAFETY NOTICE:**\\nThis issue involves a potential safety concern. ' + ($json.finalPriority === 'emergency' ? 'A contractor has been dispatched immediately.' : 'Please follow any safety precautions mentioned.') + '\\n\\n' : '' }}\n\n{{ $json.habitabilityIssue ? '🏠 **IMPORTANT:**\\nThis issue affects the habitability of your unit. We are prioritizing this repair to ensure your home remains safe and comfortable.\\n\\n' : '' }}\n\n📱 **Need Immediate Help?**\n{{ $json.finalPriority === 'emergency' ? 'For this emergency, contact us directly at: (555) 123-4567\\n\\n' : 'If the situation worsens, call our emergency line: (555) 123-4567\\n\\n' }}\n\n📸 **Documentation:**\nWe've received your photo and it's been shared with the contractor. They will document the repair process with before/after photos.\n\n🔔 **Updates:**\nYou'll receive updates when:\n• The contractor confirms their ETA\n• Work begins\n• Work is completed\n• Follow-up is needed\n\n{{ $json.likelyRecurring ? '📊 **Note:** Our system detected this may be related to previous issues. We\\'re investigating to prevent future occurrences.\\n\\n' : '' }}\n\nThank you for your patience. We're committed to resolving this quickly and professionally.\n\nBest regards,\nYour Property Management Team\n\n---\nRequest tracked by AI-powered maintenance system\nWork Order: {{ $json.workOrderNumber }}",
        "options": {},
        "subject": "=✅ Maintenance Request Received - {{ $('Parse Request Data').item.json.requestId }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "PIMDNhXNj8Zyiz3G",
          "name": "Gmail account - Deepanshi"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "32332f95-bac9-40ae-88f5-4a29053b7469",
      "name": "记录到 Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1744,
        560
      ],
      "parameters": {
        "columns": {
          "value": {
            "photo Url": "={{ $('JotForm Trigger').item.json['photo Url'] }}",
            "client Name": "={{ $('JotForm Trigger').item.json['tenant Name'].first }}",
            "unit Number": "={{ $('JotForm Trigger').item.json['unit Number'] }}",
            "tenant Email": "={{ $('JotForm Trigger').item.json['tenant Email'] }}",
            "tenant Phone": "={{ $('JotForm Trigger').item.json['tenant Phone'].full }}",
            "urgency Level": "={{ $('JotForm Trigger').item.json['urgency Level'] }}",
            "property Address": "={{ $('JotForm Trigger').item.json['property Address'] }}",
            "issue Description": "={{ $('JotForm Trigger').item.json['issue Description'] }}",
            "access Instructions": "={{ $('JotForm Trigger').item.json['access Instructions'] }}",
            "preferred Contact Method": "={{ $('JotForm Trigger').item.json['preferred Contact Method'] }}"
          },
          "schema": [
            {
              "id": "client Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "client Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tenant Phone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "tenant Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tenant Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "tenant Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "unit Number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "unit Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "property Address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "property Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "issue Description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "issue Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "urgency Level",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "urgency Level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "photo Url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "photo Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "access Instructions",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "access Instructions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred Contact Method",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred Contact Method",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "threadId",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "threadId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "labelIds",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "labelIds",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "tenant Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw/edit?usp=drivesdk",
          "cachedResultName": "property "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Kz2DdSp11rxqwlFt",
          "name": "Google Sheets account - Deepanshi"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "e6d7a830-a24f-41b1-a48f-9d6c828e7c5e",
      "name": "跟踪重复问题",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1760,
        768
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "unitNumber",
            "issueCategory"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 106049282,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw/edit#gid=106049282",
          "cachedResultName": "Recurring issue"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-QwkdSMflsGtVCJEWvDnjT65cSzwv9CdQ3Stfv4ywtw/edit?usp=drivesdk",
          "cachedResultName": "property "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Kz2DdSp11rxqwlFt",
          "name": "Google Sheets account - Deepanshi"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "d673125a-f88e-4e8a-a45e-1cf23b70f614",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        0
      ],
      "parameters": {
        "width": 304,
        "height": 832,
        "content": "📩 **触发器:维护请求**"
      },
      "typeVersion": 1
    },
    {
      "id": "4d97a799-fa71-4e7e-823c-be6b88b13659",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        128
      ],
      "parameters": {
        "width": 256,
        "height": 608,
        "content": "🧾 **解析请求数据**"
      },
      "typeVersion": 1
    },
    {
      "id": "93b4e207-6c42-4b6f-8623-38749370d67a",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -64
      ],
      "parameters": {
        "width": 368,
        "height": 880,
        "content": "🤖 **AI 维护分析**"
      },
      "typeVersion": 1
    },
    {
      "id": "e4aef349-fe72-408c-ac54-821a48b12a2a",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        304
      ],
      "parameters": {
        "width": 208,
        "height": 240,
        "content": "🔗 **提取 AI 响应**"
      },
      "typeVersion": 1
    },
    {
      "id": "cc77d5b4-9487-47e3-aa42-956cf9654705",
      "name": "便签说明4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        32
      ],
      "parameters": {
        "width": 288,
        "height": 560,
        "content": "🧩 **合并 AI 分析**"
      },
      "typeVersion": 1
    },
    {
      "id": "62884b2a-6dad-4ffe-b366-6e9f8b392b4e",
      "name": "便签说明5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        48
      ],
      "parameters": {
        "width": 304,
        "height": 400,
        "content": "⚡ **紧急路由**"
      },
      "typeVersion": 1
    },
    {
      "id": "dda2bd81-b8db-43f6-84f6-fdfb841caecc",
      "name": "便签 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        16
      ],
      "parameters": {
        "width": 304,
        "height": 640,
        "content": "📧 **承包商派遣**"
      },
      "typeVersion": 1
    },
    {
      "id": "35e4f6d8-065e-43a3-9a5b-c9777c106dfd",
      "name": "便签 7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        16
      ],
      "parameters": {
        "width": 304,
        "height": 640,
        "content": "✉️ **租户确认**"
      },
      "typeVersion": 1
    },
    {
      "id": "3317297d-26bd-470a-af8e-46244483f1aa",
      "name": "## 为什么选择 4o 模型?👆",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1632,
        -64
      ],
      "parameters": {
        "width": 336,
        "height": 1040,
        "content": "📊 **Google Sheets 日志记录**"
      },
      "typeVersion": 1
    },
    {
      "id": "7c773bbd-4bd0-427b-8a1c-e97c7822b1b3",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -304,
        976
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "8IkhtT3EbXygnvcr",
          "name": "Klinsman OpenAI"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {
    "JotForm Trigger": [
      {
        "photo Url": "",
        "tenant Name": {
          "last": "Singhal",
          "first": "Deepanshi"
        },
        "unit Number": "101",
        "tenant Email": "deepanshi@mediajade.com",
        "tenant Phone": {
          "full": "(702) 493-5915"
        },
        "urgency Level": "high",
        "property Address": {
          "city": "Bengaluru",
          "state": "Karnataka",
          "postal": "560037",
          "addr_line1": "shree homes, munnekollal",
          "addr_line2": ""
        },
        "issue Description": "tap leaking",
        "access Instructions": "key",
        "preferred Contact Method": "email"
      }
    ]
  },
  "connections": {
    "Is Emergency?": {
      "main": [
        [
          {
            "node": "Emergency Email to Contractor",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Standard Email to Contractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JotForm Trigger": {
      "main": [
        [
          {
            "node": "Parse Request Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge AI Analysis": {
      "main": [
        [
          {
            "node": "Is Emergency?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Maintenance Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Parse Request Data": {
      "main": [
        [
          {
            "node": "AI Maintenance Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract AI Response": {
      "main": [
        [
          {
            "node": "Merge AI Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Maintenance Analysis": {
      "main": [
        [
          {
            "node": "Extract AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Tenant Confirmation": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          },
          {
            "node": "Track Recurring Issues",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Standard Email to Contractor": {
      "main": [
        [
          {
            "node": "Send Tenant Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Emergency Email to Contractor": {
      "main": [
        [
          {
            "node": "Send Tenant Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级

需要付费吗?

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

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

适合高级用户,包含 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 查看

分享此工作流