https://retellai.com/?utm_source=discord&utm_medium=seo logo
Hi I’m running into an availability handling iss...
# ❓・ai-evy-support
d
Hi @AI Evy I’m running into an availability handling issue with a Retell outbound AI agent and would appreciate guidance. Current Setup GHL (GoHighLevel) triggers outbound calls. Retell AI agent makes the call. Availability data (multiple time slots for the same date) is successfully passed to the agent. The agent correctly reads the date (e.g., Feb 10th). There are multiple valid available time slots for that date. Problem Even though multiple time slots exist, the agent only reads one availability option instead of enumerating multiple slots. Example: Correct: Feb 10th Available slots: 10:00 AM, 11:30 AM, 2:00 PM Agent behavior: Only reads “10:00 AM” and stops. Goal I want the agent to: Always provide exactly 3 availability options (if available) Read them one by one clearly Then ask which one works best Notes Availability data is confirmed to be present. This appears to be a prompt behavior issue, not a data issue. Agent currently has structured instructions but still defaults to summarizing into one slot. Questions Is there a recommended way in Retell to force enumeration of array data? Should this be handled via tool formatting instead of prompt rules? Is there a better way to structure availability JSON so the agent doesn’t summarize? Any guidance on best practice for structured multi-slot availability reading would be appreciated.
a
Thanks for tagging me @Deviate. I'll look through relevant sources and get back to you shortly.
### Answer This is a prompt engineering issue, and the solution is to provide explicit, step-by-step instructions in your prompt. LLMs tend to summarize unless given very specific guidance on how to handle array data. [(1) ]() ## Recommended Approach: Explicit Prompt Instructions Structure your prompt using sectional organization with clear task instructions. Here's how to format your availability handling:
Copy code
## Task Instructions
When presenting availability options:
1. Always read exactly 3 time slots if available (or all slots if fewer than 3 exist)
2. Present each slot one by one in spoken form: "Your first option is [time], your second option is [time], your third option is [time]"
3. After listing all options, ask: "Which of these times works best for you?"

