Home / Recipes / Missed-call text-back + after-hours AI intake

Problem 1: Calls go unanswered while you're on a job or after hours

Missed-call text-back + after-hours AI intake

Verified with mocksLast tested 2026-10-27 · pricing checked October 2026

When a call is missed, the caller gets a text within seconds. After hours, an AI asks for the problem, name and address, creates a request in Jobber, pages on-call for emergencies, and gives gas-leak callers safety instructions instead of booking.

The problem

Every missed caller can phone the next company on the list. Nobody has published a trustworthy dollar figure for this, so we don't give one.

Background reading: How many calls is your HVAC shop missing, and what it costs

Who it's for

HVAC and plumbing shops of 1-15 people that use Jobber and can't always pick up: owner-operators on a roof or under a sink, and shops without a 24/7 answering service.

Tools and monthly cost

ToolOfficial price
Twilio US local phone number$1.15 / month pricing page
Twilio US SMS, sent or received$0.0083 per 160-character segment, plus carrier fees of about $0.0035-$0.005 per segment pricing page
A2P 10DLC registration (required to text US customers from a local number)One-time: $4.50 brand + $15 campaign vetting (Standard brands add $41.50 vetting). Monthly campaign fee: $1.50 (low-volume mixed) to $10 (Standard) pricing page
Twilio voice, receiving calls$0.0085 / minute (calls routed through Twilio also pay for the forwarded leg; see voice pricing) pricing page
AI model (example: OpenAI gpt-4o-mini)$0.15 per 1M input tokens, $0.60 per 1M output tokens pricing page
n8nCommunity Edition: free if you self-host (you pay for the server). n8n Cloud: from EUR 20 / month (Starter) or EUR 50 (Pro) pricing page
Jobber (you probably already pay for it)Core from $29 / month billed annually ($49 monthly); Connect from $99 (built-in quote and invoice follow-ups); Grow from $149 pricing page

Example month: Illustrative arithmetic, not a measured result. Assume 60 missed calls a month, each conversation about 8 SMS segments in and out: 480 segments x $0.0083 = $3.98, plus carrier fees of roughly $1-$2.40. AI: about 3 short model calls per conversation with gpt-4o-mini, well under $0.10 in total. Fixed: $1.15 number + $1.50-$10 campaign fee. Total about $8-$17 a month plus n8n (free self-hosted or EUR 20 Cloud) and voice minutes for calls routed through Twilio. One-time: $19.50 A2P registration ($61 for a Standard brand).

Setup

  1. Buy a Twilio local number and complete A2P 10DLC brand + campaign registration (texts to US numbers are blocked until it's approved; approval time varies).
  2. Route your business line through the Twilio number: an incoming call <Dial>s your office phone, and the Dial action URL / status callback points at the workflow's 'call status' webhook. The workflow treats no-answer, busy and failed as missed.
  3. Point the number's incoming-SMS webhook at the workflow's 'inbound SMS' webhook. If you also use the quote follow-up recipe, use one small router workflow, because a Twilio number has only one SMS webhook.
  4. In Jobber's Developer Center, create an app with client and request write scopes and connect it to your account; store the access token in an n8n credential (tokens expire after 60 minutes, so use n8n's OAuth2 credential so it refreshes).
  5. Import workflow.json into n8n. Set the environment values listed in .env.example (business name, time zone, office hours, office / on-call phone numbers, model API key) and replace the mock URLs with the real Twilio, Jobber and OpenAI endpoints.
  6. Before going live, open Jobber's GraphiQL explorer and confirm the requestCreate input fields (see 'Documented only' below). Then call your own number from a second phone after hours and run through a no-heat, a burst-pipe and a gas-smell scenario.

Download

Download missed-call-text-back.zip

Contains the n8n workflow, AI prompts, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.

Test result

Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Twilio, Jobber and Stripe were replaced by a local mock server that accepts the same request shapes as their documented APIs and records every call. The AI steps used a small local model (Qwen2.5-3B-Instruct, 4-bit) and the speech-to-text steps used Whisper base.en running locally. Mock data (customers, quotes, invoices, recordings) is invented. Nothing was sent to a real phone, customer or account.

8/8 scenarios passed (run 2026-10-27)

PASSS1Answered call is ignored
PASSS2Missed call during business hours gets a call-back text
PASSS3After-hours no-cool call becomes a Jobber request over 2 texts
PASSS4Burst pipe at 2am Saturday pages on-call
PASSS5Gas smell gets safety instructions, no booking
PASSS6Same caller twice within 12h only gets one text
PASSS7Blocked / anonymous caller is skipped
PASSS8A text after the request is logged goes to the office, not back into intake

Actual output from the test run

Texts sent in scenario S3 (after-hours AC call, run through the real local AI model). Names and numbers are invented.

to +15555550123: Hi, this is Ridgeline Heating & Plumbing. Sorry we missed you - the office is closed right now, but you can book by text. What's the problem and the service address? If you smell gas, leave the building and call your gas utility or 911.

to +15555550123: Thanks! Could you send your name and the service address?

to +15555550123: Thanks Jen, you're on our list. The office will call or text to confirm a time first thing when we open.

Verified with mocks

  • Missed vs answered call detection, business-hours vs after-hours behaviour, one text per caller per 12 hours, anonymous callers skipped.
  • Multi-turn intake by text with a real (small, local) AI model: problem, urgency, name and address extracted over several messages.
  • Urgency rules: 'no heat / AC quit' floors at urgent; burst pipe at 2am pages on-call; gas smell gets safety instructions and no booking.
  • Request creation: Jobber clientCreate + requestCreate calls sent with the right shape to the mock, and texts after booking forwarded to the office instead of restarting intake.

Documented from official API docs only

Built to the vendor's documentation but not run against a live account. Check these on yours.

  • Twilio call-status and SMS webhook fields, and the Messages API (from Twilio's docs; not run against a live Twilio account).
  • Jobber GraphQL endpoint, headers, OAuth and clientCreate (from Jobber's developer docs).
  • requestCreate input fields: taken from a community copy of Jobber's schema, not from Jobber's docs. Check in GraphiQL before relying on it.
  • Behaviour with a hosted model such as gpt-4o-mini: not tested; we tested with a small local model.

Limitations

  • The workflow does not yet validate the X-Twilio-Signature header on incoming webhooks (the call-scorecard recipe shows how; copy that check before going live).
  • The after-hours greeting is 2 SMS segments, so it costs twice a short text.
  • Twilio handles STOP / START opt-out keywords on standard numbers, but you should confirm your Messaging Service opt-out settings.
  • Housecall Pro and ServiceTitan versions are not built; we could not verify their API docs.