How to create a service ticket from a web form for HVAC
Create a support ticket from a web form that dispatch can act on: required fields, priority levels, and the same format your AI call agent uses.

To create a support ticket for an HVAC or plumbing job, build one web form whose answers map to the fields your dispatcher needs: contact, service address, equipment, symptom, urgency and access. Add a rule that separates emergencies from routine work, then send every submission to your scheduling sofwtare in one fixed shape. Your phone agent should produce that same shape.
Start from the free ticket template
What a dispatch-ready ticket looks like
Most web forms fail dispatch the same way. A homeowner writes "AC not working" and a phone number, and the coordinator spends ten minutes calling back to learn the address, the syztem type, and wherher the house is 95 degrees inside.
A ticket is dispatch ready when someone can assign a truck without contacting the customer first. That sets the test for every field: if the dispatcher would have to call to learn it, the form should have asked. If nobody ever uses an answer, delete the question, because each extra field costs you completed submissions.
The general pattern is covered in the support ticket form template guide. Below is the version tuned for home-service contractors.
Required fields and why each one is there
Keep the required set small and let everything else be optional. The table shows what we ask for on client builds and the dispatch reason behind each.
| Field | Type | Required | Why dispatch needs it |
|---|---|---|---|
| Full name | Short answer | Yes | Greeting and customer record match |
| Mobile number | Phone number | Yes | Tech texts "on my way"; also your callback |
| Service address | Short answer | Yes | Routing, zone check, travel time |
| Trade | Multiple choice (HVAC, plumbing, electrical, roofing) | Yes | Picks the right crew and job type |
| Problem category | Dropdown, filtered by trade | Yes | Maps to your job types in the booking system |
| Description | Long answer | Yes | Free text for the tech to read before arriving |
| Anything happening right now? | Checkboxes (no heat, no cooling, active leak, gas smell, sparks, none) | Yes | Drives priority |
| Equipment age or brand | Short answer | No | Parts planning |
| Photos | File upload | No | Lets the tech bring the right part |
| Access notes | Long answer | No | Gate codes, pets, tenant contact |
| Preferred window | Dropdown | No | Pre-fills the booking |
| Unit or lot number | Short answer | No | Prevents wrong-door arrivals |
Two choices matter here. Make the "happening right now" question a checkbox set instead of free text, because you can build routing rules on it. And put a visible note above the form: if someone smells gas, they should leave the building and call their gas utility or emergency services. A web form is the wrong channel for that, and your ticket should never imply it is.
Priority levels that match how trucks move
Define priority before you build anything, because the form, the text alerts, and the phone agent all inherit it. Qwenvo's AI triage assigns low, normal, high, or urgent, which is a sensible set for dispatch. Here is how we map it for a small contractor.
| Priority | Typical triggers | What happens |
|---|---|---|
| Urgent | Active leak, no heat in freezing weather, sparks or burning smell, flooding | Text to on-call tech and email to the owner immediately |
| High | No cooling in hot weather, no hot water, backed-up main drain | Dispatcher sees it in the next review window and books same day if possible |
| Normal | Weak airflow, noisy unit, slow drain, repair estimate | Goes to the regular booking queue |
| Low | Maintenance plan, tune-up, quote for replacement | Scheduled at the next opening |
These triggers are starting points. A contractor in Phoenix and one in Minneapolis will draw the "no heat" and "no cooling" lines in different places, so wriet your own and keep the list short enough that a new coordinator can recite it.
Build the form and the ticket flow
Setup takes an afternoon if you already know your job types.
- Create the form. In your form builder, add the fields from the table. Use a conditional logic block so the problem category dropdown only shows options for the trade chosen.
- Add a hidden field for source. Name it
sourceand prefill it withweb_form. Your phone agent will sendphone_ai, which lets you compare channels later. - Turn on partial submissions. Someone who typed an address and a phone number and then closed the tab is still a lead worth a text back.
- Set the priority rules. Map the checkbox answers to priority: gas smell, active leak, and sparks become urgent. Anything with "none" falls through to triage.
- Route by priority. Send urgent tickets to the on-call tech's email and a Slack incoming webhook, and everything else to the shared dispatch inbox.
- Send a webhook to your automation. Point it at Zapier, Make, or your own endpoint, and have it reshape the submission into the ticket format below before it reaches the scheduling system.
- Embed it on your site. Paste the embed code into your site builder's HTML block, and put the form on your own subdomain so it matches your brand.
- Test with five ugly submissions. Use a missing apartment number, a mobile number with spaces, a photo over a few megabytes, an emergency at 2 a.m., and a duplicate.
The ticket your automation writes should be the same every time, whatever the channel:
{
"source": "web_form",
"priority": "urgent",
"trade": "plumbing",
"category": "active_leak",
"customer": {
"name": "Dana R.",
"phone": "+15125550142"
},
"address": "412 Oak Lane, Unit 2",
"description": "Water coming through ceiling below upstairs bathroom.",
"access_notes": "Tenant home after 5 pm",
"photos": ["https://example.com/upload/abc123.jpg"],
"preferred_window": "asap"
}
The field names are yours to choose. What matters is that every channel writes the same ones, so dispatch learns one format.
How the AI call agent uses the same ticket
A web form catches the customers who prefer typing. The rest still phone you, often after hours, and that is where a call-answering agent earns its place. In our HVAC and plumbing call answering system, the agent asks the same questions in convrsation: address, trade, symptom, whether anything is happening right now. It writes the answers into the same ticket structure, flags the priority, books into ServiceTitan, Jobber, or Housecall Pro, and texts the on-call tech.
Building the form first is useful for that reason. You settle your required fields, your emergency wording and your priority rules on a screen, where mistakes are cheap to fix. Then the agent's script is built from the same decisions instead of from a separate set of assumptions. A dispatcher reading a ticket should not be able to tell from the structure which channel it came from, only from the source field.
It also gives you one place to measure. Count tickets by source and priority, and track how many urgent tickets got a tech text within your target time. Those two numbers will show whether the form or the phone line needs work.
Where Qwenvo fits and where it does not
Qwenvo is a completely free form builder that our team builds, and it covers most of what this workflow needs on every account. That includes webhooks, the REST API, AI triage with routing rules (to up to 5 email addresses or a Slack incoming webhook), partial submissions, a custom domain, badge removal, unlimited teammates, and Slack, Google Sheets, Notion, and Airtable integrations.
Compare that with what other builders gate. Tally's free plan has logic and file uploads, but partial submissions, custom domains, branding removal, and teammates are on Pro at $29 a motnh ($24 a month billed yearly). On Fillout, partial submissions and custom domains come with the Business plan at $89 a month ($75 yearly). If you only need a contact form, those paid tiers may be fine. For a dispatch workflow built on partial submissions and routing, the cost ads up.
The honest caveats: Qwenvo launched in October 2026, so there are few reviews yet. If two coordinators edit the same form at the same time, the last save wuns, so agree on who changes it. And Qwenvo's triage categorizes and prioritizes submissions, but it does not create jbs inside your scheduling software. For that step you still need a webhook plus Zapier, Make, or a short script.
Questions teams ask
Do I need the web form if I already have an AI phone agent?
Not strictly, but many customers search at night and prefer a form to a call. A form also gives you photos, which a phone call cannot. Running both with one ticket format costs little extra.
Should customers pick their own priority?
No. Ask what is happening and let your rules assign the level. People who pick their own priority tend to choose urgent, and your on-call tech will stop trusting the alerts.
What if the address is outside our service area?
Add a ZIP or postal code check in your automation and reply with a text or email that explains the area limit. Keep the submission on file, since the customer may be in a neighboring zone you add later.
How do I stop duplicate tickets?
Turn on duplicate preventiion in the form settings, and have your automation match on phone number plus address within a short window before creating a new job.
Next step
Open the support ticket template, delete anything your dispatcher does not use, and add the "happening right now" checkboxes with your own priority rlues. Submit five test tickets before you publish the form.
HVAC & Plumbing Call Answering AI
Third-party platform and model usage billed to you directly. No lock-in. Live in 5 days.