Downloads
Download the n8n workflow (JSON)
field-service-job-dispatch-n8n.json · n8n workflow · 24 steps · starts with WhatsApp complaint · uses WhatsApp, Anthropic, Slack, Google Sheets · 42 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What this workflow does
A customer WhatsApps your service number: "AC not cooling, Tower B, Sector 137". Claude turns the message into a job card with appliance, brand, issue, address and urgency. Google Maps finds the address, n8n reads your technicians sheet and picks the nearest free technician with the right skill, with a rough ETA. The dispatcher sees it all on Slack and taps Approve. The technician gets the job card with a map link, the customer gets the job ID and ETA, and the technician is marked busy. When the job is marked Done, the technician is freed and the customer gets one feedback ask.
Who it is for
AC and RO service companies, appliance repair shops, pest control, facility management and any business that sends technicians to homes or offices and takes complaints on WhatsApp.
What you need
- n8n (Cloud or self-hosted)
- A WhatsApp Business Cloud API number
- An Anthropic API key for Claude
- A Google Maps API key with the Geocoding API enabled
- A Google Sheet with
TechniciansandJobstabs - Slack for the dispatcher
The workflow, step by step
Step 1 · Complaint arrives on WhatsApp
Customers message your business number the way they always do. n8n catches each text, cleans the number and name, and never handles the same message twice.
- WhatsApp complaint (WhatsApp Trigger): fires on every incoming message.
- Clean up message (Set): message id, phone, WhatsApp profile name and the text.
- Already processed? (Remove Duplicates): Meta sometimes delivers the same webhook twice; this stops a second job card.
Step 2 · Claude writes the job card
Claude turns the message into a job card: appliance, brand, issue, address, urgency. Missing address? It asks the customer. A status question goes to the dispatcher instead.
- Make job card with Claude (Basic LLM Chain) with Claude and Job card fields (Structured Output Parser).
- What do they need? (Switch): New job continues. Needs details goes to Ask for details, which sends Claude's one-line question. Status questions and anything else go to Alert dispatcher on Slack, so a person answers.
Step 3 · Find the nearest free technician
Google Maps turns the address into a location. n8n reads your technicians sheet, keeps the free ones with the right skill and picks the closest, with a rough ETA. The job card is logged.
- Geocode address (HTTP Request to the Google Geocoding API).
- Get free technicians (Google Sheets): reads technicians with Status = Free.
- Pick nearest technician (Code): straight-line distance from each technician's Lat and Lng, same skill first, ETA at about 18 km/h plus 10 minutes, rounded to 5. Creates the job ID.
- Log job card (Google Sheets, append or update on Job ID): Status = Awaiting dispatch.
Step 4 · Dispatcher approves, everyone is told
The job lands in Slack with the technician and ETA. Ravi taps Approve: the technician gets the job card, the customer gets the job ID and ETA, and the technician is marked busy.
- Approve dispatch on Slack (Send and Wait) and Dispatcher approved? (IF). Reassign goes to Mark for manual dispatch.
- Send job to technician (WhatsApp template
new_job_cardwith a Google Maps link). - Send ETA to customer (WhatsApp text).
- Mark technician busy (Google Sheets).
- Both sends retry 3 times and their error outputs go to Alert dispatcher on Slack.
Step 5 · Job done? Ask for feedback
When the job is marked Done in the sheet, the technician is free again and the customer gets a short feedback ask on WhatsApp. It is sent once per job, never twice.
- Job marked done (Google Sheets Trigger, every 5 minutes, watches the Status column).
- Done and not asked yet? (Filter): Status = Done and
Feedback askedempty. - Mark technician free, Send feedback ask (WhatsApp template
service_feedback), Mark feedback asked.
Setup
- Import the JSON into n8n and connect WhatsApp, Anthropic, Google Sheets and Slack in each red node.
- In Google Cloud, enable the Geocoding API, create a key restricted to it and paste it into Geocode address in place of
YOUR_GOOGLE_MAPS_API_KEY. - Create the
Technicianstab: Tech ID, Name, Phone, Skills, Lat, Lng, Status, Current job. Get Lat and Lng by right-clicking a spot in Google Maps. - Create the
Jobstab: Job ID, Created, Customer, Phone, Appliance, Issue, Address, Urgency, Technician, ETA (min), Status, Updated, Feedback asked. - Create two WhatsApp utility templates:
new_job_card(4 variables) andservice_feedback(2 variables). ReplaceYOUR_PHONE_NUMBER_IDandYOUR_SHEET_ID. - Send your business number a test complaint from your own phone, approve it on Slack, then set the job's Status to Done and check the feedback ask.
How to customise
- Better ETAs: add a Google Distance Matrix call between Get free technicians and Pick nearest technician for real drive times.
- Time slots instead of "now": for installations, have Claude extract a preferred time and pick a technician with a free Google Calendar slot.
- Several cities: add a City column to Technicians and filter on it in Get free technicians.
- Paid visits: add a Razorpay payment link to the ETA message for the visit charge.
Guardrails
- No technician is sent and no ETA goes out until the dispatcher taps Approve.
- Claude never invents an address or a time. If something is missing, it asks.
- Status questions and unclear messages always go to a person.
- The ETA is a rough estimate and is worded as "about".
Troubleshooting
- "Google Maps could not find" error: the address is too vague. Claude's question should ask for a landmark and pincode; you can also add your city in the Claude instructions.
- The same technician is always picked: check Lat and Lng are numbers and Status is exactly
Free. - Template errors: the number of variables must match the approved template exactly.
- Feedback sent twice: make sure the
Feedback askedcolumn exists with exactly that name.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

