Home / Auto Repair / Missed-call text-back for auto shops, with the Shopmonkey order in front of the advisor

Auto Repair problem 1: The phone rings while everyone is under a car, and the caller books the next shop on the list

Missed-call text-back for auto shops, with the Shopmonkey order in front of the advisor

Verified with mocksLast tested 2026-10-31 · pricing checked October 2026
Download the workflowauto-missed-call-text-back.zip

16/16 test scenarios passed against mock APIs. Includes the n8n workflow, mock data and the test runner.

  • n8n
  • Twilio
  • Resend
  • Shopmonkey
  • Google Sheets

Calls to the shop's Twilio number ring your existing line. If nobody answers (busy, no answer or failed), the caller gets one text within a minute: sorry we missed you, reply here or call back. The service advisors get an email with the caller looked up in Shopmonkey: name, vehicle and any open order (for example 'order #1042, waiting on approval'), or 'new caller'. One text per number per 12 hours; calls after 9 p.m. get the text at 8 a.m. Replies are forwarded to the advisors' inbox with one 'got it' text per 12 hours, and STOP in any common wording ends texts.

How the workflow runs

Trigger · When an event arrives

Twilio Dial action (call ended)

Steps

  1. Missed? Look up + text back once

Outcome

  • Send text + office email

Also runs on: Twilio inbound SMS → STOP/START or forward reply → Send ack + office email

Also runs on: Every 15 min, 8 am-8 pm → Send held text-backs → Send held

Drawn from the node names in the workflow file inside the download (workflow.json).

The problem

One vendor benchmark (from a company that sells an AI phone system to shops) and one industry survey, so treat the dollar figure as an indication, not a measurement of your shop.

Background reading: Missed calls at an auto repair shop: a 7-step checklist for the text-back

Who it's for

Independent US auto repair shops on Shopmonkey with 1-15 people, where the person answering the phone is often also writing estimates or turning wrenches.

Tools and monthly cost

ToolOfficial price
Shopmonkey (you probably already pay for it)Basic $239 / month, Clever $399, Genius $499 (about 10% less billed annually: $215 / $359 / $449). The pricing page lists 'API and Webhooks' and unlimited 2-way SMS and email in every plan, and 'Automated Estimate Followups' on Genius. CRM Essentials (campaigns, online booking) is a paid add-on at $349 / month ($314 annual) pricing page
Twilio US local phone number$1.15 / month pricing page
Twilio US SMS, sent or received$0.0083 per segment, plus carrier fees on outbound texts of $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 registration and $15 campaign vetting. Monthly: $1.50-$10 per campaign by use case pricing page
Resend (sends the emails; any email API that accepts an Idempotency-Key works)Free: 3,000 emails / month, 100 / day. Pro: $20 / month for 50,000 emails pricing page
Google Sheets (consent log, opt-out list, declined-work log)Free with a Google Account pricing page
n8nCommunity Edition: free if you self-host (you pay for the server). n8n Cloud: Starter EUR 20 / month or Pro EUR 50 / month, billed annually pricing page
Twilio Voice (forwarding calls through the Twilio number)Receive on a local number $0.0085 / min; forward (make) a call $0.0140 / min. Pricing page says 'current as of August 2026' pricing page

Example month: Illustrative arithmetic, not a measured result. One local number sending 200 single-segment texts and receiving 200 a month, at the highest listed carrier fee ($0.005): 200 x ($0.0083 + $0.005) + 200 x $0.0083 + $1.15 number = $5.47 a month in Twilio usage, plus the A2P 10DLC campaign fee ($1.50-$10 a month) and one-time registration ($4.50 brand + $15 campaign vetting). Emails stay inside Resend's free tier at this volume. n8n and your Shopmonkey plan come on top. Your volumes will differ. Forwarding calls through Twilio adds voice minutes: for example 300 calls x 2 minutes = 600 x ($0.0085 received + $0.0140 forwarded) = $13.50.

