Skip to content
AgenticHacks
All hacks

Trades agent system

Book the missed call into ServiceTitan

An unanswered call, or any after-hours call, goes to a voice agent that classifies the job, pages the on-call tech for emergencies, and books repairs into ServiceTitan.

Difficulty
Difficulty 4 of 5 in the research brief.
Setup time
Estimate, not from the brief: several days after ServiceTitan API access is approved, because the emergency branch has to be tested with a real on-call phone.

The pain

Home-service shops lose jobs when the phone rings and nobody picks up. The caller does not wait, and almost nobody leaves a voicemail.

Workflow
  1. Unanswered after 3 rings, or after hours

  2. RingCentral or CallRail sends the call to Grok Voice (or Retell/Vapi)

  3. Look up the caller in ServiceTitan and confirm the address if they are known

  4. Classify: emergency, repair, estimate, existing job, or out of area

  5. Branch

    • Emergency

      No heat below 40°F outside, an active leak, or a burning smell. Quote the after-hours fee, text the on-call tech, and escalate to the owner if there is no acknowledgment in 5 minutes.

    • Repair

      Offer two open slots and book the job through the ServiceTitan API, with a summary in the job notes.

    • Out of area or wrong trade

      Say so plainly and refer. Do not book a job you will not run.

  6. SMS confirmation, then post the transcript and tag the lead source

Trigger

The call is not answered in 3 rings, or it is any after-hours call. RingCentral or CallRail forwards it to a Twilio number on Grok Voice (model grok-voice-3.0, alias grok-voice-latest). Retell or Vapi can take that same forward if you are not using Grok Voice.

Data sources

  • ServiceTitan customers, locations, job types, and technician availability
  • A price-book summary, including the after-hours fee
  • The service-area zip list
  • CallRail or the phone system for the caller ID and the transcript

Voice layer

Recommended first option: Grok Voice by xAI, model grok-voice-3.0 (alias grok-voice-latest). Retell and Vapi stay as alternatives.

Published xAI price for grok-voice-3.0: $0.08 per minute of audio ($4.80 per hour), plus $0.004 per text input. A text input is a conversation.item.create, except function_call_output items and audio items. response.create is not billed as a text input.

At $0.08 a minute, 200 minutes of calls is 200 × $0.08 = $16 of speech. Each billed text input adds $0.004, so a handful of text items on those calls is cents, not another per-minute rate. An hour of audio is $4.80 before text inputs. Retell and Vapi remain alternatives and are priced by those vendors.

Latency. xAI's own claim is sub-second speech-to-speech latency. That is a vendor claim. This site has not measured it.

  • 10 concurrent sessions per team, from the speech-to-speech rate limits.
  • 120-minute maximum session.

Function calling is built in, including custom functions, so a tool in the session can book into ServiceTitan directly. You still implement that function against the ServiceTitan API. ServiceTitan's own limits stay in force: Zapier registration is required, and ServiceTitan says that integration is not officially supported.

Twilio setup

A. Elastic SIP trunk. In Twilio, set the origination URI to sip:{number}@sip.voice.x.ai;transport=tls and assign the shop number. Register that number with xAI as origin byo_trunk and a webhook, and store the signing secret (xAI returns it once). On the signed realtime.call.incoming webhook, verify webhook-id, webhook-timestamp, and webhook-signature, then read data.call_id. Connect to wss://api.x.ai/v1/realtime?call_id={call_id} with your API key, send session.update, then response.create. Transfers go to POST /v1/realtime/calls/{id}/refer. Turn on call transfer on the Twilio trunk if you transfer mid-call.

B. Twilio Media Streams. Your server passes μ-law (PCMU, 8 kHz) audio straight through to wss://api.x.ai/v1/realtime, with no PCM conversion. The xAI phone cookbook shows this path and says the examples are not production-ready without extra hardening.

