Automatización de solicitudes de mantenimiento de propiedades con GPT-4o-mini, JotForm y Gmail

Avanzado

Este es unautomatización que contiene 21 nodos.Utiliza principalmente nodos como If, Set, Code, Gmail, GoogleSheets. Automatizar las solicitudes de mantenimiento de propiedades con GPT-4o-mini, JotForm y Gmail

Requisitos previos
  • Cuenta de Google y credenciales de API de Gmail
  • Credenciales de API de Google Sheets
  • Clave de API de OpenAI

Categoría

-
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "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": "Analizar Datos de la Solicitud",
      "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": "Análisis de Mantenimiento con IA",
      "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": "Extraer Respuesta de la IA",
      "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": "Combinar Análisis de IA",
      "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": "¿Es una Emergencia?",
      "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": "Correo de Emergencia al Contratista",
      "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": "Correo Estándar al Contratista",
      "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": "Enviar Confirmación al Inquilino",
      "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": "Registrar en 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": "Seguimiento de Problemas Recurrentes",
      "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": "Nota Adhesiva",
      "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": "Nota Adhesiva1",
      "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": "Nota Adhesiva2",
      "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": "Nota Adhesiva3",
      "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": "Nota Adhesiva4",
      "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": "Nota Adhesiva5",
      "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": "Nota Adhesiva6",
      "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": "Nota Adhesiva7",
      "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": "Nota Adhesiva8",
      "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos21
Categoría-
Tipos de nodos9
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

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.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34