₹.
$2/month) and configure two webhooks on it: the voice status callback pointing at n8n's first webhook, and the messaging webhook pointing at the second. Claude uses an Anthropic API key. Cal.com uses an API key from your Cal.com settings, hitting the [v2 bookings API](https://cal.com/docs/api-reference/v2/bookings/create-a-booking).
CallSid in a database or Sheets node and skip any callback whose CallSid you have already processed in the last hour.
CallStatus, CallSid, and From. Node 2 filters for the statuses that mean "missed," and node 3 sends the first SMS. The opening-SMS Twilio node:
{
"parameters": {
"resource": "sms",
"operation": "send",
"from": "={{ $env.TWILIO_NUMBER }}",
"to": "={{ $json.body.From }}",
"message": "Hi, this is the team at Acme. Sorry we missed your call. What can we help with? Reply here and we'll sort it out — or reply CALL and a person will ring you back."
},
"name": "Send Opening SMS",
"type": "n8n-nodes-base.twilio",
"typeVersion": 1
}
The filter in node 2 checks {{ $json.body.CallStatus }} against no-answer, busy, and failed. Verify by calling your Twilio number and letting it ring out — the opening SMS should arrive within about 15 seconds. Inbound calls to an Indian Twilio number cost roughly $0.0045 per minute, but a missed call you do not answer costs nothing for the call leg itself.
## Step 3: The Claude qualifier node
Node 7 sends the caller's SMS reply to Claude and asks for a single classification label plus a one-line reason. Keeping the output structured is what makes the downstream Switch reliable. The Claude HTTP node body:
{
"parameters": {
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{ "name": "x-api-key", "value": "={{ $credentials.anthropicApi.apiKey }}" },
{ "name": "anthropic-version", "value": "2023-06-01" },
{ "name": "Content-Type", "value": "application/json" }
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({\n model: 'claude-haiku-4-5',\n max_tokens: 150,\n system: 'You qualify inbound B2B sales texts. Reply ONLY as JSON: {\"label\":\"qualified|nurture|human\",\"reason\":\"...\"}. qualified = a real buying need at a company; nurture = vague or student/job-seeker; human = explicitly asks for a callback or is upset.',\n messages: [ { role: 'user', content: $json.sms_body } ]\n}) }}"
},
"name": "Claude Qualify",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2
}
Verify by sending test replies: "I need a quote for 200 seats" should return qualified, while "do you have jobs" should return nurture. Parse the JSON out of Claude's response in a small Code node before the Switch — Claude returns the JSON inside a content block, not at the top level.
## Step 4: Book a Cal.com slot or deflect
For qualified callers, node 10 fetches the next available Cal.com slots and node 11 texts the booking link. Cal.com's v2 booking flow needs an eventTypeId, a start time, and the attendee details. The SMS for a qualified caller:
{
"parameters": {
"resource": "sms",
"operation": "send",
"from": "={{ $env.TWILIO_NUMBER }}",
"to": "={{ $json.caller }}",
"message": "=Great — sounds like a fit. Grab a 20-min slot with our team here: {{ $json.cal_booking_url }} . Reply CALL if you'd rather we ring you."
},
"name": "Send Booking SMS",
"type": "n8n-nodes-base.twilio",
"typeVersion": 1
}
- Twilio number bought and both webhooks configured
- Status filter set to no-answer, busy, failed
- CallSid dedup to prevent duplicate SMS
- Claude returns a strict JSON label, parsed before the Switch
- Cal.com event type ID and API key in place
- CALL keyword routes to a human-callback branch
- DLT registration done for Indian SMS sender IDs
human branch on any parse failure, so an unclear case always reaches a person. Third, a caller who never replies to the opening SMS — that is fine, the flow simply ends, but log it so you can see the reply rate. Fourth, Indian SMS regulation: India requires DLT (Distributed Ledger Technology) registration of sender IDs and templates, so your Twilio messaging must use a registered template or it will be blocked by Indian carriers.
$1/$5 per million tokens costs a fraction of a rupee for a 150-token classification, and the missed-call leg itself is free. Total: roughly ₹4 per recovered call. Here is the per-call cost breakdown:
At ₹4 a recovered call, the math is lopsided: a single recovered B2B deal pays for years of the workflow. SMS is the dominant cost, so a chattier flow with five back-and-forth messages costs more — keep the conversation to two or three turns. Our AI and automation team tunes the turn count per client.
## When should you not build this?
If your call volume is tiny — say under five inbound calls a day — a human callback is cheaper and warmer than building this. If your buyers strongly prefer voice and find SMS impersonal (common in some traditional industries), the text-first approach can backfire; offer the CALL keyword prominently. And if you have not finished DLT registration, do not launch — unregistered SMS to Indian numbers fails silently, which is worse than no automation because you will not know leads are dropping.
## Real example: the Gurugram B2B team
The client sold a SaaS product into mid-market companies and ran a 4-person inside-sales team that could not cover evenings and weekends. Before the flow, after-hours calls just rang out. After we shipped it, a meaningful share of those previously-dead calls now book a Cal.com slot before anyone arrives at the office the next morning. The Claude qualifier also filters out the job-seekers and students who used to waste SDR time. We saw the same speed-of-response lift building the lead pipeline for Radiant Finance, where every minute of delay cost conversions.
The calls we missed at 9 PM were the ones we cared about most, and they almost never called back. Recovering them with a text and a booking link, before anyone is even awake, changed the math on our after-hours coverage.
Want this missed-call callback flow live on your Twilio number?
We ship a self-hosted n8n missed-call recovery workflow for B2B sales teams in 7 working days, with DLT registration handled. Typical cost: ₹55,000–₹90,000 plus your Twilio and Claude usage. Suitable if you miss after-hours inbound calls and lose the lead. No slides — bring your call data and we will model the recovery.

