Skip to content

The moment it happens

Turn tenant repair texts into tickets and alert the vendor

When a tenant texts about a problem, an Airtable ticket is created with an urgency rating, the right vendor gets a text, and the tenant gets a confirmation.

Runs
The moment it happens
Apps
Airtable, Twilio
AI
Yes, uses the built-in AI allowance
Access
read/write records; Twilio send

Send this to your assistant

Create a ClickRuntime automation: when a tenant texts a problem to my Twilio number, create a ticket in my Airtable 'Maintenance' table, have AI sort it by trade and urgency, text the matching vendor from my 'Vendors' table, and confirm to the tenant.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A small property manager looks after sixty flats. Tenants text a personal mobile about leaks, broken boilers and stuck windows at all hours. The manager has to work out how urgent each one is, find the right plumber or electrician, pass on the details and keep track of what is still open. Things fall through when the phone is full of messages.

Turning each text into a ticket with a trade and urgency, and texting the right vendor straight away, means a leak at 11 p.m. reaches the plumber in seconds and every request has a record. The manager reviews the Maintenance table instead of scrolling through texts.

What you get out of it

  • Every request becomes a ticket

    Each text is saved in Airtable with the tenant's number, the problem, the trade and the urgency.

  • Urgent jobs reach the vendor at once

    AI sorts the request into plumbing, electrical, heating or general, and the matching vendor from your Vendors table gets a text with the details.

  • Tenants know it was received

    The tenant gets a confirmation with a ticket reference, so they stop chasing.

  • One place to track open jobs

    The Maintenance table shows every request and its status, so nothing is forgotten.

How it works

What happens, step by step

  1. A tenant texts your Twilio number, and Twilio passes the message to ClickRuntime.

  2. AI reads the message and decides the trade needed and whether it is urgent.

  3. A ticket is created in your Airtable Maintenance table.

  4. The vendor for that trade, from your Vendors table, gets a text with the details.

  5. The tenant gets a confirmation text with the ticket reference.

Before it runs live

  • Connect Airtable
  • Connect Twilio
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Turn tenant repair texts into tickets and alert the vendorjust nowSucceeded
SMS · Vendor alertURGENT Job 7QK2A: Water leaking through kitchen ceiling at 14 Contoso Court, flat 3. Tenant: +447700900456

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Act only on the items that match your own rules, and skip the rest
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Slack
  • Combine it with other Airtable and Twilio steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
tenant_maintenance_requests_by_sms.pyexample
from clickruntime import on_event, credentials, http, ai
BASE_ID, FROM = "appXXXXXXXXXXXXXX", "+447700900000"
SCHEMA = {"type": "object", "properties": {"trade": {"enum": ["Plumbing", "Electrical", "Heating", "General"]},
          "urgent": {"type": "boolean"}, "summary": {"type": "string"}}, "required": ["trade", "urgent", "summary"]}
def sms(to, body):
    sid = credentials.secret("TWILIO_ACCOUNT_SID")
    return http.post(f"https://api.twilio.com/2010-04-01/Accounts/{sid}/Messages.json",
                     auth=(sid, credentials.secret("TWILIO_AUTH_TOKEN")), data={"From": FROM, "To": to, "Body": body})
@on_event
def handle(event):
    msg = event.json or {}
    tenant, text = msg.get("From"), (msg.get("Body") or "").strip()
    if not tenant or not text:
        return {"ignored": True}
    job = ai.generate(text[:1500], json_schema=SCHEMA, max_output_tokens=120,
                      system="Classify this tenant repair request by trade; urgent if leak, no heat or hot water, electrical danger, gas or security.").json
    api = f"https://api.airtable.com/v0/{BASE_ID}"
    headers = {"Authorization": f"Bearer {credentials.connection('airtable', 'work')}"}
    ticket = http.post(f"{api}/Maintenance", headers=headers, json={"typecast": True, "records": [{"fields": {
        "Tenant phone": tenant, "Message": text, "Trade": job["trade"], "Urgent": job["urgent"],
        "Summary": job["summary"], "Status": "Open"}}]}).json()["records"][0]
    ref = ticket["id"][-5:].upper()
    vendor = http.get(f"{api}/Vendors", headers=headers, params={"filterByFormula": f"{{Trade}}='{job['trade']}'", "maxRecords": 1}).json()["records"]
    if vendor:
        flag = "URGENT " if job["urgent"] else ""
        sms(vendor[0]["fields"]["Phone"], f"{flag}Job {ref}: {job['summary']}. Tenant: {tenant}")
    sms(tenant, f"Thanks, we've logged your request (ref {ref}) and passed it to our {job['trade'].lower()} contractor.")
    return {"ticket": ticket["id"], "urgent": job["urgent"]}

FAQ

Common questions

How does it know the tenant's flat?
It matches the sender's number against a Tenants table if you have one. Otherwise the ticket holds the number and the message, and the vendor text includes both.
What counts as urgent?
AI marks a request urgent when it involves water leaks, no heating or hot water, electrical danger, gas or security, such as a broken front door lock. Everything else is routine.
Can I approve jobs before the vendor is texted?
Yes. Ask your AI assistant to text vendors only for urgent tickets, and leave routine ones in Airtable for you to assign.
What permissions does it need?
read/write records; Twilio send. Nothing else in your accounts is used.
Does it need AI?
Yes. It uses ClickRuntime's built-in AI, so you don't need an OpenAI or Anthropic key. Every plan includes a monthly AI allowance.
How many runs does it use?
One run for each event the app sends.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Turn tenant repair texts into tickets and alert the vendor” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.