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.
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
A tenant texts your Twilio number, and Twilio passes the message to ClickRuntime.
AI reads the message and decides the trade needed and whether it is urgent.
A ticket is created in your Airtable Maintenance table.
The vendor for that trade, from your Vendors table, gets a text with the details.
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
Build your own
Need it to work differently?
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
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?
What counts as urgent?
Can I approve jobs before the vendor is texted?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Answer texted questions from your Airtable info
People text a question to your number and get a short answer drawn from the details you keep in Airtable.
See how it worksReply to texts with the weather and log each request
Someone texts a town name and gets the current weather back, and every request is logged in Airtable.
See how it worksText appointment reminders and follow-ups from Airtable
Leads who haven't booked get a friendly follow-up text, booked clients get a reminder the day before, and each record is updated.
See how it worksKeep exploring
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.