Issue with scheduling an appointment in GHL
# support
a
So, I've built an agent to trigger from ghl sending an API to make.com and then it triggers VAPI sending all the information it needs. The assistant is doing great until it's time to book an appointment. Then he tries and tries, but he hadn't successfully done that not even once. I don't know what is going on. Please review and help me accordingly thanks! Output bundle from make.com: https://docs.google.com/document/d/15Bh2HBnsB61ZnR4EtZn0VbPEz5Z1uOhfuEZB71_6IRE/edit?usp=sharing - Call ID: cbd1c948-1e52-49ea-8261-abb1ecadf8c4 - This is something I haven't solved yet - I expected for VAPI to check if a contact exists with that ID and if not to create one, then to check availability in my calendar and then book the appointment. - The assistant telling me that he is having issues with the calendar and proposing other days all over again. https://cdn.discordapp.com/attachments/1376635772408430623/1376635772693778493/make_1.jpg?ex=6836b438&is=683562b8&hm=a0092deaa3678c89119856b4a0200501c830014cd728934da03f8d7042a03479& https://cdn.discordapp.com/attachments/1376635772408430623/1376635773264068738/make_2.jpg?ex=6836b439&is=683562b9&hm=bf7e3ace41c38adce2d23cad5625d7e16c82c1bf66882a85cbe61da7f9176e96& https://cdn.discordapp.com/attachments/1376635772408430623/1376635773721382973/make_3.jpg?ex=6836b439&is=683562b9&hm=58bea56b173c0ae981e2063fe014092109b62b00c3ccbe98abe7490bbe2d4e6a& https://cdn.discordapp.com/attachments/1376635772408430623/1376635774069506240/ghl_integration.jpg?ex=6836b439&is=683562b9&hm=bbe8ba0f127b5be79502862c2008e2864c83fc4332d567c86c0491b9b30a1cb4&
k
Looking into it
v
Suggestion: Double-check that your assistant's workflow strictly follows this sequence for GHL appointment booking:
Copy code
plaintext
1. Use `ghl_contact_get` with the user's email/phone.
2. If not found, use `ghl_contact_create` to create the contact.
3. Use `ghl_check_availability` with a valid `calendarId` and correct time range.
4. Only after confirming availability, use `ghl_create_event` with both `contactId` and `calendarId`.
Tip: Ensure all date/time fields are in ISO 8601 format and the correct timezone is set. Most booking failures are due to missing or misformatted fields or skipping a required step. [See full workflow example in the docs.](https://docs.vapi.ai/tools/go-high-level#tool-configurations) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level)
Suggestion: Double-check that your assistant's workflow strictly follows this sequence for GHL appointment booking:
Copy code
plaintext
1. Use `ghl_contact_get` with the user's email/phone.
2. If not found, use `ghl_contact_create` to create the contact.
3. Use `ghl_check_availability` with a valid `calendarId` and correct time range.
4. Only after confirming availability, use `ghl_create_event` with both `contactId` and `calendarId`.
Tip: Ensure all date/time fields are in ISO 8601 format and the correct timezone is set. Most booking failures are due to missing or misformatted fields or skipping a required step. [See full workflow example in the docs.](https://docs.vapi.ai/tools/go-high-level#tool-configurations) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level)
Suggestion: Double-check that your assistant has all four GoHighLevel tools added and configured in this order: 1. Get Contact 2. Create Contact (if needed) 3. Check Availability 4. Create Event Your assistant's system prompt should follow this logic, and each tool must have the correct
calendarId
and required fields. Here’s a JSON snippet for tool setup:
Copy code
json
"tools": [
  { "type": "gohighlevel.contact.get", "function": { "name": "getGHLContact" } },
  { "type": "gohighlevel.contact.create", "function": { "name": "createGHLContact" } },
  { "type": "gohighlevel.calendar.availability.check", "function": { "name": "checkGHLAvailability" }, "metadata": { "calendarId": "YOUR_CALENDAR_ID" } },
  { "type": "gohighlevel.calendar.event.create", "function": { "name": "createGHLEvent" }, "metadata": { "calendarId": "YOUR_CALENDAR_ID" } }
]
Make sure the assistant always gets or creates a contact before booking, and always checks availability before creating the event. [See full setup guide](https://docs.vapi.ai/tools/go-high-level) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level)
Suggestion: Check that your assistant's system prompt and tool configuration enforce this sequence: 1. Retrieve or create the contact (ensure you get a valid
contactId
). 2. Check calendar availability with the correct
calendarId
,
startDateTime
,
endDateTime
, and
timezone
. 3. Only then, book the appointment using the
contactId
and available slot. Example system prompt snippet:
Copy code
json
{
  "model": { ... },
  "tools": [
    { "type": "gohighlevel.contact.get", ... },
    { "type": "gohighlevel.contact.create", ... },
    { "type": "gohighlevel.calendar.availability.check", ... },
    { "type": "gohighlevel.calendar.event.create", ... }
  ]
}
Make sure your Make.com output provides all required fields for each step. If the assistant keeps looping, it's likely missing a required field or not receiving the expected response from a previous step. Sources: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level) - [Prompting Guide Example Appointment Setter Prompt](https://docs.vapi.ai/prompting-guide#example-appointment-setter-prompt)
Suggestion: Double-check that your assistant has all four GoHighLevel tools added and configured in this order: 1. Get Contact 2. Create Contact (if needed) 3. Check Availability 4. Create Event Your assistant's system prompt should follow this logic, and each tool must have the correct
calendarId
and required fields. Here’s a JSON snippet for tool setup:
Copy code
json
"tools": [
  { "type": "gohighlevel.contact.get", "function": { "name": "getGHLContact" } },
  { "type": "gohighlevel.contact.create", "function": { "name": "createGHLContact" } },
  { "type": "gohighlevel.calendar.availability.check", "function": { "name": "checkGHLAvailability" }, "metadata": { "calendarId": "YOUR_CALENDAR_ID" } },
  { "type": "gohighlevel.calendar.event.create", "function": { "name": "createGHLEvent" }, "metadata": { "calendarId": "YOUR_CALENDAR_ID" } }
]
Make sure the assistant always gets or creates a contact before booking, and always checks availability before creating the event. [See full setup guide](https://docs.vapi.ai/tools/go-high-level) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level)
Suggestion: Check that your assistant's system prompt and tool configuration enforce this sequence: 1. Retrieve or create the contact (ensure you get a valid
contactId
). 2. Check calendar availability with the correct
calendarId
,
startDateTime
,
endDateTime
, and
timezone
. 3. Only then, book the appointment using the
contactId
and available slot. Example system prompt snippet:
Copy code
json
{
  "model": { ... },
  "tools": [
    { "type": "gohighlevel.contact.get", ... },
    { "type": "gohighlevel.contact.create", ... },
    { "type": "gohighlevel.calendar.availability.check", ... },
    { "type": "gohighlevel.calendar.event.create", ... }
  ]
}
Make sure your Make.com output provides all required fields for each step. If the assistant keeps looping, it's likely missing a required field or not receiving the expected response from a previous step. Sources: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level) - [Prompting Guide Example Appointment Setter Prompt](https://docs.vapi.ai/prompting-guide#example-appointment-setter-prompt)
a
still the same is happening..
And I don't know why in the tool in code I can't change things. Properties and required are empty: { "id": "e7d985c2-9da0-4757-9a58-c5642aa61c91", "createdAt": "2025-05-22T16:32:56.952Z", "updatedAt": "2025-05-27T18:32:21.159Z", "type": "gohighlevel.contact.get", "function": { "name": "ghl_contact_get", "description": "Searches for an existing contact in GoHighLevel by phone number or email. Use this tool before creating a contact or booking an appointment to avoid duplicates and retrieve the contact ID.", "parameters": { "type": "object", "properties": {}, "required": [] } }, "metadata": { "customerPhoneEnabled": true }, "orgId": "9512ac10-a02b-4629-8b05-f576724e33cd" }
k
I see, thanks for testing it. We are taking a look into it.
a
Thanks!
v
It looks like your
gohighlevel.contact.get
tool is missing the required parameter definitions for
email
and/or
phone
, which are necessary for the assistant to search for contacts. Update your tool's
parameters
section to include these fields, for example:
Copy code
json
"parameters": {
  "type": "object",
  "properties": {
    "email": { "type": "string" },
    "phone": { "type": "string" }
  },
  "required": ["email"]
}
If you can't edit these fields in the dashboard or code, this may be a bug—please report it to support for further help. [See tool configuration details in the docs.](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool)
Your
gohighlevel.contact.get
tool is missing required input fields.
Update your tool configuration so the
parameters
section includes
email
and
phone
as shown below:
Copy code
json
"parameters": {
  "type": "object",
  "properties": {
    "email": { "type": "string", "description": "The email address of the contact to search for." },
    "phone": { "type": "string", "description": "The phone number of the contact to search for." }
  },
  "required": []
}
This should allow your assistant to pass the necessary data and proceed with booking. If you cannot edit these fields in your dashboard, it may be a platform issue—please report this to support for further investigation. Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool)
a
No, I can't edit the code inside tools and I don't see an assistant’s JSON setup, which I can configure. I only see the model prompt in the assistant tab and the description inside each tool. The code in the tools is something like the photo I'm attaching and can't configure https://cdn.discordapp.com/attachments/1376635772408430623/1377241338977980459/Screenshot_2.jpg?ex=68383f73&is=6836edf3&hm=90668ae40fdda0cc58c112a7dc12aa9b5907d70a558c177ab485144e9b13474d&
v
You are encountering a platform limitation: The
gohighlevel.contact.get
tool must have
email
and/or
phone
as parameters, but if you cannot edit these fields in the dashboard, this is likely a bug. Action: Report this issue to Vapi support, referencing the need for the following configuration:
Copy code
json
"parameters": {
  "type": "object",
  "properties": {
    "email": { "type": "string" },
    "phone": { "type": "string" }
  },
  "required": ["email"]
}
This will help support diagnose and resolve the configuration problem. Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool)
You need to add
email
and
phone
as parameters to your
gohighlevel.contact.get
tool for it to work properly:
Copy code
json
"parameters": {
  "type": "object",
  "properties": {
    "email": { "type": "string", "description": "The email address of the contact to search for." },
    "phone": { "type": "string", "description": "The phone number of the contact to search for." }
  },
  "required": []
}
If you cannot edit these fields in your dashboard, this is likely a platform issue—please report it to support for further investigation. [See tool configuration details in the docs.](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool) Source: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool)
a
I am in VAPI support, right?
v
Yes, you are in Vapi support channels—this conversation is with the Vapi Support Bot. For direct help from a human agent or to escalate a platform bug, please email [support@vapi.ai](support@vapi.ai) or post in the [Vapi Discord #support channel](https://discord.com/invite/pUFNcf2WmH) for real-time assistance. If your issue is urgent or requires engineering attention, mention the inability to edit tool parameters as described in your previous messages. Source: - [Vapi Support Options](https://docs.vapi.ai/support)
You are currently interacting with the Vapi Support Bot, which provides automated help based on Vapi's documentation. If you need direct assistance from a human support agent (for example, to resolve platform bugs or configuration issues you cannot change), please email support@vapi.ai or join the [Vapi Discord community](https://discord.com/invite/pUFNcf2WmH) and post in the #support channel for real-time help. Source: - [Vapi Support Options](https://docs.vapi.ai/support)
a
Just sent an email to support
v
You're welcome! If you have any more questions or need further assistance in the future, feel free to reach out. Wishing you the best as your issue gets resolved!
You've taken the right step by emailing Vapi support about the tool configuration issue. While waiting for their response, you can also post your issue in the [Vapi Discord #support channel](https://discord.com/invite/pUFNcf2WmH) for potentially faster, real-time assistance from the team. If your issue is urgent, be sure to mention the inability to edit required parameters in your tool configuration. Sources: - [GoHighLevel Integration Guide](https://docs.vapi.ai/tools/go-high-level#gohighlevel-get-contact-tool) - [Vapi Support Options](https://docs.vapi.ai/support)
k
Hey Andreas, to confirm your automated appointment booking system where customers call, talk to a VAPI assistant, and the assistant books appointments in GoHighLevel. The assistant works perfectly for conversation but completely fails at booking appointments - it has never successfully booked even one appointment. The assistant gets stuck in loops, reports calendar issues, and keeps trying but failing.
cause
The GoHighLevel contact search tool is broken - it has empty parameters and can't accept email or phone numbers to find existing contacts. Since it can't find or create contacts properly, the entire booking workflow fails.
expected_flow
1. Searching for existing contacts in GoHighLevel 2. Creating new contacts if they don't exist 3. Checking calendar availability 4. Actually booking the appointment
I looked into the call_id you shared, but I don't see the search contacts tool triggering. Can you share a new call_id instead? This one doesn't look correct to me.
a
check this call ID: ca556af9-5206-43c3-83bc-17c8712efd9a here the assistant says "I see that we already have a contact for you.", but then again fails to check availability. I know that it has empty parameters, all of the GHL tools I've created have empty parameters and I can't change each tool's code manually unfortunately.
any updates?
v
Thanks for your patience and for providing all the details about your workflow and the call ID. I can see you've been thorough in describing the issue and have already taken the right steps to get it addressed. If there's anything else you'd like to share about your experience or if you have more details about the workflow, feel free to let me know. I'm here to help however I can!
Thanks for your patience and for providing all the details about your workflow and the call ID. I can see you've been thorough in describing the issue and have already taken the right steps to get it addressed. If there's anything else you'd like to share about your experience or if you have more details about the workflow, feel free to let me know. I'm here to help however I can!
I understand how frustrating it must be to wait for updates, especially when the root cause of the booking issue has already been identified and you've provided all the necessary details. At this point, there haven't been any new updates or resolutions shared regarding the tool parameter issue. If anything changes or more information becomes available, I'll be here to help you navigate the next steps.
Thanks for your patience and for providing all the details and call ID. Your issue with the GoHighLevel contact search tool and appointment booking workflow has been clearly documented and escalated. While there are no new updates available at the moment, your thorough reporting is helping move things forward. If anything changes or more information becomes available, you'll be updated as soon as possible.
I understand how frustrating it must be to wait for updates, especially when the root cause of the booking issue has already been identified and you've provided all the necessary details. At this point, there haven't been any new updates or resolutions shared regarding the tool parameter issue. If anything changes or more information becomes available, I'll be here to help you navigate the next steps.
Thanks for your patience and for providing all the details and call ID. Your issue with the GoHighLevel contact search tool and appointment booking workflow has been clearly documented and escalated. While there are no new updates available at the moment, your thorough reporting is helping move things forward. If anything changes or more information becomes available, you'll be updated as soon as possible.
Thanks for your patience and for providing all the necessary details, including the new call ID. Your description of the issue and the steps you've taken so far are clear, and it's understandable how frustrating this situation must be. At this point, the information shows that your case is being reviewed, and you're awaiting further updates from the team. If anything changes or new information becomes available, you'll be informed. You're doing everything right, and your persistence is appreciated!
There are no new updates in the documentation regarding your GoHighLevel tool parameter issue. For the fastest response, I recommend following up with Vapi support via your existing email thread and also posting your case (with the call ID) in the [Vapi Discord #support channel](https://discord.com/invite/pUFNcf2WmH) for real-time assistance from the team. If your issue is urgent, be sure to mention the inability to edit required parameters in your tool configuration. Source: - [Vapi Support Options](https://docs.vapi.ai/support) Source: - [Vapi Support Options](https://docs.vapi.ai/support)
m
Hey @Andreas G looking at that last call's logs the dates that the assistant is sending to the GHL server are in 2023 which would explain no showing any availability. "parameters": { "timeZone": "America/New_York", "calendarId": "6an14***********B2ho", "startDate": 1699456800000, "endDate": 1699467600000 }, "toolCallId": "call_LGTX1nl5I6JsCFUr7NclCbhk" } you can use https://www.epochconverter.com/ to convert the date You may leave the tool's description empty and we set up a default description that includes the current date of the call for reference, or add in the prompt or tool description the current date using variables and the desired timezone: https://docs.vapi.ai/assistants/dynamic-variables#advanced-date-and-time-usage Also check this example https://docs.vapi.ai/tools/go-high-level#example-usage
a
I'll have a look this week and come back to you
t
btw, I am having the exact same issues as OP. There is no way to edit the properties inside the tool for gohighlevel.contact.get, and the agent is doing the same where booking fails (tries multiple times, long wait, fails to book).
k
Hey @travis! To help track down this issue, could you share: - The call ID - When exactly this happened (the timestamp) - What response you expected to get - What response you actually got instead This would really help us figure out what went wrong!
w
Has this been resolved yet? It's been awhile...
search contact works but not calendar check availability/create booking
k
Hey @Wes! To help track down this issue, could you share: - The call ID - When exactly this happened (the timestamp) - What response you expected to get - What response you actually got instead This would really help us figure out what went wrong!
v
Message marked as helpful by @Tugui D.! 🎉
k
checking if this is resolved/solved for you?
a
Unfortunately it's not
k
Send your call id
a
9794f0e8-6b1f-4eaa-b71c-a2636e593c60
What do you see?
I am saying those in the prompt: The current date and time is: {{ "now" | date: "%Y-%m-%dT%H:%M:%S%:z", "America/New_York" }} Check availability for the next two weekdays, starting with: {{startDateEpochWeekday1}} to {{endDateEpochWeekday1}} If nothing is available, try {{startDateEpochWeekday2}} to {{endDateEpochWeekday2}} Prioritize the earliest time slots available, ideally between 9AM and 12PM EST. If none available, shift to later hours. ❌ Never suggest weekends. ❌ Never suggest more than 2 weekdays ahead. ✅ If both fail, say: 'Andreas will reach out personally to find a time that works.'
After confirming the user can do tomorrow or the day after (or he picked another day), follow these steps carefully: 1. **Gather Information**: Start by asking for the caller's full name and email address. Double check with repeating them and spelling the email. 2. **Check Existing Contact**: Use the
ghl_contact_get
tool to see if a contact already exists with {{phone}} (priority) or the {{email}} provided. If the contact exists you may have some info beforehand (from the start of the call), check for {{first_name}} and/or {{last_name}}. "parameters": { "type": "object", "properties": { "email": { "type": "string", "description": "The email address of the contact to search for." }, "phone": { "type": "string", "description": "The phone number of the contact to search for." } }, "required": [] } 3. **Create Contact (if needed)**: If no contact is found, use the
ghl_contact_create
tool to create a new contact with their {{name}}, {{phone}} and {{email}}. 4. **Discuss Appointment Time and Check Availability**: Once you have a {{contact_id}} (either from an existing contact or a newly created one), Use the
get_free_slots
tool to check for open slots. It's a good idea to check for the entire preferred day to offer alternatives if their initial request isn't available. Suggest the earliest slot first (mornings are preferred). If you only see some available spots go for them. 5. **Confirm Time**: Discuss the available options with the user and agree on a suitable time. 6. **Book Appointment**: Finally, use the
ghl_create_event
tool to book the appointment, ensuring you use the correct {{contact_id}}, which will be either the one from an existing contact or the one from the newly created contact from the tool
ghl_contact_create
.
Important Guidelines: * Always use
ghl_contact_get
to check for an existing contact before attempting to create one with
ghl_contact_create
. * You must have a {{contact_id}} (from
ghl_contact_get
or
ghl_contact_create
) before you can book an appointment with
ghl_create_event
. * Always confirm availability with
get_free_slots
before attempting to book an appointment with
ghl_create_event
. When you're about to create the appointment, only say one short line like “One sec, booking that for you now.” Do not repeat yourself multiple times during this step. After the meeting is booked: “Great, you’re all set for {{confirmed_day}} at {{confirmed_time}} EST! Actually, one more thing before we go — there’s a short video being sent your way. It’ll explain everything about the company, our clients, and how it all works. Super quick, really helpful to watch before the call. Sound good?”
k
Looking into it
k
Hey @AndreasG, thanks for sharing the call ID. I'll look into it and get back to you.
a
Did this get resolved?
a
Not, waiting
k
Can you retry once more?
w
Can anyone confirm if calendar with GHL is working with their VAPI agent
It never shows any availability when there are fully open days without appointments
k
Hey @Wes can you share the call_id?
a
Same! Sometimes I get it working, then change nothing. Test again and get a differnt result.
k
Hey @Ade! To help track down this issue, could you share: - The call ID - When exactly this happened (the timestamp) - What response you expected to get - What response you actually got instead This would really help us figure out what went wrong!
a
I have done in another ticket
k
Thanks.
Thanks @Ade, I will take a look.
a
Hey guys! Any updates on that? What do you see from your end?
If I can help you somehow just say it
k
Looking into it for this call_id 9794f0e8-6b1f-4eaa-b71c-a2636e593c60
Hey @AndreasG, we keep logs for 2 weeks only, that's why I couldn't look into logs. Using transcript and messages, I'm sharing my interpretation with you with regards to this issue. For a more in-depth review, I'll suggest you to share a new call ID.
Copy code
"startedAt": "2025-06-01T11:27:39.208Z",
  "endedAt": "2025-06-01T11:30:07.300Z",
The Main Issues Your dates are totally wrong. The Assistant is trying to book appointments in April 2024 instead of June 2025. That's why it keeps saying "no available times" - it's literally looking over a year in the past. Missing calendar info. Your
get_free_slots
calls don't include the calendar ID or timezone. The tool needs these to work properly. Wrong tool names. Your prompt uses
ghl_contact_get
,
ghl_contact_create
, and
ghl_create_event
but those tools don't exist. The actual names are
get_duplicate_contact
,
create_contact
, and
create_appointment
. AI gets stuck. When things go wrong, your AI just keeps saying "1 moment" and never recovers. That's exactly what happened in your transcript. What You Need to Fix Date calculations - This is your biggest problem using prompting. The AI can't figure out how to convert "tomorrow" into the right epoch timestamp for 2025. Add the calendar ID and timezone to your
get_free_slots
calls. Without these, the tool can't check availability properly. Update the tool names in your prompt to match what actually exists.
a
Alright, will do all of those and come back tomorrow
k
Hey Andreas G, a gentle reminder to continue this thread.
a
Yeah, going on this rn
fixed that doing it mostly from make
k
Marking this ticket as Solved ✅