https://retellai.com/?utm_source=discord&utm_medium=seo logo
if I want my conversation agent to always have the...
# ❓・ai-evy-support
p
@AI Evy if I want my conversation agent to always have the ability to transfer a call should I just make one of my transfer nodes global or should I add a transfer to every possible route I need that option which is like every node?
a
Thanks for tagging me @punk8357. I'll look through relevant sources and get back to you shortly.
### Answer Making your transfer node a Global Node is the recommended approach for this use case. [(1) ]() The Global Node setting allows a node to be accessible from anywhere in the conversation flow, so you don't need to manually connect a transfer option to every single node. However, there are a couple of important considerations: 1. **Transition timing**: Global Node transitions are checked after the user responds—they cannot be triggered solely by agent speech or silence. [(2) ]() 2. **No return to previous position**: Retell AI currently does not support returning from Global Nodes to the original conversation flow position. Once the caller moves to a Global Node, they cannot be sent back to where they were. [(3) ]() If your use case requires the caller to potentially return to their original position after considering a transfer (but deciding against it) , you may need to design your flow differently. But for a straightforward "always available transfer" option, enabling the Global Node setting on your transfer node is the cleaner solution compared to adding transfer connections to every node. You can enable the Global Node option on any node in the conversation flow builder. [(4) ]()
​ To learn more, see the sources I considered: [[1] Conversation Node](https://docs.retellai.com/build/conversation-flow/conversation-node) [[2] Issue triggering Global Node for Call Transfer on Agent agent_b16d3cf4cc9e5ee7275202e27c](https://discord.com/channels/1186424376300679209/1454277235711414393) [[3] Is it possible to return from the Global Node](https://discord.com/channels/1186424376300679209/1399484507530334368) [[4] Major Platform Upgrades: Knowledge base, warm transfer, Voice & Analytics](https://www.retellai.com/changelog/major-platform-upgrades-knowledge-base-warm-transfer-voice-analytics) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy but the ai will still respond when it gets to the transfer node right
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer Yes, the AI can still speak when it reaches the Call Transfer Node. The Speak During Execution setting allows you to configure what the agent says while the transfer is being executed. [(1) ]() When enabled, you can provide instructions for the agent to generate an utterance like "Let me check that for you" or "Please hold while I transfer you." You can choose between Prompt (AI-generated based on instructions) or Static Sentence (exact phrase you specify) . This ensures the caller isn't left in silence during the transfer process.
​ To learn more, see the sources I considered: [[1] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy it doesnt seem to ever transfer to the transfer node now that its global. why is that?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer The most likely reason is that you need to set a transition condition on your Global Node for it to trigger. When you mark a node as global, you must define when it should be transitioned to. [(1) ]() From the documentation: "You will need to set a condition for when the global node should be transitioned to." For example, if you want the transfer to happen when the user asks to speak to a human, your condition might be something like
When user indicates they want to speak to a human
or
When user requests to be transferred
. A few important things to check: 1. Transition condition is required — Global nodes must have a condition defined for when they should activate. Without this, the node won't be triggered. 2. Transitions happen after user response — The checking of the transition condition happens after the user responds, not based solely on agent speech. [(2) ]() 3. Condition clarity — Write clear conditions that don't rely too heavily on the node's instruction. Examples:
When user indicates they want to book a meeting
or
User declines the invitation
. [(3) ]() Check your Global Node settings and ensure you have a properly defined transition condition that matches when you want the transfer to occur.
​ To learn more, see the sources I considered: [[1] Global Node](https://docs.retellai.com/build/conversation-flow/global-node) [[2] Issue triggering Global Node for Call Transfer on Agent agent_b16d3cf4cc9e5ee7275202e27c](https://discord.com/channels/1186424376300679209/1454277235711414393) [[3] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
does that global node need to be connect to all the other nodes or I can make it a standalone node @AI Evy ?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer A Global Node can be a standalone node — it does not need to be connected to the rest of the graph. [(1) ]() From the documentation: "Since global node can be transitioned to from anywhere, it does not necessarily needs to be connected to the rest of the graph." So you can create your transfer node as a standalone global node with a transition condition (like
When user indicates they want to speak to a human
) , and it will be accessible from any point in your conversation flow without requiring manual connections to other nodes.
​ To learn more, see the sources I considered: [[1] Global Node](https://docs.retellai.com/build/conversation-flow/global-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
whats better, to have it standalone or connected @AI Evy ?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer Both approaches work — the documentation explicitly states that a global node "does not necessarily needs to be connected to the rest of the graph" since it can be transitioned to from anywhere. [(1) ]() Standalone is typically cleaner for a transfer node because: - It keeps your flow graph less cluttered - The global transition condition handles when to trigger it - You don't need to manually wire connections from every node Connected might make sense if: - You want the transfer node to have an outgoing edge for handling transfer failures (e.g., connecting to a node that says "Sorry, the transfer didn't go through") [(2) ]() - You need the node to transition somewhere specific after the transfer attempt For your use case of "always available transfer," standalone with a clear transition condition is the simpler approach. Just make sure you have a plan for what happens if the transfer fails — you can still add an outgoing edge from a standalone global node to handle that scenario.
​ To learn more, see the sources I considered: [[1] Global Node](https://docs.retellai.com/build/conversation-flow/global-node) [[2] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy how do I make sure it speaks before it transfers from my global transfer node?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer You have two options to ensure the agent speaks before transferring: Option 1: Use "Speak During Execution" on the Call Transfer Node Enable the Speak During Execution setting directly on your transfer node. [(1) ]() When enabled, a text input box will appear where you can write instructions for the agent to generate an utterance like "Let me transfer you right away." You can choose between Prompt (AI-generated) or Static Sentence (exact phrase) . Option 2: Add a Conversation Node Before the Transfer If you want more control over what the agent says, you can put a conversation node (with
skip response
turned on) before the transfer node. This lets the agent deliver a specific message before the actual transfer happens. For a global transfer node, Option 1 is typically simpler since it keeps everything in one node. Just enable "Speak During Execution" and provide the prompt or static sentence you want the agent to say while the transfer is being performed.
​ To learn more, see the sources I considered: [[1] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy I have {{success}} = false as a transition condition and then my tool result shows, "tool_call_id: tool_call_b09050 Axios Error: error code: ERR_BAD_REQUEST, error message: Request failed with status code 409 response status: 409 response data: [{"success":false,"bookingSuccess":false,"error":"1","code":"2"},"Time slot 15:30 overlaps with existing appointment (15:30-15:44)","SLOT_NOT_AVAILABLE"]" but its not going down the correct transition path? whats wrong? is it because its a string not a bool?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer There are a couple of issues to check: 1. Syntax for Equation-Based Transitions For equation-based transitions, you need to use double curly braces and proper comparison syntax. Based on a similar issue, the correct format is: [(1) ]()
Copy code
{{success}} == "false"
Note the double equals sign (
==
) for comparison, not a single equals sign. 2. String vs Boolean Yes, this could be the issue. If
success
is coming back as a string
"false"
rather than a boolean
false
, you need to compare it as a string with quotes around the value. 3. Variable Extraction For the transition condition to work with the function result, you need to ensure the
success
variable is properly extracted as a dynamic variable before the transition evaluates. If you're extracting it from a custom function response, you should use the Extract Dynamic Variables function to make it available for equation-based transitions. [(2) ]() Try updating your condition to:
Copy code
{{success}} == "false"
If that doesn't work, also verify that the variable is being extracted correctly by checking the
collected_dynamic_variables
field in your call details.
​ To learn more, see the sources I considered: [[1] Equation Based Transitions](https://discord.com/channels/1186424376300679209/1467955193948930108) [[2] Custom function failure to substitute dynamic variable](https://community.retellai.com/t/custom-function-failure-to-substitute-dynamic-variable/231) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy double equal sign is not an option in the retell UI equations just single?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer The documentation shows that double equals (
==
) is the correct syntax for equation-based transitions in Retell AI. [(1) ]() Example equation conditions from the documentation:
Copy code
{{user_location}} == "New York"
{{user_location}} != "New York"
In a Discord thread, a user had a similar issue and was told to use
{{ai_enabled}} == "true"
with double equals, which fixed their problem. [(2) ]() If the Retell UI is only showing a single equals sign, you may need to manually type the double equals (
==
) in the equation editor. The documentation explicitly lists
==
for equality comparisons and
!=
for not-equal comparisons. [(1) ]() For your case, try entering:
Copy code
{{success}} == "false"
, [(2) ]() If the UI doesn't accept this, you could alternatively use a prompt-based transition instead of an equation, such as:
The function returned success as false
or
CRM lookup returned unsuccessful result
. [(1) ]()
​ To learn more, see the sources I considered: [[1] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) [[2] Equation Based Transitions](https://discord.com/channels/1186424376300679209/1467955193948930108) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy in the retell UI though its a drop down box and there is only a single equal sign option?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer If the UI dropdown only shows a single equals sign, that should work — the dropdown is the equation editor interface. The documentation examples show the syntax as
{{user_location}} == "New York"
, but when using the UI's equation editor, you select the variable, the operator from the dropdown, and enter the value. [(1) ]() The single
=
in the dropdown likely represents the equality comparison (equivalent to
==
in the documentation's text examples) . This is just how the UI presents it. For your
{{success}}
variable, a few things to verify: 1. **Make sure the value is quoted as a string**: Since your function returns
"success": false
in JSON, try comparing against
"false"
(with quotes) in case it's being treated as a string. [(2) ]() 2. **Consider using a prompt-based transition instead**: If equation-based transitions aren't working reliably with your function result, you can use a prompt condition like
CRM lookup returned unsuccessful result
or
The function returned an error or success was false
. [(1) ]() 3. **Check if the variable exists**: You can also use
{{success}} exists
or
{{success}} does not exists
to verify the variable is being set at all. Given the complexity of parsing nested error responses, a prompt-based transition that references the function result may be more reliable for your use case.
​ To learn more, see the sources I considered: [[1] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) [[2] Equation Based Transitions](https://discord.com/channels/1186424376300679209/1467955193948930108) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy I switched to strings but now "false" comes back as "1" for some reason, why is that?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer --- I don't have specific information in the available sources explaining why
"false"
would be converted to
"1"
. This behavior isn't documented in the Retell AI materials I have access to. However, looking at your earlier error response, the JSON returned was:
Copy code
{
  "success": false,
  "bookingSuccess": false,
  "error": "1",
  "code": "2"
}
It's possible that when you configured the Extract Dynamic Variables tool, you may have inadvertently mapped to the
"error"
field (which has value
"1"
) instead of the
"success"
field. [(1) ]() A few things to check: 1. Verify your variable extraction configuration — Make sure the variable name and description in your Extract Dynamic Variables tool correctly targets the
success
field, not another field like
error
. 2. Check variable type — When adding variables, you can specify the type as
Text
,
Number
,
Enum
, or
Boolean
. If you're expecting
"false"
as a string, ensure the type is set to
Text
. 3. Consider using a prompt-based transition — Given the complexity of parsing your function response, a prompt condition like
The booking function returned success as false
or
The function result indicates the booking was unsuccessful
may be more reliable than equation-based transitions. [(2) ]() If the issue persists, I'd recommend checking the
collected_dynamic_variables
field in your call details to see exactly what value is being stored.
​ To learn more, see the sources I considered: [[1] Extract Dynamic Variables](https://docs.retellai.com/build/single-multi-prompt/extract-dv) [[2] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy what is static sentence in a transfer niode?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer In a Call Transfer Node, Static Sentence is one of the two options for the Speak During Execution setting. [(1) ]() When you enable "Speak During Execution," you can choose between: - Prompt — The AI generates what to say based on instructions you provide - Static Sentence — The agent says a fixed, exact phrase that you specify With Static Sentence, you write the exact words you want the agent to say (e.g., "Please hold while I transfer you to a representative") , and the agent will say that precise phrase every time before the transfer executes. This is useful when you want consistent, predictable messaging rather than AI-generated variations.
​ To learn more, see the sources I considered: [[1] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
p
@AI Evy when programatically creating nodes how do I specify static sentence?
a
Thanks for the follow-up, @punk8357. I'll get back to you soon.
### Answer I don't have specific information in the available sources about the exact API parameter or field name for specifying "Static Sentence" versus "Prompt" when programmatically creating nodes via the Conversation Flow API. The sources confirm that the Conversation Flow API exists and allows you to "create and manage conversation flows programmatically." [(1) ]() [(2) ]() They also confirm that the "Speak During Execution" setting lets you choose between "Prompt" and "Static Sentence" in the UI. [(3) ]() [(4) ]() However, the specific API schema or parameter names for distinguishing between these two options when creating nodes programmatically is not detailed in the sources I have access to. Check out these potentially useful sources: - [Conversation Flow API Documentation]() - [Call Transfer Node]() - [Function Node Overview]() Would you like me to try to answer this generally based on my knowledge instead?
​ To learn more, see the sources I considered: [[1] Platform Changelogs | Retell AI](https://www.retellai.com/changelog) [[2] Agent transfer, MCP Client, Static IP and more](https://www.retellai.com/changelog/agent-transfer-mcp-client) [[3] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) [[4] Function Node Overview](https://docs.retellai.com/build/conversation-flow/function-node) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
Thanks for the follow-up, @punk8357. I'll get back to you soon.
p
@AI Evy sometimes i dont get a reply at all, whats going on here see below. its dr. minkowski and she has a fever Agent Jessica’s provider schedule not available in record; need availability via getappointments? Use provider_no 4 and date range; ask desired day/date first (required). Got it — fever, with Dr. Minkowski. What day are you hoping to bring Jessica in (for example tomorrow, Tuesday, or Friday)? User friday hopefully User hello? User can you transfer me? Agent Caller wants transfer. After-hours only; offer transfer to office phone per failure handling; but no tool. Ask one question? We'll comply. Sorry about that — yes, I can transfer you to the office phone. Do you want me to transfer you now? User yeah
a
viewing post-call analysis data can help identify patterns. [(6) ]()
### Answer Based on your transcript, the issue appears to be a transition failure in your Conversation Flow — the agent didn't respond after "friday hopefully" until the user said "hello?" and "can you transfer me?" [(1) ]() This is a known behavior where the conversation flow sometimes fails to transition to the next node correctly, even when conditions like "user replies" are met. Possible causes: - Speech recognition or timing issues — The turn-taking model may have had difficulty detecting the end of the user's turn, or there was a timing issue with the transition evaluation. [(2) ]() - Transition condition not triggering — The "user replies" condition may have failed due to overlapping speech, unclear audio, or system limitations. [(1) ]() Troubleshooting steps: 1. Check call logs for any errors around that timestamp. 2. Add a delay or refine your transition conditions — Consider using more explicit prompt-based conditions rather than generic "user replies." 3. Review your node's transition logic — Ensure the condition is clear and not relying too heavily on the node's instruction. [(3) ]() 4. Consider prompt engineering — Add fallback strategies in your prompts so the agent asks follow-up questions when uncertainty arises. [(4) ]() For multi-turn conversations, the AI should retain context and recover from misunderstandings without derailing the interaction. [(5) ]() If this happens frequently, re
​ To learn more, see the sources I considered: [[1] conversation flow doesn't transition correctly](https://discord.com/channels/1186424376300679209/1342666714248118343) [[2] Retell AI's Turn-Taking Model for Seamless Calls | Retell AI](https://www.retellai.com/blog/how-retell-ais-turn-taking-model-ensures-seamless-calls) [[3] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[4] Troubleshooting AI Voice Agent Issues | Retell AI](https://www.retellai.com/blog/troubleshooting-common-issues-in-voice-agent-development) [[5] Multi-Turn Conversation](https://www.retellai.com/glossary/multi-turn-conversation) [[6] 2025 B2B Guide to AI Phone Calls & Voice Agents | Retell AI | Retell AI](https://www.retellai.com/blog/b2b-guide-to-ai-phone-calls) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.