Ariz
03/20/2026, 1:24 AMAI Evy
03/20/2026, 1:24 AMAI Evy
03/20/2026, 1:24 AMAI Evy
03/20/2026, 1:24 AMAI Evy
03/20/2026, 1:24 AMAriz
03/20/2026, 1:36 AMAI Evy
03/20/2026, 1:36 AMAI Evy
03/20/2026, 1:36 AMAI Evy
03/20/2026, 1:36 AMAI Evy
03/20/2026, 1:36 AMAI Evy
03/20/2026, 1:36 AMAriz
03/20/2026, 3:35 AMAI Evy
03/20/2026, 3:35 AMAI Evy
03/20/2026, 3:36 AM{{order_short_id}}, but verify you're using double curly braces {{variable_name}}, not single braces. [(3) ]()
3. Variable name must match exactly [(1) ]()
The variable name in your URL must match exactly what you extracted (case-sensitive) . Based on community cases, use the variable name directly like {{order_short_id}} rather than dot notation.
4. For GET requests with path variables
Since you're using a GET request with the variable in the URL path (/api/orders/{{order_short_id}}) , the variable must be:
- Extracted as a dynamic variable first (not just as a response variable from another function)
- Referenced in the endpoint URL field of your custom function configuration [(4) ]()
5. Verify in call logs
Check the `collecAI Evy
03/20/2026, 3:36 AMorder_short_id using a custom function's response variables feature, that won't work for URL substitution. You need to use the Extract Dynamic Variables node/function to make it available for the subsequent custom function's URL.AI Evy
03/20/2026, 3:36 AMAI Evy
03/20/2026, 3:36 AMAI Evy
03/20/2026, 4:42 AMAriz
03/20/2026, 4:42 AMAI Evy
03/20/2026, 4:42 AMAI Evy
03/20/2026, 4:42 AMAI Evy
03/20/2026, 4:42 AMAriz
03/24/2026, 4:44 AMAI Evy
03/24/2026, 4:44 AMAI Evy
03/24/2026, 4:44 AM+61 followed by the number without spaces or special characters) [(2) ]() [(3) ]()
2. **Telephony provider support**: If you're using custom telephony via SIP trunking, your telephony provider must support international calling and transfers to Australia [(4) ]() [(5) ]()
3. **Transfer type compatibility**: The telephony provider must support caller ID override for the transfer type you're using (warm or cold transfer) [(2) ]() [(3) ]()
Troubleshooting steps:
- Check if you're using a Retell native number or custom telephony
- If using custom telephony, verify your SIP trunk configuration supports international transfers [(4) ]()
- Check your telephony provider's logs for specific error codes
- Confirm your provider has permissions enabled for international outbound calls [(5) ](AI Evy
03/24/2026, 4:44 AMAI Evy
03/24/2026, 4:44 AMAriz
03/24/2026, 5:28 AMAI Evy
03/24/2026, 5:28 AMAI Evy
03/24/2026, 5:28 AM{{customer_name}} or {{order_id}}) to provide specific context about the call. [(3) ]()
Additional Warm Transfer Settings:
- **Human Detection**: The AI confirms a human has answered before completing the transfer [(1) ]() [(2) ]()
- **Auto-greet**: When enabled, the agent immediately says "Hello" when the transfer target picks up, encouraging a response [(1) ](AI Evy
03/24/2026, 5:28 AMAI Evy
03/24/2026, 5:28 AMAI Evy
03/24/2026, 5:28 AMAriz
04/13/2026, 2:43 AMAI Evy
04/13/2026, 2:43 AMAI Evy
04/13/2026, 2:43 AMAI Evy
04/13/2026, 2:43 AM{{user_number}} - This variable automatically contains the user's phone number (from_number for inbound calls, to_number for outbound calls) .
You can use this variable directly in:
- Prompts
- Begin messages
- Tool configurations
- Call handling features
- Webhook URLs
Additionally, there's also {{agent_number}} which contains the agent's phone number (to_number for inbound, from_number for outbound) .
These system variables work out of the box - no configuration required.AI Evy
04/13/2026, 2:43 AMAriz
04/13/2026, 3:59 AMAI Evy
04/13/2026, 4:00 AMAI Evy
04/13/2026, 4:00 AM{{variable_name}} syntax [(4) ]()
- Required headers and query parameters [(3) ]()
- "Wait for Result" enabled if you need the agent to wait for the API response before continuingAI Evy
04/13/2026, 4:00 AMAI Evy
04/13/2026, 4:00 AMAriz
04/15/2026, 6:58 AMAI Evy
04/15/2026, 6:58 AMAI Evy
04/15/2026, 6:59 AMAI Evy
04/15/2026, 6:59 AM{{user_number}} or another dynamic variable for the phone field, verify:
- The variable uses double curly braces syntax {{variable_name}} [(1) ]()
- For variables other than system variables, they were extracted before this function call
- The variable name matches exactly (case-sensitive)
4. Check "Payload: args only" setting [(1) ]() [(2) ]()
When "Payload: args only" is enabled, the JSON body contains only your function's arguments at the top level (no name, call, or args wrapper) . If your endpoint expects this flat structure, enable this setting. If it expects the full Retell format, disable it.
Next steps:
1. Review your parameter schema and ensure it's valid JSON schema (not actual JSON) [(3) ]()
2. Verify all required fields are defined in the schema [(1) ]() [(2) ]()
3. Check your call logs to see what data is actually being sent to your endpoint [(1) ]()
4. Test your endpoint independently with the exact payload format Retell sends [(1) ]() [(2) ]()AI Evy
04/15/2026, 6:59 AMphone field is missing (received "undefined" instead of expected "string") . [(1) ]() [(2) ]()
Common causes for this error:
1. Incorrect parameter schema [(3) ]()
The parameters section in your custom function expects a JSON schema, not the actual JSON. You need to define the "shape" of your request body using JSON schema format.
Use a tool like to convert your desired JSON body into the proper JSON schema format, then paste that schema into the parameters field.
2. Missing required fields
Your API expects a phone field but it's not being included in the request. Ensure your parameter schema includes all required fields with proper types: [(1) ]() [(2) ]()
json
{
"type": "object",
"required": ["phone"],
"properties": {
"phone": {
"type": "string",
"description": "User phone number"
}
}
}AI Evy
04/15/2026, 6:59 AMAriz
04/15/2026, 7:25 AMAI Evy
04/15/2026, 7:25 AMAI Evy
04/15/2026, 7:25 AM{{user_number}} variable is not being substituted because it's a phone-specific system variable that only works during actual phone calls. [(1) ]()
According to the documentation, {{user_number}} is listed under "Phone Call Variables" - these variables are only available for phone calls, not for chat sessions. During chat testing, phone-related system variables like {{user_number}} and {{agent_number}} remain as literal strings (with the curly braces) because there's no phone number context in a chat session.
Yes, it will reflect the actual phone number value during a real call. When you make an actual phone call (inbound or outbound) , the {{user_number}} variable will automatically populate with the caller's phone number.
To test this functionality:
1. Use Test Audio or Web Call features instead of Test Chat - these simulate actual voice calls and should populate phone-related variables
2. Make a real phone call to verify the variable substitution works in production
Alternative for chat testing:
If you need to test the function during chat sessions, you could temporarily:
- Set a default value for a custom variable (not {{user_number}}) at the agent level
- Or manually provide test values in the testing variables section during chat testing
The {{user_number}} system variable specifically requires a phone call context to work properly.AI Evy
04/15/2026, 7:25 AMAI Evy
04/15/2026, 7:25 AMAriz
04/15/2026, 7:39 AMAI Evy
04/15/2026, 7:39 AMAI Evy
04/15/2026, 7:39 AMAI Evy
04/15/2026, 7:39 AMtools and tool_ids fields on conversation nodes are deprecated as of 04/18/2026 in favor of the new subagent node type. The conversation node type itself is not deprecated—it continues to work for nodes that don't use tools.
After 04/18/2026, existing conversation nodes with tools will be automatically migrated to type: "subagent".
When to Use Each:
- Use Conversation Node when you only need dialogue without tool calling [(1) ]()
- Use Subagent Node when the agent should decide whether and when to call a tool/function based on what the user says [(2) ]()
Subagent Node Features:
- Multiple tools/functions can be added to a single subagent node
- The agent can continue talking while a tool/function executes
- Tool/function results are available to the LLM for generating follow-up responses
- Only supports Prompt instrAI Evy
04/15/2026, 7:39 AMStatic Sentence)AI Evy
04/15/2026, 7:39 AMAriz
04/15/2026, 8:10 AMAI Evy
04/15/2026, 8:10 AMAI Evy
04/15/2026, 8:11 AMretell_llm_dynamic_variables field. All values must be strings:
json
{
"user_name": "John Smith",
"product_name": "Premium Plan",
"account_status": "active"
}
3. For Inbound Calls
Supply dynamic variables in the Inbound Call Webhook.
4. Using the Update Call API [(2) ]()
You can update the call and override dynamic variables during an active call using the Update Call API endpoint.
Important Notes:
- All values in retell_llm_dynamic_variables must be strings - numbers, booleans, or other data types are not supported [(1) ]()
- Spaces around the variable name will be trimmed when evaluating the variable
- Default variables set at the agent level only apply when specific variables aren't included in the call request
These methods let you assign static or programmatic values to variables without needing to extract them from the conversation.AI Evy
04/15/2026, 8:11 AMAI Evy
04/15/2026, 8:11 AMAriz
04/23/2026, 8:05 AMAI Evy
04/23/2026, 8:05 AMAI Evy
04/23/2026, 8:05 AMjson
{
"properties": {
"user": {
"name": "John Doe",
"age": 26
}
}
}AI Evy
04/23/2026, 8:05 AMuser_name → JSON path: properties.user.name
- Variable name: user_age → JSON path: properties.user.age
Then reference these later using {{user_name}} or {{user_age}}. [(1) ]()
Important Notes:
- The function result is capped at 15,000 characters to prevent overloading the LLM context window [(1) ]() [(2) ]()
- If you're extracting from an array response, use array indexing. For example, if patient is an array, use patient[0].providerNo to get the first item's provider number [(3) ]()
- Response variables work with all HTTP methods (GET, POST, PUT, PATCH, DELETE) [(1) ]() [(2) ]()
This feature allows you to pull data from external APIs and make it available throughout your conversation flow without requiring the user to provide that information verbally.AI Evy
04/23/2026, 8:05 AMAI Evy
04/23/2026, 8:05 AMAriz
04/23/2026, 8:40 AMAI Evy
04/23/2026, 8:40 AMAI Evy
04/23/2026, 8:40 AMjson
{
"coordinates": [
[153.0299526, -27.4690095],
[153.0263476, -27.4681999],
[153.025835, -27.4748377]
]
}
Configure response variables like this:
- Variable name: first_longitude → JSON path: coordinates[0][0]
- Variable name: first_latitude → JSON path: coordinates[0][1]
- Variable name: second_longitude → JSON path: coordinates[1][0]
- Variable name: second_latitude → JSON path: coordinates[1][1]
This extracts specific values from the nested arrays. You can then reference them as {{first_longitude}}, {{first_latitude}}, etc. throughout your conversation flow. [(1) ]() [(2) ]()
Path syntax for arrays: [(3) ]()
- coordinates[0] extracts the first coordinate pair array
- coordinates[0][0] extracts the longitude from the first pair
- coordinates[0][1] extracts the latitude from the first pair
If you need to extract all coordinates or process them dynamically, you might need to use a Code Node instead, which gives you full JavaScript access to manipulate the response.AI Evy
04/23/2026, 8:40 AMAI Evy
04/23/2026, 8:40 AMAriz
05/07/2026, 3:29 AMAI Evy
05/07/2026, 3:29 AMAI Evy
05/07/2026, 3:30 AM{{user_number}} system variable with a conditional check. The {{user_number}} variable contains the user's phone number for phone calls. [(1) ]()
Detection Method:
In your Conversation Flow, you can check if the variable exists using equations:
- Equation: {{user_number}} exists
- Result: Returns True if the variable is defined (even an empty string is considered having a value)
Handling Missing Phone Numbers:
When a dynamic variable has no assigned value, it remains in its raw form with the curly braces intact. For example:
- If user_number is not provided: "{{user_number}}"
- If user_number is available: the actual phone number
Best Practice for Your Flow:
You can add conditional logic in your prompts:
"If {{user_number}} appears with curly braces, the caller's number is hidden or unavailable. Otherwise, use the phone number."
Alternatively, use a transition condition in your flow to branch based on whether {{user_number}} exists, directing callers with hidden numbers to a different path (e.g., asking them to provide their number verbally) .AI Evy
05/07/2026, 3:30 AMAI Evy
05/07/2026, 3:30 AMAriz
05/15/2026, 5:01 AMAI Evy
05/15/2026, 5:01 AMAI Evy
05/15/2026, 5:02 AMAI Evy
05/15/2026, 5:02 AMuser_email
- **Description**: Be very specific: "The user's email address. Ask the user to spell it out letter by letter, including the domain (e.g., g-m-a-i-l dot com) . Confirm by repeating the full email back to the user for verification."
- **Variable Type**: Select Text
2. Add Verification in Your Prompt: [(2) ]()
Use defensive prompting with the dynamic variable to handle validation:
"After collecting the email address {{user_email}}, always repeat it back to the caller character by character and ask them to confirm it's correct. If {{user_email}} appears with curly braces, the email hasn't been captured yet."
3. Use Conversation Flow Transitions: [(1) ]()
Create a verification loop:
- After the Extract Dynamic Variable Node, add a Conversation Node that reads back the email
- Add a transition condition checking if the user confirms it's correct
- If incorrect, loop back to re-extract the email
4. Prompt the Agent to Spell It Out:
In your node instructions, explicitly tell the agent: "Ask the user to spell their email address slowly, letter by letter, including the @ symbol and domain extension. Then repeat the entire email back for confirmation before proceeding."
Best Practice: [(2) ]()
Set a default vAI Evy
05/15/2026, 5:02 AMAI Evy
05/15/2026, 5:02 AMAI Evy
05/15/2026, 5:19 AMAriz
05/15/2026, 5:19 AMAI Evy
05/15/2026, 5:19 AMAI Evy
05/15/2026, 5:19 AMAI Evy
05/15/2026, 5:19 AM{{booking_id}} existsAI Evy
05/15/2026, 5:19 AMAriz
05/15/2026, 5:24 AMAI Evy
05/15/2026, 5:24 AMAI Evy
05/15/2026, 5:24 AMOnly answer using the information in ## Related Knowledge Base Contexts.
If ## Related Knowledge Base Contexts is missing or does not contain relevant information, respond:
"There is no related information in knowledge base."AI Evy
05/15/2026, 5:24 AMAI Evy
05/15/2026, 5:24 AMAI Evy
05/15/2026, 5:24 AMAriz
05/15/2026, 5:59 AMAI Evy
05/15/2026, 5:59 AMAI Evy
05/15/2026, 5:59 AMAI Evy
05/15/2026, 5:59 AMAI Evy
05/15/2026, 5:59 AMexists operator:
{{variable_name}} exists
This returns True if the variable is defined and has a value (even an empty string is considered having a value) .
For Multiple Required Variables:
You can create transition conditions that require ALL variables to be present by using multiple equations with the "ALL" logic:
{{user_name}} exists
{{user_email}} exists
{{booking_date}} exists
Then change the condition from "ANY" to "ALL" to force all equations to be true.
Best Practice - Create Two Transition Paths:
1. Success path (when all required variables exist) : Transition to the next node in your flow
2. Retry path (when variables are missing) : Loop back to the Conversation Node to re-ask for the missing information
Note on Transition Timing:
The transition usually happens after the user speaks. When testing in the dashboard (both audio and text) , you can see what node is highlighted to find the current node and observe when the transition happens.
This approach ensures your flow only proceeds when all critical data has been successfully extracted.Ariz
05/15/2026, 6:06 AMAI Evy
05/15/2026, 6:06 AMAI Evy
05/15/2026, 6:06 AM## Capabilities
You can help users with [list your actual capabilities].
## Important Limitations
- You CANNOT send emails or email quotes
- You CANNOT process payments
- Do NOT offer to email anything to users
- If users request email functionality, politely explain: "I'm unable to send emails at this time. However, I can [alternative action you DO support]."
Best Practice for Tool Instructions:
Define clear triggers for when tools should be called. Since you don't have an email function, explicitly state when NOT to offer email:
## Tool Usage Instructions
- Do NOT mention emailing quotes or any email functionality
- Only offer capabilities that have corresponding functions configured
- If asked about emailing, redirect to available alternatives
Why This Happens:
LLMs can be overly helpful and suggest actions they think would be useful, even if those capabilities don't exist. Without explicit constraints, the agent may improvise features based on common customer service patterns it learned during training.
Additional Strategy:
Review your Knowledge Base content (if attached to the node) to ensure it doesn't mention email capabilities that might be prompting the agent to offer this service.AI Evy
05/15/2026, 6:06 AMAI Evy
05/15/2026, 6:06 AMAriz
05/19/2026, 4:42 AMAI Evy
05/19/2026, 4:42 AMAI Evy
05/19/2026, 4:43 AM{{current_time}} dynamic variable: [(1) ]() [(2) ]()
Configure Your Logic Split Node:
Add equation conditions like this: [(2) ]()
{{current_time}} >= 8 AND {{current_time}} < 17
This checks if the current time is between 8am (08:00) and 5pm (17:00) .
Important Timezone Consideration:
Based on the available documentation, there's no explicit timezone configuration setting mentioned for the {{current_time}} variable. The sources show equation examples using {{current_time}} but don't specify how timezone is handled:
{{current_time}} > 9 AND {{current_time}} < 18AI Evy
05/19/2026, 4:43 AM{{current_time}} uses by default
2. If it doesn't match Brisbane time (AEST/AEDT) , consider using a Custom Function or Code Node to get the current Brisbane time and store it as a dynamic variable, then use that variable in your Logic Split Node equation
Setting Up the Logic Split:
1. Add your equation condition checking the time range [(1) ]() [(2) ]()
2. Set the destination node for when the condition is true (during operating hours) [(1) ]()
3. Set the else destination for when the condition is false (outside operating hours) - this is required as the Logic Split Node always needs a default path
The transition happens immediately when the agent enters the Logic Split Node.
I don't have information about timezone configuration in the available sources. You might want to reach out to support for clarification on how {{current_time}} handles timezones, or consider implementing a custom solution to handle Brisbane time specifically.AI Evy
05/19/2026, 4:43 AMAI Evy
05/19/2026, 4:43 AMAriz
05/26/2026, 12:41 AMAI Evy
05/26/2026, 12:41 AMAI Evy
05/26/2026, 12:41 AMAI Evy
05/26/2026, 12:41 AMAI Evy
05/26/2026, 12:41 AMAriz
05/28/2026, 4:30 AMAI Evy
05/28/2026, 4:30 AMAI Evy
05/28/2026, 4:30 AMAI Evy
05/28/2026, 4:30 AMsip:{call_id}@sip.retellai.com
I recommend reaching out to Retell support or checking their community for specific guidance on implementing this reverse-escalation pattern, as it's not covered in the documentation I have access to.AI Evy
05/28/2026, 4:30 AMAriz
06/09/2026, 7:40 AMAI Evy
06/09/2026, 7:40 AMAI Evy
06/09/2026, 7:40 AMAI Evy
06/09/2026, 7:40 AMAI Evy
06/09/2026, 7:40 AMAI Evy
06/09/2026, 7:40 AMAriz
06/10/2026, 2:10 AMAI Evy
06/10/2026, 2:10 AMAI Evy
06/10/2026, 2:11 AM{{user_name}} exists
{{user_email}} exists
{{booking_id}} exists
This ensures the extraction was successful before moving to the next node.
2. Validate Variable Values with Equations:
Create conditional branches based on extracted values:
{{user_age}} > 18
{{user_location}} == "New York"
"New York, Los Angeles" CONTAINS {{user_location}}
3. Multiple Variables with ALL Logic:
Require all critical variables to be extracted before transitioning:
{{customer_name}} exists
{{customer_email}} exists
{{booking_date}} exists
Then change the condition from "ANY" to "ALL" to force all equations to be true.
4. Combine Existence Check with Value Validation:
{{booking_id}} exists
{{booking_id}} != ""
Best Practice:
Equation conditions are evaluated first (top to bottom) , and the flow travels on the first condition that evaluates to true. This makes them more reliable than prompt conditions for checking whether variables were successfully extracted. [(3) ]()
If no transition condition is met, the agent will transition to the else destination node. [(1) ]() [(2) ]()AI Evy
06/10/2026, 2:11 AMAI Evy
06/10/2026, 2:11 AMAriz
06/10/2026, 2:14 AMAI Evy
06/10/2026, 2:14 AMAI Evy
06/10/2026, 2:14 AMConversation Node (ask for info)
↓
Extract Variable Node
├─ Transition: {{variable}} exists → Next Step Node
└─ Else → Back to Conversation Node (retry)
Best Practice:
The else destination is required for Extract Variable Nodes - you must specify where to go when extraction conditions aren't met. [(1) ]() Most commonly, this creates a validation loop that ensures critical data is captured before proceeding. [(2) ]()
If you're checking multiple variables with "ALL" logic and any variable is missing, the else path activates, allowing you to handle incomplete extractions gracefully.AI Evy
06/10/2026, 2:14 AMAI Evy
06/10/2026, 2:14 AMAriz
06/10/2026, 2:22 AMAI Evy
06/10/2026, 2:22 AMAI Evy
06/10/2026, 2:22 AMUser mentioned mattresses AND provided the number of mattresses
- Destination: Next node in your flow (e.g., Extract Variable Node or next question)
2. Condition 2 (Other items only) :
- Prompt: User mentioned item types but NOT mattresses
- Destination: Next node (skip mattress quantity question)
3. Else Destination:
- Route back to the same Conversation Node to re-ask if the user didn't provide item types
Why Not Use "Always" or "Skip":
- **Always**: Would transition immediately without waiting for user response - not appropriate here since you need the user to answer
- **Skip Response**: Would skip the agent speaking this node's content - you want the agent to actually ask the question [(2) ]()
Alternative Approach - Split Into Two Nodes:
For better control, consider splitting this into:
1. **Node 1**: Ask about item types
- Transition condition: User mentioned mattresses → Go to mattress quantity node
- Else: Skip to next topic
2. **Node 2**: Ask mattress quantity (only reached if mattresses mentioned)
- Transition: User provided number → Continue flow
- Else: Loop back to re-ask
Equation Conditions Won't Work Here because you don't have pre-existing dynamic variables for item types yet - the information is being gathered during this conversation. [(1) ](httAI Evy
06/10/2026, 2:22 AMAI Evy
06/10/2026, 2:22 AMAriz
06/10/2026, 4:23 AMAI Evy
06/10/2026, 4:23 AMAI Evy
06/10/2026, 4:23 AM{{variable_name}} exists
- Destination: Next node in your flow
2. Condition 2 (Variable not extracted - also proceed) :
- Equation: {{variable_name}} does not exist
- Destination: Same next node in your flow
Both conditions route to the same destination, effectively making the variable optional while still having explicit transition logic. [(1) ]()
Alternative - Simpler Approach:
Since you mentioned the else can't be removed, you can use:
1. Single transition condition:
- Prompt: User provided any response or information
- Destination: Next node
2. Else destination:
- Route to the same next node
This way, whether the variable is extracted or not, the flow continues forward. [(1) ]() [(2) ]()
Why This Works:
The else destination is required for Extract Variable Nodes. [(2) ]() By routing both your explicit condition AND the else path to the same destination node, you effectively make the extraction optional while satisfying the requirement to define an else path. [(1) ]()
The transition typically happens after the user speaks, so the node will attempt extraction and then proceAI Evy
06/10/2026, 4:23 AMAI Evy
06/10/2026, 4:23 AMAI Evy
06/10/2026, 4:23 AMAriz
06/10/2026, 4:53 AMAI Evy
06/10/2026, 4:53 AMAI Evy
06/10/2026, 4:53 AM1 == 1 or a prompt like "User has responded")
- Destination: Your next node
- Else destination: Same next node
This ensures the extraction attempt completes before transitioning, while still making the variable optional since both paths lead forward. [(1) ]() [(2) ]()AI Evy
06/10/2026, 4:53 AMAI Evy
06/10/2026, 4:53 AMAriz
06/15/2026, 4:34 AMAI Evy
06/15/2026, 4:34 AMAI Evy
06/15/2026, 4:35 AM///## Task Instructions
1. Inform the caller you've calculated their hauling estimate
2. Present the estimate details clearly:
- Total estimated cost
- Key items included
- Any relevant conditions
3. Address precision based on address specificity:
- If the caller provided only a suburb (not a specific street address) :
→ Clearly state: "This is an approximate estimate based on the suburb. The final price will depend on your exact street address."
- If a specific street address was provided:
→ State: "This estimate is based on your provided address."
4. Offer alternative options:
- Mention: "You can also get a detailed quotation through our website at picup.com.au"
5. Ask if the caller wants to proceed with the booking
///## Response Guidelines
Be clear about estimate vs final pricing
Acknowledge any limitations in the estimate accuracy
Present the website option naturally, not as a deflection
Why This Structure Works:
Breaking the prompt into sectional components makes it easier for the LLM to follow specific logic paths and handle conditional scenarios reliably.
Handling Address Specificity with Dynamic Variables:
You can use dynamic variables to track address precision: [(2) ]()
{{address_type}}
Then reference it in your prompt:
If {{address_type}} is "suburb_only", emphasize that the estimate is approximate and final pricing requires a specific street address.AI Evy
06/15/2026, 4:35 AM{{address_type}} is specific or suburb-only
3. Node 2a: Handle suburb-only disclaimer
4. Node 2b: Handle specific address confirmation
5. Node 3: Ask about booking + mention website option
This provides more fine-grained control over the conversation flow compared to handling everything in a single prompt.AI Evy
06/15/2026, 4:35 AMAI Evy
06/15/2026, 4:35 AM