Skip to main content
Agents

Property Management Repairs Agent

An AI agent to get organise your tenant's repairs.

Written By William Bowen

Last updated Over 1 year ago

Intro

This AI Agent automates tenant repair requests by handling conversations, identifying needed repairs, and updating tenant contact cards with detailed requests. Property managers simply send a campaign, and the next day, they can review a compiled list of repairs—like "leaky faucet in Apt 302" or "broken heater in Apt 415"—without manual follow-ups.

Use cases

10 Specific Use Cases for This AI Agent

  1. Maintenance Requests Collection
    Example: AI gathers reports like “leaky faucet in Apt 302” or “heating not working in Apt 415” and updates the contact database.

  2. Urgent Repair Detection
    Example: AI identifies urgent issues like “electrical sparks from outlet in Apt 210” and flags them for immediate action.

  3. Follow-up on Incomplete Repairs
    Example: If a tenant mentions, “The plumber came but the sink is still dripping,” the AI updates the record and prompts a follow-up.

  4. Seasonal Maintenance Surveys
    Example: Before winter, AI asks tenants about heating or insulation issues and compiles responses like “cold drafts from windows in Apt 503.”

  5. Recurring Issue Tracking
    Example: AI notices repeated mentions of “low water pressure in multiple units” and highlights it as a building-wide concern.

  6. Tenant Satisfaction & Feedback
    Example: AI asks if recent repairs were completed satisfactorily, logging responses like “Bathroom leak fixed, but paintwork was left messy.”

  7. Pre-Move-Out Inspection Scheduling
    Example: AI detects a tenant saying, “I’m moving out next month” and prompts them to schedule an inspection.

  8. Pest Infestation Reports
    Example: AI recognizes mentions of “cockroaches in the kitchen” or “mice in storage rooms” and compiles infestation reports.

  9. Noise & Neighbor Complaints
    Example: AI logs tenant messages like “Upstairs neighbor’s plumbing is making loud noises at night” for property manager review.

  10. Utility & Common Area Issues
    Example: AI gathers complaints about shared spaces, like “Laundry room dryer not working” or “Elevator buttons are unresponsive.”

Template

{
  "$schema": "https://web-api.clerk.chat/pipeline-schema",
  "name": "Property Repairs Agent",
  "nodes": [
    {
      "type": "ai_bot",
      "name": "Brain",
      "triggeredBy": [
        "unreadMessage.fromAny"
      ],
      "responseType": "json",
      "nodeConfig": {
        "modelProvider": "openai",
        "modelVersion": null,
        "maxTokens": null,
        "temperature": null,
        "variables": {},
        "prompt": "Your goal is to read the conversation history and extract the repair the tenant needs on their apartment.\n\nIf the tenant has mentioned a repair, output the repair. \n\nIf the tenant has no repairs, output: No repair.",
        "promptSections": [],
        "sectionTemplates": {},
        "responseSchema": {
          "type": "object",
          "required": [
            "repair"
          ],
          "properties": {
            "repair": {
              "type": "string"
            }
          }
        },
        "opts": {
          "sendStructuredConvo": true
        }
      }
    },
    {
      "type": "ai_bot",
      "name": "Conclude conversation",
      "triggeredBy": [
        "unreadMessage.fromAny"
      ],
      "responseType": "user_message",
      "nodeConfig": {
        "modelProvider": "openai",
        "modelVersion": null,
        "maxTokens": null,
        "temperature": null,
        "variables": {},
        "prompt": "Read the conversation history. By now, the tenant should have told you that they have a repair (and what it is) or told you they don't have any repairs. \n\nYour goal is to conclude the conversation appropriately.",
        "promptSections": [],
        "sectionTemplates": {},
        "responseSchema": {
          "type": "object",
          "required": [],
          "properties": {}
        },
        "opts": {
          "sendStructuredConvo": true
        }
      }
    },
    {
      "type": "tool_runner",
      "name": "Save repair",
      "triggeredBy": [
        "unreadMessage.fromAny"
      ],
      "responseType": "json",
      "nodeConfig": {
        "type": "contact_tools",
        "config": {},
        "enabledTools": [
          "set_attribute"
        ],
        "tools": {
          "set_attribute": {
            "paramValues": {
              "attributeName": {
                "type": "fixed",
                "value": "Repair"
              },
              "attributeValue": {
                "path": "repair",
                "type": "pipeline-variable"
              }
            }
          }
        }
      }
    },
    {
      "type": "ai_bot",
      "name": "Extract repair",
      "triggeredBy": [
        "unreadMessage.fromAny"
      ],
      "responseType": "user_message",
      "nodeConfig": {
        "modelProvider": "openai",
        "modelVersion": null,
        "maxTokens": null,
        "temperature": null,
        "variables": {},
        "prompt": "Your goal is to read the conversation and ask the tenant if they have any repairs needed.",
        "promptSections": [],
        "sectionTemplates": {},
        "responseSchema": {
          "type": "object",
          "required": [
            "repair"
          ],
          "properties": {
            "repair": {
              "type": "string"
            }
          }
        },
        "opts": {
          "sendStructuredConvo": true
        }
      }
    },
    {
      "type": "trigger",
      "name": "Start",
      "triggeredBy": [
        "userMessage"
      ],
      "responseType": "json"
    }
  ],
  "edges": [
    {
      "name": null,
      "sourceNode": "Save repair",
      "destinationNode": "Conclude conversation",
      "sourceVariables": null,
      "filters": []
    },
    {
      "name": "Repair identified",
      "sourceNode": "Brain",
      "destinationNode": "Save repair",
      "sourceVariables": null,
      "filters": [
        {
          "type": "rule",
          "config": {
            "syntax": {
              "!": [
                {
                  "isEmpty": [
                    {
                      "var": "message.repair"
                    }
                  ]
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "No repair",
      "sourceNode": "Brain",
      "destinationNode": "Extract repair",
      "sourceVariables": null,
      "filters": [
        {
          "type": "rule",
          "config": {
            "syntax": {
              "isEmpty": [
                {
                  "var": "message.repair"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": null,
      "sourceNode": "Start",
      "destinationNode": "Brain",
      "sourceVariables": null,
      "filters": []
    }
  ]
}