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スプレッドシートへの記録",
"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": "📩 **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": "付箋1",
"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": "付箋2",
"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": "付箋3",
"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": "付箋4",
"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": "付箋5",
"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": "付箋6",
"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": "付箋7",
"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": "付箋8",
"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チャットモデル",
"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
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
GPT-4を使用してJotFormを活用した退職インタビューによる従業員の離職プロセスの自動化
GPT-4を使用してJotFormの入退社インタビューを活用した従業員離職業務の自動化
If
Set
Code
+
If
Set
Code
20 ノードJitesh Dugar
JotForm、GPT-4o-mini、Google Workspaceを使用した従業員の入社業務の自動化
JotForm、GPT-4o-mini、Google Workspaceを使用した従業員採用業務の自動化
If
Set
Code
+
If
Set
Code
14 ノードJitesh Dugar
Jotform、GPT-4 を使用した貸出前審査の自動化と Gmail による通知
Jotform、GPT-4、アнализローン承認前通知をGmailで自動化
If
Set
Code
+
If
Set
Code
21 ノードJitesh Dugar
車両点検とメンテナンスワークフロー自動化
OpenAI および JotForm を使用した車両点検およびメンテナンス ワーキングフローの自動化
If
Set
Code
+
If
Set
Code
20 ノードJitesh Dugar
GPT-4、JotForm、そしてGoogleスプレッドシートを使った自動企業研修リクエスト
GPT-4、JotForm、Google シートを用いた自動企業研修リクエスト
If
Set
Code
+
If
Set
Code
21 ノードJitesh Dugar
GPT-4、Jotform、Google スプシを基盤としたAI従業員賞賛システムの構築
GPT-4、Jotform、Google スプレッドシートを基にした AI 従業員認रूムシステムを構築
If
Set
Code
+
If
Set
Code
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で表示 →
このワークフローを共有