## Response Guidelines
Return times in spoken form: Say "ten AM" not "10:00 AM".
Never summarize multiple slots into one.
Never skip available time slots.
## Key Tips Use trigger words and explicit sequences — The prompt engineering guide recommends listing specific conditions and defining sequences for how the agent should behave. Consider Conversation Flow — If you're finding Single/Multi Prompt agents unreliable for this use case, Conversation Flow agents provide more deterministic control. Each node can focus on one specific task, and you get more predictable agent behavior. Dynamic Variables — Ensure your availability data is being passed correctly via
retell_llm_dynamic_variables
. All values must be strings. [(2) ]() You could structure your availability as separate variables like
{{slot_1}}
,
{{slot_2}}
,
{{slot_3}}
rather than a single array, which may help the agent enumerate them more reliably. ## Regarding Tool Formatting Tool formatting won't solve this specific issue since it's about how the agent speaks the data, not how it retrieves it. The fix is in prompt instructions that explicitly tell the agent to enumerate rather than summarize. [(1) ]()
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer I don't see an attached prompt in your message—it looks like the attachment may not have come through. Could you please paste your prompt text directly into the chat or re-upload the attachment? Once I can see your current prompt, I can provide specific suggestions based on the prompt engineering best practices for Retell AI, such as: - Using sectional prompts with clear headers like
## Task Instructions
and
## Response Guidelines
[(1) ]() - Adding explicit enumeration instructions that tell the agent to list each slot one by one rather than summarizing - Ensuring your dynamic variables are formatted correctly (no spaces inside the curly braces—use
{{variable_name}}
not
{{ variable_name }}
) [(2) ]() - Considering whether to pass availability as separate variables like
{{slot_1}}
,
{{slot_2}}
,
{{slot_3}}
rather than a single array [(3) ]() Please share your prompt and I'll review it for you.
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Issue with Dynamic Variables.](https://discord.com/channels/1186424376300679209/1336469878068219904) [[3] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer I don't see an attachment in your message—it looks like the file didn't come through. Could you please paste your prompt text directly into the chat or try re-uploading the attachment? Once I can see your current prompt, I can review it against these best practices: Sectional organization — Use clear headers like
## Task Instructions
and
## Response Guidelines
to structure your prompt [(1) ]() Explicit enumeration — Add specific instructions telling the agent to list each time slot one by one rather than summarizing Dynamic variable formatting — Ensure you're using the correct syntax
{{variable_name}}
with no spaces inside the curly braces [(2) ]() Separate variables for slots — Consider passing availability as individual variables like
{{slot_1}}
,
{{slot_2}}
,
{{slot_3}}
rather than a single array, which may help the agent enumerate them more reliably Knowledge base vs prompt — For business-specific data like availability, you can load context and immediate conversation needs in the prompt while storing more extensive information in a knowledge base [(3) ](

▾

) Please share your prompt text and I'll provide specific corrections.
​ To learn more, see the sources I considered: [[1] Prompt Engineering](https://www.retellai.com/glossary/prompt-engineering) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[3] Master The Future of Voice AI - Conversation Design & Agent Persona](

https://www.youtube.com/watch?v=42V0bDQIsb0▾

) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer I still don't see an attachment in your message—the file doesn't appear to have come through. Could you please paste your prompt text directly into the chat as plain text? Once I can see your prompt, I'll review it against these Retell AI prompt engineering best practices: ## Recommended Prompt Structure Use sectional organization with clear headers: [(1) ]()
Copy code
## Identity
You are a friendly AI assistant for [Company Name].

## Style Guardrails
Be concise: Keep responses under 2 sentences unless explaining complex topics.
Be conversational: Use natural language and acknowledge what the caller says.

## Response Guidelines
Return dates in spoken form: Say "January fifteenth" not "1/15".
Ask one question at a time.

## Task Instructions
[Specific steps for availability handling]
## For Your Availability Issue Specifically Add explicit enumeration instructions in your Task Instructions section: - Define trigger words that should prompt the availability listing behavior - Specify exact sequences for how the agent should present slots - Set boundaries on summarization behavior ## Dynamic Variable Formatting Ensure your availability variables use correct syntax
{{variable_name}}
with no spaces inside the curly braces. [(2) ]() Consider passing slots as separate variables like
{{slot_1}}
,
{{slot_2}}
,
{{slot_3}}
rather than a single array. Please paste your prompt text directly and I'll provide specific corrections.
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
what type of files you could able to read if I attach? Because when I paste the prompt it gets added as message file and I uploaded it as notepad as well @AI Evy
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer I can't read file attachments in Discord—I can only see text that's typed directly into the chat. To share your prompt, please: 1. Open your prompt in Notepad (or wherever you have it) 2. Select all the text (Ctrl+A) 3. Copy it (Ctrl+C) 4. Paste it directly into the Discord chat as a message (Ctrl+V) If Discord converts it to a file attachment automatically, try breaking it into smaller chunks across multiple messages, or wrap it in code blocks using triple backticks:
Copy code
```
Your prompt text here
``` Once you paste the text directly, I'll be able to read it and provide specific feedback on your availability handling instructions.
message has been deleted
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy Are you able to ready the text from an image?
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer No, I can't read text from images—I can only process text that's typed directly into the chat. Here's the best way to share your prompt: 1. Open your prompt file 2. Select all text and copy it 3. Paste it directly into Discord as a message If it's long, you can split it across multiple messages or wrap it in code blocks like this:
Copy code
`
Your prompt text here
Copy code
`
Once you paste the actual text, I can review it against Retell AI's prompt engineering best practices for your availability enumeration issue—specifically checking your sectional organization, task instructions, and dynamic variable formatting. [(1) ]() [(2) ]()
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
'ROLE: You are Alex, an AI Growth Assistant calling from Deviate Media. IMPORTANT BEHAVIOR RULES: Today's Date: {{current_time_America/New_York}} Booking Rules: You are a helpful booking assistant. You must only offer the following available slots: {{availability_text}}. If a user asks for a time not in this list, tell them it is unavailable and suggest the closest time from the list. Strictly you are NOT allowed to speak until the human You are NOT allowed to say “I’ll wait”, “take your time”, or any waiting-related language. When the call connects, remain silent. As soon as the human speaks, you MUST respond immediately. Do not use filler phrases like “I’ll wait” or “let me know when you’re ready.” Do not mention booking, links, SMS, or scheduling until the prospect agrees. PERSONA SUMMARY READING RULES (STRICT): - {{persona_summary}} may contain a full descriptive paragraph. - You MUST read the persona summary fully and verbatim. - You are NOT allowed to shorten, paraphrase, summarize, or truncate it. - Do not reduce it to keywords or a short phrase. - Only skip this section if {{persona_summary}} is empty or missing. OPENING GREETING (use this once the prospect acknowledges the call): “Hi {{first_name}}, this is Alex, an AI Growth Agent calling from Deviate Media.”" 1st chunk of prompt @AI Evy
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Thanks for sharing the first chunk! I can see the issue—your prompt references
{{availability_text}}
as a single variable, but there's no explicit instruction telling the agent how to enumerate multiple slots from that variable. [(1) ]() Key Issues in This Chunk: 1. Single variable for all slots — You're passing availability as
{{availability_text}}
, which likely contains all slots together. The agent is summarizing rather than enumerating because there's no explicit instruction to list them one by one. 2. Missing enumeration instructions — Your "Booking Rules" section tells the agent to "only offer" the available slots but doesn't specify how to present them (e.g., list exactly 3, read each one separately, then ask for preference) . Recommended Fix for This Section: Replace your current Booking Rules with something like:
Copy code
Booking Rules: 
- Available slots: {{availability_text}}
- When presenting availability, you MUST:
  1. List up to 3 time slots individually (e.g., "Your first option is [time], your second option is [time], your third option is [time]")
  2. Read each slot one by one—never summarize multiple slots into one statement
  3. After listing all options, ask: "Which of these times works best for you?"
- If a user asks for a time not in this list, tell them it is unavailable and suggest the closest available time.
Better Approach — Separate Variables: Consider passing availability as separate dynamic variables like
{{slot_1}}
,
{{slot_2}}
,
{{slot_3}}
rather than a single
{{availability_text}}
array. This makes enumeration more reliable since the agent can reference each slot explicitly. Please share the remaining chunks and I'll review the full prompt structure.
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy 2nd chunk of prompt CALL SCRIPT (spoken naturally, in paragraph form) After the greeting: “The reason I’m calling is to show you what AI can do for your business, {{business_name}} — and you’re actually hearing it in action right now. I’ve been trained on your website, which is why I already understand what your business does before we’ve even spoken.” “From what I can see, your business is focused on {{persona_summary}} That kind of context is powerful, because it’s exactly how our AI understands and responds to your leads the moment they reach out.” “From what I can see, you’re actively working on growing your business and getting more leads.” “At Deviate Media, we have over 20 years of experience helping businesses grow. Today, we pair that experience with AI to automate lead engagement, marketing, inbound and outbound calls, follow-ups, and text messaging — making sure every lead is handled instantly and professionally.” “This puts your lead engagement on autopilot, so instead of playing phone tag or chasing follow-ups, you can stay focused on running the business and closing more work.” DISCOVERY CALL ASK (ONLY ask this once the conversation is flowing): “Would you be open to a quick 20-minute discovery call with our AI specialist Greg, to see how this could work specifically for {{business_name}}?” AVAILABILITY HANDLING When availability is provided to you via webhook, it will arrive as {{availability_text}}: availability: grouped by date with multiple time slots IMPORTANT AVAILABILITY RULES (NON-NEGOTIABLE): The availability payload is the ONLY source of truth. You MUST NOT calculate, infer, guess, extend, or modify dates. You MUST ONLY speak dates and times that appear explicitly in the availability payload {{availability_text}}.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Thanks for sharing this chunk! I can now see your AVAILABILITY HANDLING section—this is where the fix needs to happen. You have good rules about not modifying dates, but you're missing the critical enumeration instructions that tell the agent how to present multiple slots. [(1) ]() ## The Problem Your current prompt says: - "availability: grouped by date with multiple time slots" - Rules about only using the payload But there's no instruction telling the agent to list each slot individually. Without explicit guidance, LLMs tend to summarize array data into a single response. ## Recommended Fix Replace your AVAILABILITY HANDLING section with explicit enumeration steps:
Copy code
AVAILABILITY HANDLING

When availability is provided via {{availability_text}}:

1. ALWAYS present exactly 3 time slots if available (or all slots if fewer than 3 exist)
2. Read each slot ONE BY ONE in spoken form:
   - "Your first option is [day] at [time]"
   - "Your second option is [day] at [time]"  
   - "Your third option is [day] at [time]"
3. NEVER summarize multiple slots into one statement
4. NEVER say "I have availability on [date]" without listing specific times
5. After listing all options, ask: "Which of these times works best for you?"

IMPORTANT AVAILABILITY RULES (NON-NEGOTIABLE) :
- The availability payload is the ONLY source of truth
- You MUST NOT calculate, infer, guess, extend, or modify dates
- You MUST ONLY speak dates and times that appear explicitly in {{availability_text}}
The key addition is steps 1-5 with trigger words and explicit sequences for how the agent should behave. Please share any remaining chunks so I can review the full prompt structure.
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy 3rd chunk of prompt SLOT SELECTION RULES (IMPORTANT): For each date, you MUST offer: Provide the availability within next 7 working days Monday to Friday. 1–2 morning slots (before 12:00 PM) 1–2 afternoon slots (12:00 PM or later) Offer no more than 4 total slots per day. If only one period exists (morning or afternoon), offer up to 2 slots total. Always start with the earliest available date. Speak times naturally (example: “10:30 AM”). Always mention the timezone. HOW TO SPEAK AVAILABILITY (USE THIS EXACT FORMAT) “I have availability on {{weekday}}, {{date}} with a couple of options.” “In the morning, I have {{morning_slot_1}} and {{morning_slot_2}}.” “In the afternoon, I have {{afternoon_slot_1}} and {{afternoon_slot_2}}.” “All times are in {{timezone}}. Which one works best for you?” ⚠️ If only one morning or afternoon slot exists, mention only what’s available. EXAMPLE SPOKEN RESPONSE “I have availability on Monday, February 2nd. In the morning, I have 10:30 AM or 11:00 AM. In the afternoon, I have 1:30 PM or 2:00 PM Eastern Time. Which one works best for you?”
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
d
@AI Evy 4th chunk of prompt CONFIRMATION AFTER THE LEAD CHOOSES A TIME (ADD THIS) Once the prospect clearly selects a date and time, say this immediately: “Perfect — I’ve got you down for {{confirmed_date}} at {{confirmed_time}} Eastern Time.” “Before we finish, I’ll quickly confirm the details so everything is accurate. The appointment is scheduled for {{DATE}} at {{TIME}} {{TIMEZONE}}. “You’ll receive a calendar invite along with an SMS confirmation at the mobile number you provided, so you’ll have everything saved.” “Greg will see you then. Bye” End the call (Do not ask more questions unless they do.) When the user verbally confirms a specific appointment date and time, output a JSON object in the booking_details field containing confirmed_date, confirmed_time, timezone, lead_phone, and lead_name. Only populate this when the booking is confirmed. Set booking_confirmed to true. If the prospect asks for another day: Move to the next available date Repeat the same format Once the prospect clearly confirms a date and time: Repeat it back for confirmation Store the confirmed appointment date and time for post-call actions IF THEY SAY NO OR SEEM UNSURE: “No problem at all — I really appreciate you taking the call today, {{first_name}}. Have a great rest of your day.” SAFETY: If {{persona_summary}} is missing or unclear, keep the explanation high-level. Do not guess or invent details. Keep the tone calm, confident, and conversational.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer This third chunk looks well-structured with explicit enumeration instructions and a clear spoken format template. However, there's a mismatch between your variables that's likely causing the issue. ## The Problem Your AVAILABILITY HANDLING section (chunk 2) references
{{availability_text}}
as a single variable containing grouped data, but your HOW TO SPEAK AVAILABILITY section (chunk 3) references individual variables like
{{morning_slot_1}}
,
{{morning_slot_2}}
,
{{afternoon_slot_1}}
,
{{afternoon_slot_2}}
,
{{weekday}}
,
{{date}}
, and
{{timezone}}
. [(1) ]() If you're only passing
{{availability_text}}
from GHL, the agent doesn't have access to
{{morning_slot_1}}
, etc.
— those variables would be empty or undefined, which explains why the agent defaults to reading just one slot. ## Recommended Fix Option A: Pass separate variables from GHL Update your GHL webhook to pass availability as individual dynamic variables: -
{{weekday}}
-
{{date}}
-
{{morning_slot_1}}
-
{{morning_slot_2}}
-
{{afternoon_slot_1}}
-
{{afternoon_slot_2}}
-
{{timezone}}
This matches your spoken format template and gives the agent explicit slots to enumerate. Option B: Consolidate to one variable approach If you must use
{{availability_text}}
, remove the individual slot variable references and rewrite the spoken format to work with the single variable—but this is less reliable for enumeration. ## Additional Suggestion If reliability remains an issue after fixing the variables, consider switching to a Conversation Flow agent. Each node can focus on one specific task with more deterministic behavior, which is recommended when Single/Multi Prompt agents show inconsistent behavior with 5+ functions or complex logic. [(2) ](
multi-prompt/prompt-overview) , [(1) ]() Do you have any remaining chunks, or would you like help restructuring the GHL webhook payload?
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Single/Multi Prompt Agent Overview](https://docs.retellai.com/build/single-multi-prompt/prompt-overview) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
### Answer Thanks for sharing all four chunks! Now I can see the full picture. Your 3rd chunk actually has good enumeration structure with the "HOW TO SPEAK AVAILABILITY" section, but there's a conflict between your instructions that's likely causing the issue. ## The Core Problem You have **conflicting instructions**: 1. Chunk 1 says: "You must only offer the following available slots: `{{availability_text}}`" — a single variable 2. Chunk 3 references separate variables:
{{morning_slot_1}}
,
{{morning_slot_2}}
,
{{afternoon_slot_1}}
,
{{afternoon_slot_2}}
If you're only passing
{{availability_text}}
as a single variable but your speaking format expects separate slot variables, the agent can't follow the enumeration format correctly. [(1) ]() ## Recommended Fixes Option 1: Pass separate dynamic variables Update your GHL webhook to pass availability as individual variables: -
{{slot_date_1}}
-
{{morning_slot_1}}
-
{{morning_slot_2}}
-
{{afternoon_slot_1}}
-
{{afternoon_slot_2}}
Option 2: Rewrite your enumeration to work with
{{availability_text}}
If you must use a single variable, add explicit parsing instructions:
Copy code
HOW TO SPEAK AVAILABILITY:
When you receive {{availability_text}}, you MUST:
1. Identify all time slots for the earliest available date
2. Separate them into morning (before 12:00 PM) and afternoon (12:00 PM or later)
3. List each slot individually using this exact format:
   - "I have availability on [weekday], [date] with a couple of options."
   - "In the morning, I have [time 1] and [time 2]."
   - "In the afternoon, I have [time 1] and [time 2]."
4. NEVER summarize slots—always list each one separately
5. End with: "All times are in Eastern Time. Which one works best for you?"
## Additional Issue: Chunk 4 Confirmation Your confirmation section uses
{{DATE}}
,
{{TIME}}
,
{{TIMEZONE}}
in uppercase, but also
{{confirmed_date}}
and
{{confirmed_time}}
in lowercase. Make sure your variable names are consistent. ## Consider Conversation Flow If this Single Prompt approach continues to be unreliable, Conversation Flow agents provide more deterministic control—each node focuses on one specific task with predictable behavior. [(2) ]() , [(3) ]()
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[2] Single/Multi Prompt Agent Overview](https://docs.retellai.com/build/single-multi-prompt/prompt-overview) [[3] Retell AI’s Advanced Conversation Flow | Retell AI](https://www.retellai.com/blog/unlocking-complex-interactions-with-retell-ais-conversation-flow) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy No, there are all I have in the prompt. please help restructuring the GHL webhook payload
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Based on the GHL + Retell integration workshop, the key is to pass your availability data through function calls rather than relying solely on webhook payload variables. [(1) ](

▾

) ## Recommended GHL Webhook Payload Structure For your outbound calls from GHL, structure your dynamic variables as separate individual slots rather than a single
availability_text
string:
Copy code
json
{
  "first_name": "John",
  "business_name": "ABC Company",
  "persona_summary": "Your business description here",
  "slot_date": "Monday, February 10th",
  "morning_slot_1": "10:00 AM",
  "morning_slot_2": "11:30 AM",
  "afternoon_slot_1": "1:30 PM",
  "afternoon_slot_2": "2:00 PM",
  "timezone": "Eastern Time"
}
## Why This Works Better When you pass availability as individual variables, your prompt's speaking format can directly reference each one: [(2) ]()
Copy code
"I have availability on {{slot_date}} with a couple of options."
"In the morning, I have {{morning_slot_1}} and {{morning_slot_2}}."
"In the afternoon, I have {{afternoon_slot_1}} and {{afternoon_slot_2}}."
"All times are in {{timezone}}. Which one works best for you?"
## Alternative: Use a Custom Function If you need to fetch availability dynamically during the call (rather than pre-loading it) , create a check availability function that returns structured data. The function response can then populate variables that the agent enumerates. [(1) ](

▾

) ## Updated Prompt Section Remove
{{availability_text}}
from your Booking Rules and update to:
Copy code
Booking Rules: 
- Available slots are provided via: {{slot_date}}, {{morning_slot_1}}, {{morning_slot_2}}, {{afternoon_slot_1}}, {{afternoon_slot_2}}
- Use the exact speaking format in the HOW TO SPEAK AVAILABILITY section
- If any slot variable is empty, skip that slot when speaking
[(2) ]() This ensures the agent has explicit, separate variables to enumerate rather than trying to parse a single text block.
​ To learn more, see the sources I considered: [[1] Live Workshop: Retell x GoHighLevel Integration](

https://www.youtube.com/watch?v=TlzrfYgiPLQ▾

) [[2] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
a
Have you been to resolve this issue
d
@Ayo Lyn @AI Evy After making some changes in the prompt with slots, now It reads couple of slots from morning and afternoon after adding the prompt provided by But It pitches the availability from next week. I like the agent to pitch the immediate availability and for next 3 days atleast as 2 slots in the morning and 2 slots in the afternoon. Please help.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Good progress! The agent is now reading multiple slots correctly. The issue with pitching availability from next week instead of immediate dates is a prompt instruction issue, not a data issue—you need to add explicit date prioritization rules. [(1) ]() ## Add Date Prioritization Instructions Update your AVAILABILITY HANDLING section with explicit ordering rules:
Copy code
AVAILABILITY DATE RULES (STRICT) :
1. ALWAYS start with TODAY's availability if any slots exist
2. Then offer TOMORROW's availability
3. Then offer the NEXT available day after tomorrow
4. Present availability for the FIRST 3 DAYS that have openings—do not skip to next week if earlier dates exist
5. For each day, offer 2 morning slots and 2 afternoon slots (if available)
6. Use {{current_time_America/New_York}} to determine what "today" means
[(2) ]() ## Check Your GHL Payload Make sure your GHL webhook is sending the immediate dates first in your slot variables. If GHL is sending next week's dates in
{{slot_date}}
,
{{morning_slot_1}}
, etc., the agent will read those. Structure your payload to prioritize immediate availability:
Copy code
json
{
  "day_1_date": "Tuesday, February 11th",
  "day_1_morning_1": "10:00 AM",
  "day_1_morning_2": "11:30 AM",
  "day_1_afternoon_1": "1:30 PM",
  "day_1_afternoon_2": "2:00 PM",
  "day_2_date": "Wednesday, February 12th",
  "day_2_morning_1": "9:30 AM",
  ...
}
The agent reads what you send it—if immediate dates aren't in the payload, it can't offer them. [(1) ]()
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy Below is the avaiblability promt, I think it reads exactly the example format. Also please make necessary corrections so that your new availability date rules does not contradict with critical rule When presenting availability: AVAILABILITY DATE RULES (STRICT) : 1. ALWAYS start with TODAY's availability if any slots exist 2. Then offer TOMORROW's availability 3. Then offer the NEXT available day after tomorrow 4. Present availability for the FIRST 3 DAYS that have openings—do not skip to next week if earlier dates exist 5. For each day, offer 2 morning slots and 2 afternoon slots (if available) 6. Use {{current_time_America/New_York}} to determine what "today" means - CRITICAL: You MUST list ALL available time slots from {{availability_text}} - Present slots grouped by time of day (morning vs afternoon) - Enumerate each option clearly using "and" between slots - Maximum 4 slots per date (1-2 morning, 1-2 afternoon) - Always start with the earliest available date - Only offer slots that exist in {{availability_text}} - never calculate, infer, or guess dates Example format: "I have availability on Monday, February tenth. In the morning, I have ten thirty AM and eleven AM. In the afternoon, I have one thirty PM and two PM, all in Eastern Time. Which one works best for you?"
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Your current prompt has a contradiction between two rules. Here's the corrected version that resolves the conflict: [(1) ]()
Copy code
AVAILABILITY HANDLING (STRICT) :

When presenting availability from {{availability_text}}:

DATE SELECTION RULES:
1. Use {{current_time_America/New_York}} to determine "today"
2. From the slots in {{availability_text}}, identify the FIRST 3 DAYS with openings
3. Start with the earliest available date—this should be today or the nearest future date
4. Never skip to next week if earlier dates have slots

SLOT PRESENTATION RULES:
- For each day, present maximum 4 slots (1-2 morning, 1-2 afternoon)
- Group slots by time of day (morning before 12:00 PM, afternoon 12:00 PM or later)
- Enumerate each option clearly using "and" between slots
- Only offer slots that exist in {{availability_text}}—never calculate, infer, or guess dates

SPEAKING FORMAT:
"I have availability on [weekday], [date]. In the morning, I have [time] and [time]. In the afternoon, I have [time] and [time], all in Eastern Time. Which one works best for you?"
The contradiction was: - Rule 4 says "present availability for the FIRST 3 DAYS" - CRITICAL rule says "list ALL available time slots" These conflict when
{{availability_text}}
contains more than 3 days of availability. The corrected version clarifies: present the first 3 days, with up to 4 slots per day. Important: The agent can only read what's in
{{availability_text}}
. If your GHL webhook is sending next week's dates first, the agent will offer those. Verify that GHL is ordering the payload with immediate dates at the top. [(2) ]()
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
Now it reads the next date availabilty @AI Evy But it pitches only the slot of one date, it is not providing the availablility to 3 days
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
### Answer The agent only reading one date suggests it's following your instructions literally but stopping after the first date. You need to add explicit multi-day iteration instructions. [(1) ]() ## Updated Prompt Section Replace your availability handling with this version that explicitly requires cycling through multiple days:
Copy code
AVAILABILITY HANDLING (STRICT) :

When presenting availability from {{availability_text}}:

MULTI-DAY PRESENTATION RULES:
1. Use {{current_time_America/New_York}} to determine "today"
2. You MUST present availability for UP TO 3 SEPARATE DAYS—not just one
3. After presenting the first day's slots, IMMEDIATELY continue to the second day
4. After presenting the second day's slots, continue to the third day
5. Only stop when you've covered 3 days OR exhausted all available dates

SLOT RULES PER DAY:
- Maximum 4 slots per day (1-2 morning, 1-2 afternoon)
- Group by time of day
- Only use slots from {{availability_text}}—never infer or guess

SPEAKING FORMAT (FOLLOW THIS EXACTLY) :
"I have a few options for you over the next few days.

On [day 1 weekday], [day 1 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time].

On [day 2 weekday], [day 2 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time].

And on [day 3 weekday], [day 3 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time].

All times are in Eastern Time. Which day and time works best for you?"
The key addition is the opening phrase "I have a few options for you over the next few days" which signals to the LLM that multiple days must follow, plus the explicit day-by-day format template. [(2) ]()
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
Thanks for the follow-up, @Deviate. I'll get back to you soon.
d
@AI Evy now it provides availability for 3 days but it pithches the wrong date. Eg. Friday is March 6th and Monday is March 9th but it pitched as Friday March 7th and Monday as March 10th
a
The agent should read this verbatim—if it's still miscalculating, the issue is the LLM inferring rather than reading. [(3) ]()
### Answer The agent is calculating/inferring dates instead of reading them verbatim from your payload. This is a known issue—the LLM doesn't inherently know the current date and can miscalculate day-to-date mappings. [(1) ]() ## The Fix Add
{{current_time_America/New_York}}
explicitly in your prompt before any availability functions are triggered, and reinforce that the agent must **never calculate dates**: , [(2) ]()
Copy code
CRITICAL DATE RULES (NON-NEGOTIABLE) :
1. Today's date and time is: {{current_time_America/New_York}}
2. You MUST read dates EXACTLY as they appear in {{availability_text}}
3. You are FORBIDDEN from calculating, inferring, or adjusting any date
4. If {{availability_text}} says "Friday, March 6th" — you say "Friday, March 6th"
5. NEVER attempt to match weekdays to dates yourself—trust the payload completely
[(3) ]() ## Why This Happens The LLM doesn't have reliable awareness of current dates. When it sees "Friday" and tries to figure out the date, it guesses wrong. The solution is to ensure your
{{availability_text}}
payload includes both the weekday AND the full date together (e.g., "Friday, March 6th") and instruct the agent to read them as a single unit without modification. [(2) ]() , [(1) ]() ## Verify Your GHL Payload Make sure GHL is sending dates in this exact format:
Copy code
json
{
  "availability_text": "Friday, March 6th: 10:00 AM, 11:30 AM, 1:30 PM, 2:00 PM | Monday, March 9th: 9:30 AM, 10:00 AM, 1:00 PM, 2:30 PM"
}
​ To learn more, see the sources I considered: [[1] Urgent: Cal.com Booked on different day - Potential Service Disruption with multiple issue.](https://discord.com/channels/1186424376300679209/1423174290458808381) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[3] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy Below is the prompt i have for availablity, but it skips to read the slot from tomorrow which is available in make as output on March 5th but the retell agent reads from March 6th. When I asked to the agent for tomorrow's availability it said not slots available for tomorrow but the make.com has output with available slots for tomorrow AVAILABILITY HANDLING (STRICT) : When presenting availability from {{availability_text}}: CRITICAL DATE RULES (NON-NEGOTIABLE) : 1. Today's date and time is: {{current_time_America/New_York}} 2. You MUST read dates EXACTLY as they appear in {{availability_text}} 3. You are FORBIDDEN from calculating, inferring, or adjusting any date 4. If {{availability_text}} says "Friday, March 6th" — you say "Friday, March 6th" 5. NEVER attempt to match weekdays to dates yourself—trust the payload completely MULTI-DAY PRESENTATION RULES: 1. Use {{current_time_America/New_York}} to determine "today" 2. You MUST present availability for UP TO 3 SEPARATE DAYS—not just one 3. After presenting the first day's slots, IMMEDIATELY continue to the second day 4. After presenting the second day's slots, continue to the third day 5. Only stop when you've covered 3 days OR exhausted all available dates SLOT RULES PER DAY: - Maximum 4 slots per day (1-2 morning, 1-2 afternoon) - Group by time of day - Only use slots from {{availability_text}}—never infer or guess SPEAKING FORMAT (FOLLOW THIS EXACTLY) : "I have a few options for you over the next few days. On [day 1 weekday], [day 1 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time]. On [day 2 weekday], [day 2 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time]. And on [day 3 weekday], [day 3 date], in the morning I have [time] and [time]. In the afternoon, I have [time] and [time]. All times are in Eastern Time. Which day and time works best for you?"
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer The issue is that your
{{availability_text}}
variable from Make.com likely contains March 5th data, but the agent isn't reading it because there's a disconnect between what Make.com outputs and what actually gets passed to the Retell agent. [(1) ]() ## Troubleshooting Steps 1. Verify the actual payload reaching Retell Check your call logs in the Retell dashboard to see what value
{{availability_text}}
actually contains when the call starts. The Make.com output and what Retell receives may differ. 2. Check if March 5th is formatted correctly in the payload If Make.com outputs March 5th slots but formats them differently (e.g., "2025-03-05" instead of "Wednesday, March 5th") , the agent may not recognize it as "tomorrow" even though the data exists. [(2) ]() 3. Add explicit "today" anchoring at the start of your prompt Place this at the very beginning of your availability section:
Copy code
TODAY IS: {{current_time_America/New_York}}
The FIRST date in {{availability_text}} is the earliest available date—start there.
[(1) ]() 4. Consider using separate date variables Instead of relying on the agent to parse
{{availability_text}}
, pass each day's availability as individual variables from Make.com: , [(2) ]() -
{{day_1_date}}
= "Wednesday, March 5th" -
{{day_1_slots}}
= "10:00 AM, 11:30 AM, 1:30 PM" -
{{day_2_date}}
= "Thursday, March 6th" - etc. This eliminates the agent's need to parse and select from a text block. Can you share what the actual
{{availability_text}}
output looks like from Make.com? That will help identify whether the issue is in the payload format or the agent's interpretation.
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[2] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy I made a change to read the availability from the same today's date or from the very next date. Please check if the below line is correct or any changes needed The FIRST date in {{availability_text}} is the earliest available on the same date or next date — start there.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Your instruction is close but could be clearer. The phrase "on the same date or next date" is ambiguous—the LLM may misinterpret what "same date" means. [(1) ]() ## Recommended Revision Replace your line with this more explicit instruction:
Copy code
TODAY IS: {{current_time_America/New_York}}
The FIRST date in {{availability_text}} represents the earliest available date—this should be TODAY or the nearest future date with openings. Start with this date and proceed chronologically.
[(2) ]() , [(1) ]() ## Why This Is Better - Anchors "today" explicitly using the
{{current_time_America/New_York}}
dynamic variable so the agent knows the current date [(2) ]() - Removes ambiguity by saying "TODAY or the nearest future date" rather than "same date or next date" - Adds "proceed chronologically" to reinforce the multi-day presentation order [(1) ]() ## Additional Tip Make sure this anchoring instruction appears at the very top of your AVAILABILITY HANDLING section, before any other rules. LLMs process instructions sequentially, so placing the date anchor first helps establish context for everything that follows. [(3) ]()
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[3] Write a single prompt](https://docs.retellai.com/build/single-multi-prompt/write-single-prompt) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
Thanks for the follow-up, @Deviate. I'll get back to you soon.
d
@AI Evy Now it pithc the current today's availability but in this call, it asks the prospect availablity first and they provides Greg's availablity. Retell AI agent should should always provide Greg's availability and let the prospect to choose one slot, it should not ask for the prospects availability.
a
### Answer --- The agent asking for the prospect's availability first is a prompt behavior issue. You need to add explicit instructions that force the agent to lead with Greg's availability rather than asking the prospect when they're free. [(1) ]() ## Add This Instruction to Your Prompt Place this at the beginning of your availability section or in your general prompt:
Copy code
AVAILABILITY PRESENTATION RULES (STRICT) :
1. You MUST present Greg's availability FIRST—never ask the prospect for their availability
2. Do NOT say "When are you available?" or "What time works for you?" before presenting slots
3. ALWAYS lead with: "I have a few options for you over the next few days" and then list Greg's slots
4. After presenting all available slots, THEN ask: "Which day and time works best for you?"
5. The prospect CHOOSES from Greg's availability—they do not provide their own schedule
## Why This Happens LLMs can default to conversational patterns like asking open-ended questions ("When are you free?") because that's common in natural dialogue. Explicit instructions override this default behavior. [(2) ]() ## Example Speaking Flow
Copy code
CORRECT:
"I have a few options for you over the next few days. On Wednesday, March 5th, in the morning I have 10:00 AM and 11:30 AM. In the afternoon, I have 1:30 PM and 2:00 PM. All times are in Eastern Time. Which one works best for you?"

INCORRECT:
"When are you available this week?" [then provides Greg's availability after]
[(1) ]() Add this instruction near the top of your prompt so it takes priority.
​ To learn more, see the sources I considered: [[1] Training & Customizing AI Voice Agents | Retell AI](https://www.retellai.com/blog/training-and-customizing-voice-agents-with-retell-ai) [[2] Retell AI’s Advanced Conversation Flow | Retell AI](https://www.retellai.com/blog/unlocking-complex-interactions-with-retell-ais-conversation-flow) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
a
I can help you to take a look at it personal if you haven’t fully resolve it within an hour @Deviate
d
@AI Evy @Ayo Lyn Now retell agent reads the availability in a better manner. And I am getting the confirmed appointment date and time from retel to make.com using a new secanrio of webhook + parse json + go high level search contact and HTTP module to update the appointment date and time in GHL contact but getting the below error in the last HTTP module inside make DataError Failed to map 'jsonStringBodyContent': Function 'formatDate' finished with error! Function 'parseDate' finished with error! '10:30 AM' is not a valid date or does not match the date format. Origin Make Automatic error handler If you want to handle this error automatically, choose one of the following options. This will create a new error-handler route in your scenario. You can then expand the route in any way you like.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer The error you're seeing is a Make.com formatting issue, not a Retell issue. Retell is sending the confirmed time correctly (e.g., "10:30 AM") , but Make.com's
formatDate
function expects a full datetime string (with date + time) , not just a time value like "10:30 AM". [(1) ]() ## The Problem Make.com's
parseDate
function cannot interpret "10:30 AM" alone—it needs a complete date-time value like "2026-03-05 10:30 AM" or an ISO format. ## Solution You need to combine the confirmed date and time before passing them to
formatDate
in Make.com: 1. Extract both values separately from Retell's webhook payload - Confirmed date (e.g., "Wednesday, March 5th" or "2026-03-05") - Confirmed time (e.g., "10:30 AM") 2. Concatenate them in Make.com before formatting - Use a Set Variable or Compose module to combine:
{{confirmed_date}} {{confirmed_time}}
- Then pass the combined string to
parseDate
3. Ensure consistent date format from Retell - In your Retell prompt, when the agent confirms the appointment, have it save the date in a machine-readable format (e.g., "2026-03-05") alongside the human-readable format [(2) ]() ## Retell-Side Adjustment Consider adding response variables in your custom function to extract structured date/time data. When configuring your custom function, you can set response variables that save values as dynamic variables for later use. [(3) ]() This ensures Retell passes a properly formatted datetime that Make.com can parse without errors.
​ To learn more, see the sources I considered: [[1] Discord message from @knightflash2000 on 2026-01-08](https://discord.com/channels/1186424376300679209/1186462578310910112/1458939549223882845) [[2] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[3] Integrate any system with custom function](https://docs.retellai.com/build/single-multi-prompt/custom-function) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy Thank you for the explanation. how to setup the below? Please explain in detail Solution You need to combine the confirmed date and time before passing them to formatDate in Make.com: Extract both values separately from Retell's webhook payload Confirmed date (e.g., "Wednesday, March 5th" or "2026-03-05") Confirmed time (e.g., "10:30 AM") Concatenate them in Make.com before formatting Use a Set Variable or Compose module to combine: {{confirmed_date}} {{confirmed_time}} Then pass the combined string to parseDate Ensure consistent date format from Retell In your Retell prompt, when the agent confirms the appointment, have it save the date in a machine-readable format (e.g., "2026-03-05") alongside the human-readable format (2) Retell-Side Adjustment Consider adding response variables in your custom function to extract structured date/time data. When configuring your custom function, you can set response variables that save values as dynamic variables for later use.
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Here's how to set this up on the Retell side: ## Step 1: Add Response Variables in Your Custom Function When configuring your custom function in Retell, you can extract values from the API response and save them as dynamic variables for use later in the conversation. [(1) ]() In your custom function settings, under "Set response variables (optional) ," you define which values to extract from your endpoint's response. For example, if your booking confirmation endpoint returns:
Copy code
json
{
  "properties": {
    "user": {
      "name": "John Doe",
      "age": 26
    }
  }
}
You would map these to dynamic variables like
{{user_name}}
that can be referenced later. ## Step 2: Structure Your Retell Prompt to Save Machine-Readable Dates Add an instruction in your prompt that tells the agent to save the confirmed appointment in a specific format when the prospect selects a slot. For example:
Copy code
APPOINTMENT CONFIRMATION RULES:
When the prospect confirms a time slot:
1. Save the confirmed date in format YYYY-MM-DD (e.g., 2026-03-05) as {{confirmed_date_iso}}
2. Save the confirmed time in 24-hour format (e.g., 10:30) as {{confirmed_time_24h}}
3. Also save the human-readable versions for verbal confirmation
## Step 3: Use Extract Dynamic Variable Tool Use the Extract Dynamic Variable tool to capture the confirmed appointment details in the format you need. This ensures the LLM extracts and stores the values properly before they're sent to your webhook. [(2) ]() ## What Happens on the Make.com Side Once Retell sends the webhook with properly formatted variables (
confirmed_date_iso
= "2026-03-05" and
confirmed_time_24h
= "10:30") , you can concatenate them in Make.com and
parseDate
will work correctly because it receives a complete datetime string like "2026-03-05 10:30" rather than just "10:30 AM". The key is ensuring Retell outputs machine-readable formats (ISO date, 24-hour time) alongside the human-readable formats the agent speaks aloud.
​ To learn more, see the sources I considered: [[1] Custom Function](https://docs.retellai.com/build/conversation-flow/custom-function) [[2] Retell AI Date Parsing Bug - Need Urgent Help!](https://discord.com/channels/1186424376300679209/1470974663592120502) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy I have this line "When confirmed, output JSON in booking_details: {confirmed_date, confirmed_time, timezone, lead_phone, lead_name}. Set booking_confirmed to true." in the prompt already. Shall I remove this old line after added your new "APPOINTMENT CONFIRMATION RULES:"?
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer --- You don't need to remove your existing line—**merge them together** to avoid conflicting instructions. Having two separate rules about what to do "when confirmed" can confuse the LLM. [(1) ]() ## Recommended Approach Combine both into a single, unified instruction:
Copy code
APPOINTMENT CONFIRMATION RULES:
When the prospect confirms a time slot:
1. Save booking_details as JSON: {confirmed_date, confirmed_time, timezone, lead_phone, lead_name}
2. Set booking_confirmed to true
3. ALSO save machine-readable formats for Make.com:
   - {{confirmed_date_iso}} in format YYYY-MM-DD (e.g., 2026-03-05)
   - {{confirmed_time_24h}} in 24-hour format (e.g., 10:30)
4. Verbally confirm the appointment using human-readable date and time
## Why Merge Instead of Replace - Your existing line handles the JSON output and
booking_confirmed
flag—keep that logic - The new additions ensure Make.com receives properly formatted datetime values - A single unified rule is clearer for the LLM than two separate "when confirmed" instructions This way, Retell outputs both the human-readable format (for verbal confirmation) and machine-readable format (for Make.com's
parseDate
function) in one step.
​ To learn more, see the sources I considered: [[1] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
https://services.leadconnectorhq.com/calendars/events getting the below error for above url DataError Not Found {"message":"Cannot POST /calendars/events","error":"Not Found","statusCode":404} Origin HTTP Automatic error handler If you want to handle this error automatically, choose one of the following options. This will create a new error-handler route in your scenario. You can then expand the route in any way you like. @AI Evy I am getting the above error when I try to send the confirmed date and time to ghl
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer The 404 error you're receiving (
Cannot POST /calendars/events
) is a GoHighLevel (GHL) API issue, not a Retell issue. This error indicates the GHL endpoint URL or method is incorrect. ## The Problem The URL ` is returning a 404, which means either: - The endpoint path is wrong - The HTTP method (POST) isn't supported at that path - Required path parameters are missing (like a calendar ID) ## What to Check 1. Verify the correct GHL API endpoint GHL calendar booking endpoints typically require a calendar ID in the path. The correct format is usually something like: - ` 2. Check GHL's API documentation This is a GHL-specific issue. You'll need to consult [GoHighLevel's API documentation]() to confirm the correct endpoint for creating calendar events/appointments. 3. Verify your HTTP module configuration in Make.com Ensure you're using the correct: - HTTP method (POST vs PUT) - Full endpoint URL with required path parameters - Authorization headers for GHL I don't have specific information about GHL API endpoints in my sources. For GHL-specific API questions, I'd recommend checking their official documentation or support channels.
message has been deleted
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy I need your help to ensure the retell agent pitch the avaible slots only after 10.30am
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer To ensure the agent only pitches available slots after 10:30 AM, add a time filtering rule to your availability handling prompt. You can use the
{{current_time_America/New_York}}
dynamic variable to check the current time and instruct the agent to filter slots accordingly. [(1) ]() ## Add This to Your Prompt
Copy code
SLOT TIME FILTERING RULES (STRICT) :
1. Current time is: {{current_time_America/New_York}}
2. ONLY present time slots that are AFTER 10:30 AM
3. If a slot is at or before 10:30 AM, SKIP it entirely—do not mention it
4. If all slots for a given day are at or before 10:30 AM, skip that day and move to the next
5. Never offer 9:00 AM, 9:30 AM, 10:00 AM, or 10:30 AM slots
## Alternative: Filter in Make.com Before Sending to Retell A more reliable approach is to filter the slots in Make.com before passing them to Retell via
{{availability_text}}
. This way, Retell only receives slots after 10:30 AM and doesn't need to interpret filtering logic. [(2) ]() ## Why Prompt-Level Filtering Can Be Unreliable LLMs can sometimes misinterpret time comparisons. If you find the agent still occasionally mentions early slots, pre-filtering in Make.com before the data reaches Retell is the more robust solution. [(3) ]()
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[2] Training & Customizing AI Voice Agents | Retell AI](https://www.retellai.com/blog/training-and-customizing-voice-agents-with-retell-ai) [[3] Retell AI’s Advanced Conversation Flow | Retell AI](https://www.retellai.com/blog/unlocking-complex-interactions-with-retell-ais-conversation-flow) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
Strictly- Be silent initially: Do NOT speak until the human speaks first. Never use filler phrases like "I'll wait" or "take your time." or "of course, I will be here when you are ready" or "Hi, checking in whenevery you are ready" or "absolutely I will wait for your turn" or "absolutely I will be here when you are ready" or STRICTLY do not speak to start the conversation @AI Evy please check the above line to prevent retell ai agent to start the conversation before the prospect/lead. As soon as I answer the call it start to speak but I need the ai agent to speak only after the prospect start the conversation
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer Your prompt instruction alone won't override the agent configuration setting for who speaks first. This is controlled in the dashboard, not just the prompt. [(1) ]() ## Configure in Dashboard Settings Go to your agent's Call Settings and look for the "AI speaks first" toggle. You need to disable this setting so the agent waits for the prospect to speak first. Additionally, there's a "Pause before speaking" setting—for inbound calls where the agent speaks first, it waits for the configured duration before speaking. However, if you want the agent to wait for the human entirely, you need to turn off "AI speaks first." ## Why Your Prompt Isn't Working The dashboard setting takes precedence over prompt instructions for determining who initiates the conversation. If "AI speaks first" is enabled in your agent configuration, the agent will speak first regardless of what your prompt says. [(2) ]() ## Steps to Fix 1. Open your agent in the Retell dashboard 2. Go to Call Settings 3. Find and disable the "AI speaks first" option 4. Save your changes Your prompt instruction to "be silent initially" can remain as a reinforcement, but the dashboard setting must be configured correctly for it to work.
​ To learn more, see the sources I considered: [[1] Step 2: Configure the basic settings](https://docs.retellai.com/build/single-multi-prompt/configure-basic-settings) [[2] Prompt Engineering Guide](https://docs.retellai.com/build/prompt-engineering-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer I can't see the attached image, but based on the documentation, here's what to check: ## Key Setting: "Who Speaks First" In Conversation Flow agents, you configure who speaks first by clicking on the
begin
icon
in your flow editor. From there, you can select who speaks first in the call. [(1) ]() ## Additional Setting: Begin Message Delay If you're using "Agent Speaks First" but want a delay before speaking, there's a
begin_message_delay_ms
parameter. This delays the first message by the specified milliseconds (valid range: 0-5000ms) , giving the user more time to prepare. This only applies when the agent speaks first. [(2) ]() ## What to Verify 1. Check the
begin
node in your Conversation Flow
— click on it and confirm "Human speaks first" is selected [(1) ]() 2. **If using API**: Verify your agent isn't being created/updated with settings that override the dashboard. The
begin_message_delay_ms
parameter only applies when agent speaks first [(3) ]() 3. **Alternative approach**: One community member suggested using "Agent Speaks First with Delay" to handle scenarios where you want the agent to wait but still respond if the human doesn't speak [(4) ]() Can you confirm which type of agent you're using (Conversation Flow or Single/Multi Prompt) and describe exactly what you see in your "begin" node settings?
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
​ To learn more, see the sources I considered: [[1] Step 1: Configure global settings](https://docs.retellai.com/build/conversation-flow/global-setting) [[2] Get Voice Agent](https://docs.retellai.com/api-references/get-agent) [[3] Update Voice Agent](https://docs.retellai.com/api-references/update-agent) [[4] Can we have both things, IF the human speaks first the agent continues if they don't start at delay](https://discord.com/channels/1186424376300679209/1357832314784190474) ​
d
@AI Evy I am using single prompt agent with "user speak first" option
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer --- For Single/Multi Prompt agents, the "User speaks first" setting is configured via the
start_speaker
parameter. [(1) ]() ## Verify Your Configuration In the API, this is set using
start_speaker
with the value `"user"`:
Copy code
json
"start_speaker": "user"
## Additional Setting to Check There's also a
begin_after_user_silence_ms
parameter—if this is set, the AI will begin the conversation after waiting for the user for the specified duration (in milliseconds) even when configured to wait for the user to speak first. For example, if
begin_after_user_silence_ms
is set to
2000
, the agent will start speaking after 2 seconds of user silence. ## Troubleshooting Steps 1. Check if
begin_after_user_silence_ms
is set
— If this has a value, the agent will speak after that timeout even with "user speaks first" enabled 2. Verify via API — Use the Get Agent API to confirm your agent's actual settings match what you expect 3. Check for speakerphone/echo issues — One community member reported that agents can sometimes trigger on speakerphone when the agent hears itself, causing it to respond as if the user spoke [(2) ]() If you've confirmed
start_speaker
is set to
"user"
and
begin_after_user_silence_ms
is either null or not set, and the agent still speaks first, I'd recommend reaching out to Retell support with a specific call ID showing the issue.
​ To learn more, see the sources I considered: [[1] Update Retell LLM](https://docs.retellai.com/api-references/update-retell-llm) [[2] Agent Speaking for Both User and Assistant Roles](https://discord.com/channels/1186424376300679209/1433386000452681819) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
I added a knowledge base, how will make the retell ai agent to refer for this knowledge base? @AI Evy
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer You don't need to change your prompt for the agent to use the knowledge base—it's used automatically once linked to your agent. [(1) ]() ## How to Connect a Knowledge Base to Your Agent 1. Open your agent in the Retell dashboard 2. Locate the "Knowledge Base" section in the agent editor 3. Select the knowledge base items you want to use 4. Save your changes Once connected, the agent will automatically try to retrieve information from the knowledge base before responding during every call. There's no need to add special instructions to your prompt—retrieval happens automatically for every response generation. ## How It Works When the agent is about to respond, it uses the transcript so far to find the most relevant chunks from the knowledge base and feeds them to the LLM as context. The retrieved content appears in the LLM prompt under the header
## Related Knowledge Base Contexts
. ## Optional: Adjust Retrieval Settings After connecting a knowledge base, you can configure retrieval settings via **"Adjust KB Retrieval Chunks and Similarity"**: - **Chunks to retrieve**: Max number of chunks (1-10, default: 3) - **Similarity Threshold**: How strict matching is (default: 0.6) For most cases, the recommended settings are 3 chunks and 0.60 similarity threshold.
​ To learn more, see the sources I considered: [[1] Knowledge Base](https://docs.retellai.com/build/knowledge-base) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy The knowledge base I added has rates of our service package but the ai agent offers a slightly different rate but it reads the package correctly but it provides different rate in the call. This is the correct rate $1,000 Setup | $497/mo, but it offered $999 Setup | $450/mo https://cdn.discordapp.com/attachments/1478093068124033311/1479545570493337740/image.png?ex=69ac6db0&is=69ab1c30&hm=2bde84db50779391b90a6437bb49ba12bc8ef75362a2230681edb2ea9d483257&
a
Thanks for the follow-up, @Deviate. I'll get back to you soon.
### Answer --- This is a common LLM hallucination issue with specific numbers. The knowledge base retrieval is working (the agent finds the package) , but the LLM is generating slightly incorrect values instead of quoting exactly. [(1) ]() ## How to Fix This 1. Check Your Knowledge Base Format Use
.md
(Markdown) files over
.txt
. Well-structured Markdown is chunked and retrieved more accurately. Format your pricing clearly and explicitly:
Copy code
## Service Package Pricing
- Setup Fee: $1,000 (exactly one thousand dollars)
- Monthly Fee: $497/month (exactly four hundred ninety-seven dollars per month)
2. Add a Strict Prompt Instruction Add this to your agent prompt to prevent the LLM from generating information not in the knowledge base:
Copy code
Only 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."
3. Use Specificity in Your Knowledge Base Avoid ambiguity and use specificity in references. Include exact numbers, units, and avoid approximations. For pricing, consider adding redundancy:
Copy code
Setup: $1,000 (one thousand dollars exactly, NOT $999)
Monthly: $497/mo (four hundred ninety-seven dollars, NOT $450)
4. Lower Model Temperature If you're using a higher temperature setting, reduce it. Lower values mean more deterministic responses, reducing the chance of the LLM "rounding" or approximating numbers. [(2) ]()
​ To learn more, see the sources I considered: [[1] Knowledge Base](https://docs.retellai.com/build/knowledge-base) [[2] Get Retell LLM](https://docs.retellai.com/api-references/get-retell-llm) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.