Automatisierung von Wartungsanfragen für Immobilien mit GPT-4o-mini, JotForm und Gmail

Experte

Dies ist ein Automatisierungsworkflow mit 21 Nodes. Hauptsächlich werden If, Set, Code, Gmail, GoogleSheets und andere Nodes verwendet. Automatisierung von Wartungsanfragen für Immobilien durch GPT-4o-mini, JotForm und Gmail

Voraussetzungen
  • Google-Konto + Gmail API-Anmeldedaten
  • Google Sheets API-Anmeldedaten
  • OpenAI API Key

Kategorie

-
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "5661c7cd-d26d-4170-9b40-f62a005ded25",
      "name": "JotForm Trigger",
      "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": "Anfragedaten parsen",
      "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": "KI-Wartungsanalyse",
      "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": "KI-Antwort extrahieren",
      "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": "KI-Analyse zusammenführen",
      "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": "Notfall?",
      "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": "Notfall-E-Mail an Auftragnehmer",
      "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": "Standard-E-Mail an Auftragnehmer",
      "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": "Bestätigung an Mieter senden",
      "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": "In Google Sheets protokollieren",
      "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": "Wiederkehrende Probleme verfolgen",
      "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": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        0
      ],
      "parameters": {
        "width": 304,
        "height": 832,
        "content": "📩 **TRIGGER: Maintenance Request**\n\nCaptures tenant maintenance requests via JotForm:\n\n**Required Fields:**\n• Tenant name, email, phone\n• Unit number & property address\n• Issue description (long text)\n• Urgency level (dropdown)\n• Photo upload\n• Access instructions\n• Preferred contact method\n\n**Form Setup:**\nCreate form at [JotForm](https://www.jotform.com/?partner=mediajade)\n\n**Field Types:**\n- Single line text\n- Email\n- Phone number\n- Long text (description)\n- Dropdown (urgency: emergency, urgent, normal)\n- File upload (photo)\n- Textarea (access info)"
      },
      "typeVersion": 1
    },
    {
      "id": "4d97a799-fa71-4e7e-823c-be6b88b13659",
      "name": "Notizzettel1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        128
      ],
      "parameters": {
        "width": 256,
        "height": 608,
        "content": "🧾 **PARSE REQUEST DATA**\n\nNormalizes maintenance request from JotForm.\n\nHandles various field formats and creates standardized request object.\n\nGenerates unique request ID for tracking."
      },
      "typeVersion": 1
    },
    {
      "id": "93b4e207-6c42-4b6f-8623-38749370d67a",
      "name": "Notizzettel2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -64
      ],
      "parameters": {
        "width": 368,
        "height": 880,
        "content": "🤖 **AI MAINTENANCE ANALYSIS**\n\n**Advanced AI Agent categorizes and prioritizes:**\n\n✅ **Issue Categorization**\n- Primary category (plumbing, electrical, HVAC, etc.)\n- Secondary sub-categories\n- Confidence scoring\n\n✅ **Priority Assessment**\n- Emergency keywords detection\n- Safety concern flagging\n- Habitability issue identification\n- Legal compliance checking\n\n✅ **Vendor Recommendation**\n- Optimal contractor type\n- Required specialization\n- Urgency level for dispatch\n\n✅ **Complexity Analysis**\n- Simple/moderate/complex/major\n- Estimated hours\n- Specialist requirement\n\n✅ **Cost Estimation**\n- Budget range\n- Cost factors\n\n✅ **Smart Communication**\n- Tenant messaging\n- Contractor instructions\n- Safety protocols\n\n✅ **Preventive Intelligence**\n- Recurring issue detection\n- Warranty applicability\n- Prevention recommendations\n\n**AI Model:** GPT-4 for accuracy"
      },
      "typeVersion": 1
    },
    {
      "id": "e4aef349-fe72-408c-ac54-821a48b12a2a",
      "name": "Notizzettel3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        304
      ],
      "parameters": {
        "width": 208,
        "height": 240,
        "content": "🔗 **EXTRACT AI RESPONSE**\n\nExtracts structured JSON from AI Agent.\n\nPrepares data for merging with request details."
      },
      "typeVersion": 1
    },
    {
      "id": "cc77d5b4-9487-47e3-aa42-956cf9654705",
      "name": "Notizzettel4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        32
      ],
      "parameters": {
        "width": 288,
        "height": 560,
        "content": "🧩 **MERGE AI ANALYSIS**\n\n**Intelligent data fusion:**\n\n• Combines request with AI insights\n• Selects appropriate contractor from database\n• Generates work order number\n• Calculates priority scores\n• Handles parsing errors gracefully\n\n**Contractor Database:**\n- Plumber\n- Electrician\n- HVAC Technician\n- Handyman\n- Locksmith\n- Pest Control\n- General Contractor\n\nEach with contact details for auto-routing!"
      },
      "typeVersion": 1
    },
    {
      "id": "62884b2a-6dad-4ffe-b366-6e9f8b392b4e",
      "name": "Notizzettel5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        48
      ],
      "parameters": {
        "width": 304,
        "height": 400,
        "content": "⚡ **EMERGENCY ROUTING**\n\nChecks if issue is emergency priority.\n\n**TRUE:** Sends urgent dispatch email\n**FALSE:** Sends standard work order\n\nEmergency emails include:\n- Immediate response required\n- Safety protocols highlighted\n- Legal compliance notices\n- Direct phone contact"
      },
      "typeVersion": 1
    },
    {
      "id": "dda2bd81-b8db-43f6-84f6-fdfb841caecc",
      "name": "Notizzettel6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        16
      ],
      "parameters": {
        "width": 304,
        "height": 640,
        "content": "📧 **CONTRACTOR DISPATCH**\n\n**Emergency Email:**\n🚨 Immediate attention required\n- All critical details\n- Safety protocols\n- Legal compliance notes\n- Requires immediate ETA response\n\n**Standard Work Order:**\n📋 Comprehensive work order\n- Complete AI analysis\n- Contractor instructions\n- Documentation requirements\n- Preventive recommendations\n\nBoth include:\n- Tenant contact info\n- Access instructions\n- Photo links\n- Cost estimates\n- AI insights"
      },
      "typeVersion": 1
    },
    {
      "id": "35e4f6d8-065e-43a3-9a5b-c9777c106dfd",
      "name": "Notizzettel7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        16
      ],
      "parameters": {
        "width": 304,
        "height": 640,
        "content": "✉️ **TENANT CONFIRMATION**\n\n**Professional acknowledgment email:**\n\n✅ Request received confirmation\n✅ AI analysis summary\n✅ Assigned contractor details\n✅ Estimated timeline\n✅ Temporary solutions (if applicable)\n✅ Safety notices (if relevant)\n✅ Habitability alerts (if urgent)\n✅ Emergency contact info\n✅ Update schedule\n\n**Dynamic Content:**\n- Emergency vs standard messaging\n- Safety warnings when flagged\n- Temp solutions from AI\n- Recurring issue notifications\n\nBuilds trust with transparency!"
      },
      "typeVersion": 1
    },
    {
      "id": "3317297d-26bd-470a-af8e-46244483f1aa",
      "name": "Notizzettel8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1632,
        -64
      ],
      "parameters": {
        "width": 336,
        "height": 1040,
        "content": "📊 **GOOGLE SHEETS LOGGING**\n\n**Main Request Log:**\nTracks all maintenance requests with:\n- Request & work order IDs\n- Tenant details\n- Issue categorization\n- AI analysis results\n- Priority assessment\n- Contractor assignment\n- Cost estimates\n- Status tracking\n\n**Recurring Issues Tracker:**\nSeparate sheet for pattern analysis:\n- Unit number\n- Issue category\n- Occurrence dates\n- Preventive recommendations\n\n**Analytics Ready:**\n✓ Response time metrics\n✓ Contractor performance\n✓ Cost analysis\n✓ Recurring issue identification\n✓ Tenant satisfaction tracking\n✓ AI accuracy measurement\n\nConnect to Data Studio for dashboards!"
      },
      "typeVersion": 1
    },
    {
      "id": "7c773bbd-4bd0-427b-8a1c-e97c7822b1b3",
      "name": "OpenAI Chat Model",
      "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": {
    "4e267be8-b8a5-46de-9598-303dbe3e0481": {
      "main": [
        [
          {
            "node": "43d6ddfb-7629-4fa2-86bd-1bc09f3a953c",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ea9fd8e1-825f-4438-9fc5-46900019e0bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5661c7cd-d26d-4170-9b40-f62a005ded25": {
      "main": [
        [
          {
            "node": "1929aeb3-feab-43a0-b755-680568c9e239",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc2f820d-a761-4960-8617-5ef22110be24": {
      "main": [
        [
          {
            "node": "4e267be8-b8a5-46de-9598-303dbe3e0481",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7c773bbd-4bd0-427b-8a1c-e97c7822b1b3": {
      "ai_languageModel": [
        [
          {
            "node": "abcf8b09-1c79-49d7-8207-7896070bc9a0",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "1929aeb3-feab-43a0-b755-680568c9e239": {
      "main": [
        [
          {
            "node": "abcf8b09-1c79-49d7-8207-7896070bc9a0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2f21e918-270c-481d-870c-bff0576ec812": {
      "main": [
        [
          {
            "node": "fc2f820d-a761-4960-8617-5ef22110be24",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "abcf8b09-1c79-49d7-8207-7896070bc9a0": {
      "main": [
        [
          {
            "node": "2f21e918-270c-481d-870c-bff0576ec812",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "06d7272f-ee56-4acd-9731-344995d4e56e": {
      "main": [
        [
          {
            "node": "32332f95-bac9-40ae-88f5-4a29053b7469",
            "type": "main",
            "index": 0
          },
          {
            "node": "e6d7a830-a24f-41b1-a48f-9d6c828e7c5e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ea9fd8e1-825f-4438-9fc5-46900019e0bc": {
      "main": [
        [
          {
            "node": "06d7272f-ee56-4acd-9731-344995d4e56e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "43d6ddfb-7629-4fa2-86bd-1bc09f3a953c": {
      "main": [
        [
          {
            "node": "06d7272f-ee56-4acd-9731-344995d4e56e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes21
Kategorie-
Node-Typen9
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Autor
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.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34