Build it

  1. 1

    Forward only the calls a person did not answer

    In RingCentral or CallRail, send unanswered calls and the after-hours schedule to the Twilio number wired to Grok Voice. The Voice layer section has the SIP trunk and Media Streams setups. Retell or Vapi can replace that number. Leave answered calls with the office.

  2. 2

    Look the caller up before you ask them to repeat themselves

    Pass the caller ID to ServiceTitan. If the number matches a customer, confirm the address on file. If it does not, collect the address and zip.

  3. 3

    Classify the call before you offer a time

    The agent sorts the call into emergency, repair, estimate, or an existing job. Emergency in this build means no heat when it is under 40°F outside, an active leak, or a burning smell.

    Branch. Emergency quotes the after-hours fee, texts the on-call tech, and expects an acknowledgment within 5 minutes. No acknowledgment escalates to the owner. Repair reads open capacity, offers two options, and books through the API with a summary in the job notes. Out of area or the wrong trade gets a polite referral and no booking.

  4. 4

    Confirm by text and file the transcript

    Send an SMS confirmation and the tech's photo when you have one. Post the transcript to CallRail or the CRM and tag the lead source.

Tools and rough monthly cost

Grok Voice is $0.08 per minute ($4.80 per hour) plus $0.004 per text input, from xAI's pricing page. Two hundred minutes is 200 × $0.08 = $16 of speech, before text-input charges. Retell and Vapi are alternatives priced by those vendors. Automation software is the smaller line. ServiceTitan is the subscription you already pay. Other dollar figures on this page are unverified list-price estimates.

ToolJobRough monthly
Grok Voice (or Retell/Vapi)Recommended voice layer. Model grok-voice-3.0 (alias grok-voice-latest). Retell and Vapi remain alternatives.xAI published price: $0.08 per minute ($4.80 per hour) plus $0.004 per text input. Retell and Vapi are priced by those vendors.xAI pricing
TwilioThe SMS confirmation and the on-call pageAbout $1 a month for a local number, plus per-message usage. Unverified public list-price estimate, October 2026. Not a figure from the research brief. Check the vendor.Unverified
n8n, Make, or ZapierConnects the voice agent to ServiceTitan and the on-call textn8n or Make cloud starters are often in the low tens of dollars. Zapier paid plans cost more at the same volume. Unverified public list-price estimate, October 2026. Not a figure from the research brief. Check the vendor.Unverified
ServiceTitan APICustomer lookup, capacity, and bookingYour existing ServiceTitan subscription. Zapier can book jobs and add notes or tasks, but registration is required and ServiceTitan says the integration is not officially supported.
LLM APIClassification and the job-note summaryUsually a few dollars a month at one-shop volume. Unverified public list-price estimate, October 2026. Not a figure from the research brief. Check the vendor.Unverified

Expected ROI

Fill in your own numbers. The brief's formula is: missed calls per week × 46% × your average ticket × 52. The 46% is Invoca's benchmark for phone leads that convert on the call, a vendor stat. It is not a promise that a recovered missed call books at that rate. Subtract voice cost at $0.08 per minute of Grok Voice audio, plus $0.004 for each billed text input.

Caveats

  • ServiceTitan's Zapier integration requires registration and is not officially supported. Scheduling Pro webhooks were in private preview when this was researched.
  • Google Voice has no public API. A solo operator has to forward the shop number to Twilio, RingCentral, or CallRail before this agent can see the call.
  • Call recording needs consent in many states. The brief flags call-recording consent and TCPA/A2P 10DLC registration as go-live guardrails. Confirm the rule where you operate.Unverified
  • A CallDispatcher claim that 62% of calls go unanswered while the owner is on a job is unaudited. It is not used as a figure on this page.

Example prompt

Change the names, fees, and slots before you run it. It does not add facts that were not in the brief.

You answer missed calls for a home-service company and book only what the office rules allow.

Classify the caller as emergency, repair, estimate, existing job, or out of area.
Emergency means: no heat and the caller says it is under 40°F outside, an active leak, or a burning smell.
For an emergency, state the after-hours fee, text the on-call tech, and escalate to the owner if there is no acknowledgment in 5 minutes.
For a repair, offer two open slots from the availability you were given. Do not invent a time.
If the zip is outside the service area, or the trade is wrong, refer them and do not book.
Write the job note in four lines: problem, address, urgency, and the slot they accepted.

Want this set up for you?

A short note that you want “Book the missed call into ServiceTitan” done for you. We use it to measure demand. No setup service is connected yet.

Placeholder only. The address is checked and then discarded.

+Your logo here