Setup

  1. Shopmonkey: create an API key (Settings > Integration > API Keys) and set SHOPMONKEY_API=https://api.shopmonkey.cloud/v3 and SHOPMONKEY_API_KEY. The workflows send it as a Bearer token and honor HTTP 429 Retry-After.
  2. Texts need a Twilio number on an approved A2P 10DLC campaign. Set TWILIO_ACCOUNT_SID, TWILIO_BASIC_AUTH (base64 of SID:auth token) and AUTO_TWILIO_FROM.
  3. Email: MSS_EMAIL_API (e.g. https://api.resend.com), EMAIL_API_KEY, AUTO_EMAIL_FROM, AUTO_OFFICE_EMAIL (the service advisors' inbox). Every send carries an Idempotency-Key, so a retried run never emails twice.
  4. Company details: AUTO_COMPANY_NAME, AUTO_COMPANY_PHONE, AUTO_COMPANY_ADDRESS, COMPANY_TZ (the shop's time zone; texting hours follow it).
  5. Google Sheet stand-in: MSS_SHEET_URL points at the shared sheets (sms_consent, sms_optouts, inbound_texts and the recipe's own sheets). In production, swap these HTTP calls for n8n's Google Sheets node.
  6. Remove the test-only mss-ar*-tick webhooks (or put them behind n8n header auth) and make sure MSS_TEST_CLOCK is NOT set in production.
  7. In Twilio, point the shop number's Voice webhook at a TwiML Bin or Studio flow that <Dial>s your shop line with action=/webhook/mss-ar1-call, and point Messaging at /webhook/mss-ar1-sms. Both are verified with the X-Twilio-Signature header.
  8. The text goes to any US mobile number that just called you and didn't reach anyone. That is a reply to their call, not marketing, but texting rules still apply; have your attorney review it.

Download

Downloadauto-missed-call-text-back.zip

Contains the n8n workflow, 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 on an isolated test instance and run end to end. Shopmonkey (REST v3 with a Bearer key, HTTP 429 with Retry-After, HMAC-signed webhooks), Twilio, the email API (Resend-style) and Google Sheets were replaced by a local mock server built from the vendors' public docs. A frozen test clock checks the 8 a.m.-9 p.m. texting window. These recipes use no AI model; every decision is a written rule. Customers, vehicles and repair orders are invented. Verified with mocks; nothing was sent to a real person or account. How we test.

16/16 scenarios passed (run 2026-10-31)

PASSAR1-01Answered call (DialCallStatus completed): no text, no email, no row
PASSAR1-02Missed call from a Shopmonkey customer at 10 am: one text by first name with STOP wording, office email shows the open estimate
PASSAR1-03Same caller 2 hours later: no second text (12-hour rule), office still told they called again
PASSAR1-04Same caller 12.5 hours later at 10:30 pm: text is held for quiet hours, office email says so
PASSAR1-05Held text: not at 7:45 am, sent once at 8:00 am, not again at 8:15
PASSAR1-06Unknown caller: generic text asking for year/make/model, office email says not in Shopmonkey
PASSAR1-07Shopmonkey number stored as '(555) 555-0322' still matches +15555550322
PASSAR1-08Blocked/anonymous and non-US caller IDs: no text, no office email, row logged
PASSAR1-09Forged X-Twilio-Signature: no text, no email, no row
PASSAR1-10Customer texts STOP: recorded in sms_optouts, no ack; a later missed call gets no text and the office is told to call
PASSAR1-11START re-enables texts
PASSAR1-12Customer reply: forwarded to the shop inbox with Shopmonkey context; one 'got it' text, not one per message
PASSAR1-13Reply at 11:10 pm: forwarded, but no ack text at night
PASSAR1-14Shopmonkey answers 429 once: waits Retry-After, retries, context still in the office email
PASSAR1-15Shopmonkey 500: caller still gets the (generic) text; office email says the lookup failed
PASSAR1-16Twilio answers 429 once: retried, exactly one text

Actual output from the test run

Scenario AR1-02: the text a known customer gets after a missed call (invented customer and shop). Names and numbers are invented.

Hi Dana, sorry we missed your call at Riverside Auto Care. Reply here with what you need and a service advisor will get back to you. Reply STOP to opt out.

Verified with mocks

  • Answered call (DialCallStatus completed): no text, no email, no row
  • Missed call from a Shopmonkey customer at 10 am: one text by first name with STOP wording, office email shows the open estimate
  • Same caller 2 hours later: no second text (12-hour rule), office still told they called again
  • Same caller 12.5 hours later at 10:30 pm: text is held for quiet hours, office email says so
  • Held text: not at 7:45 am, sent once at 8:00 am, not again at 8:15
  • Unknown caller: generic text asking for year/make/model, office email says not in Shopmonkey
  • Shopmonkey number stored as '(555) 555-0322' still matches +15555550322
  • Blocked/anonymous and non-US caller IDs: no text, no office email, row logged
  • Forged X-Twilio-Signature: no text, no email, no row
  • Customer texts STOP: recorded in sms_optouts, no ack; a later missed call gets no text and the office is told to call
  • START re-enables texts
  • Customer reply: forwarded to the shop inbox with Shopmonkey context; one 'got it' text, not one per message
  • Reply at 11:10 pm: forwarded, but no ack text at night
  • Shopmonkey answers 429 once: waits Retry-After, retries, context still in the office email
  • Shopmonkey 500: caller still gets the (generic) text; office email says the lookup failed
  • Twilio answers 429 once: retried, exactly one text
  • Verified with mocks; invented customers, vehicles and repair orders only.

Documented from official API docs only

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

  • Shopmonkey REST v3 paths, field names (order, customer, deferred services, workflow status) and webhook signing (webhook-signature 'v1,' base64 HMAC-SHA256 of id.timestamp.body) come from Shopmonkey's public developer docs; not run against a live Shopmonkey account.
  • Twilio request signing, Messages API, Dial action callbacks, 429 behavior and built-in STOP handling (from Twilio's docs). The email API follows Resend's documented request shape.

Limitations

  • Anonymous, blocked and non-US callers get no text and no advisor email; the call is only logged in the missed_calls sheet.
  • Shopmonkey phone matching is by the last 10 digits. Two customers sharing a number show as the first match.
  • Every message is checked against a word list first (AUTO_LINT in autolib.py): 'guaranteed', 'safe / unsafe to drive', 'dangerous', 'will fail', 'diagnosis', storage fees and collection threats are blocked, and the office is told instead. A text can't see the car; a technician's words belong in the estimate, not in an automated message.
  • Written and tested for Shopmonkey's API only. Tekmetric's API isn't open to the public, and Mitchell 1, Shop-Ware, AutoLeap and other shop systems are not built; we make no claim these recipes work with them.
  • Not legal advice and not a compliance guarantee. Texts to customers go only to numbers with consent recorded on our check-in form (or that just called the shop, for the missed-call reply), only between 8 a.m. and 9 p.m. shop time, and plain-English opt-outs are honored (47 CFR 64.1200 is the federal rule we design around). Some states are stricter; have your attorney review texting consent before going live.