使用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)可能需要您自行付费。
相关工作流推荐
使用 GPT-4 分析和 JotForm 离职面谈自动化员工离职流程
使用 GPT-4 分析和 JotForm 离职面谈实现员工离职流程自动化
If
Set
Code
+6
20 节点Jitesh Dugar
使用 JotForm、GPT-4o-mini 和 Google Workspace 自动化员工入职
使用 JotForm、GPT-4o-mini 和 Google Workspace 实现员工入职自动化
If
Set
Code
+6
14 节点Jitesh Dugar
使用 Jotform、GPT-4 分析和 Gmail 通知自动化贷款预审批
使用 Jotform、GPT-4 分析和 Gmail 通知自动化贷款预审批
If
Set
Code
+6
21 节点Jitesh Dugar
车辆检查与维护工作流自动化
使用OpenAI和JotForm自动化车辆检查与维护工作流
If
Set
Code
+6
20 节点Jitesh Dugar
使用GPT-4、JotForm和Google Sheets的自动化企业培训请求
使用GPT-4、JotForm和Google Sheets的自动化企业培训请求
If
Set
Code
+6
21 节点Jitesh Dugar
构建基于GPT-4、Jotform和Google Sheets的AI员工认可系统
构建基于GPT-4、Jotform和Google Sheets的AI员工认可系统
If
Set
Code
+7
24 节点Jitesh Dugar
工作流信息
难度等级
高级
节点数量21
分类-
节点类型9
作者
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 查看 →
分享此工作流