Hand-off tool in squads not working.
# support
d
So I have a squad, in which there are 3 agents, One for routing, and other two, where the call would be routed after the routing agent classifies what the caller wants. The problem is that, sometimes, the routing agent doesn't transfer the call at all to the next agent, even after correctly classifying where the call needs to be routed. So there are 2 scenarios here; 1. the agent classifies where the call needs to be transferred and call is transferred sucessfully and quickly. 2. the agent classifies where the call needs to be transferred, but the call is never transferred to the agent, and the call ends after 30 seconds (the agent has 30-seconds silence timeout), but if you say something like any word, then AFTER that, the call is transferred, I want the call to be transferred each time, without fail, without the caller needing to say a filler word in between
call id: 019eb805-6859-7002-8d5f-93c4db1207bc
squad id: 9c02e258-206f-48af-ba84-23dc2488edfb
c
Hi Danyal, Thanks for sharing the call ID. I looked at the call and traced the issue. The routing agent correctly classifies the call and calls the handoff tool, but the tool is missing a
requestStartMessage
with
blocking: false
. Without it, the transfer hangs in an idle state after the agent finishes speaking, waiting for something to trigger the pipeline forward. Speaking a filler word works because it produces a transcription event that unblocks it. Fix: in your handoff tool config, add this to the
messages
array:
Copy code
{
  "type": "request-start",
  "content": "Please hold while I connect you.",
  "blocking": false
}
The
blocking: false
flag tells Vapi to execute the transfer immediately when the LLM calls the tool, without waiting for silence or user input. Once that's in, the transfer should fire reliably every time. Let me know if you run into anything after making the update. Regards, Chiranjeet Vapi Support
d
Hey Chiranjeet, I think you are talking about tool messages? I added those just today to see if something works. This issue has been persisting from the start, like right now, I just removed the tool messages, and it is still persisting. Can you explain if using the tool messages for request-start and request-complete a necessity? Because when I made the squad, I made it via squads UI, so I didn't enable tool messages for handoff tool and there wasn't an option for marking blocking field as false Do let me know if I need to follow any Vapi best-practices for Squads Regards, Danyal A.
c
Hi Danyal, Checked the call logs, the issue is confirmed: the handoff tool was never called at all in that call (
transfers: []
, ended as
silence-timed-out
). The routing agent spoke correctly but the LLM didn't fire the tool. The culprit is the tool description itself. This part is backfiring: > "Only use it when instructions explicitly ask you to use the handoff_to_assistant function. DO NOT call this function unless you are instructed to do so." The LLM reads those restrictions and talks itself out of calling the tool. Replace the description with something direct: > "Transfer the call to the appropriate advisor based on the caller's need. Call this immediately once the caller's intent is clear." Also tighten the system prompt from "inform the caller... then IMMEDIATELY invoke" to "In a single response, announce the transfer AND call the handoff_to_assistant tool at the same time. Do not speak separately first." Tool messages are not required - that's separate from this. The fix is purely the tool description and prompt phrasing. Regards, Chiranjeet Vapi Support
d
Hello again Chiranjeet, I Applied the changes you suggested, but still the agent is failing to route the calls correctly, the transfer tool sometimes is not called, and about the 2nd prompt suggestion you mentioned, it hands off the calls sometimes without even telling the caller that the call is being transferred to another agent.
Copy code
In a single response, announce the transfer AND call the relevant handoff tool (`handoff_to_service_advisor` or `handoff_to_sales_advisor`) at the same time. Do not speak separately first.
This is the prompt that causes the abrupt transfer issue Regards, Danyal A.
c
Hi Danyal, Looking at your updated calls - the tool descriptions still have the old guardrail text causing confusion: > "Only use it when instructions explicitly ask you to use the handoff_to_service_advisor function. DO NOT call this function unless you are instructed to do so." That needs to be removed from both tools regardless of prompt changes. On the announcement problem: you've hit the core tension with Vapi handoffs. You can't reliably do "speak first, then call tool" as two LLM steps - the tool sometimes doesn't fire. But "call tool while speaking" cuts the announcement off. The correct pattern is to remove the verbal announcement from the LLM entirely and use
requestStartMessage
on the tool instead. Here's how to set it up: On both handoff tools, add this to `messages`:
Copy code
{
  "type": "request-start",
  "content": "Great, let me connect you now. One moment please.",
  "blocking": false
}
And update both tool descriptions to simply: > "Transfer the call to the [Sales/Service] Advisor when the caller's intent is clear." Then in your routing agent prompt, remove any instruction to verbally announce the transfer. Just tell it: "Once you identify the caller's need, immediately call the relevant handoff tool." With
blocking: false
, Vapi plays that announcement automatically as the transfer executes - caller hears it, transfer happens reliably, no timing issues. Regards, Chiranjeet Vapi Support
d
Hey Chiranjeet,
Copy code
Only use it when instructions explicitly ask you to use the handoff_to_service_advisor function. DO NOT call this function unless you are instructed to do so.
I am not sure where you are getting this text from, because I haven't added anything like this in the tool message I will look into creating requestStart message and all, but can you explain, where are you getting the above tool description from? This is the current system prompt of the routing agent
Copy code
# Role
You are the call-routing receptionist for Liberty Ford. Your ONLY job: greet, detect Sales vs Service, transfer. Nothing else.

# Rules
- Speak in ONE short sentence. Never explain, diagnose, quote prices, or answer questions.
- Ask at most ONE clarifying question, only if intent is unclear.
- The moment intent is clear, say the transfer line AND call the tool in the SAME turn. Never wait, never ask permission.

# Routing
- SALES → buying, leasing, test drive, new/used car, trade-in, price, financing.
- SERVICE → repair, maintenance, oil change, check engine, recall, appointment, parts.
- Unclear → ask: "Are you looking to buy a vehicle, or get one serviced?"

# Script
1. Open: "Thanks for calling Liberty Ford! Sales or Service?"
2. On Sales → say "Connecting you to Sales now, one moment." → call `handoff_to_sales_advisor` (LF-Sales-Advisor).
3. On Service → say "Connecting you to Service now, one moment." → call `handoff_to_service_advisor` (LF-Service-Advisor).
I tried making it very simple Regards, Danyal A.