Andreas G
05/26/2025, 6:59 PMKings_big💫
05/27/2025, 6:18 AMVapi Support Bot
05/27/2025, 6:19 AMplaintext
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)Vapi Support Bot
05/27/2025, 6:19 AMplaintext
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)Vapi Support Bot
05/27/2025, 6:19 AMcalendarId
and required fields. Here’s a JSON snippet for tool setup:
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)Vapi Support Bot
05/27/2025, 6:19 AMcontactId
).
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:
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)Vapi Support Bot
05/27/2025, 6:19 AMcalendarId
and required fields. Here’s a JSON snippet for tool setup:
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)Vapi Support Bot
05/27/2025, 6:19 AMcontactId
).
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:
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)Andreas G
05/27/2025, 6:30 PMAndreas G
05/27/2025, 6:33 PMKyle Brunker
05/27/2025, 8:28 PMAndreas G
05/27/2025, 8:57 PMVapi Support Bot
05/27/2025, 8:59 PMgohighlevel.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:
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)Vapi Support Bot
05/27/2025, 8:59 PMgohighlevel.contact.get
tool is missing required input fields.
Update your tool configuration so the parameters
section includes email
and phone
as shown below:
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)Andreas G
05/28/2025, 11:05 AMVapi Support Bot
05/28/2025, 11:07 AMgohighlevel.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:
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)Vapi Support Bot
05/28/2025, 11:07 AMemail
and phone
as parameters to your gohighlevel.contact.get
tool for it to work properly:
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)Andreas G
05/28/2025, 11:08 AMVapi Support Bot
05/28/2025, 11:09 AMVapi Support Bot
05/28/2025, 11:10 AMAndreas G
05/28/2025, 11:25 AMVapi Support Bot
05/28/2025, 11:26 AMVapi Support Bot
05/28/2025, 11:27 AMKyle Brunker
05/28/2025, 11:34 PMcause
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 appointmentKyle Brunker
05/28/2025, 11:35 PMAndreas G
05/29/2025, 8:47 AMAndreas G
05/29/2025, 3:48 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMVapi Support Bot
05/29/2025, 3:49 PMmarg
05/30/2025, 4:13 AMAndreas G
06/02/2025, 9:05 PMtravis
06/03/2025, 5:09 PMKyle Brunker
06/03/2025, 11:57 PMWes
06/06/2025, 7:30 PMWes
06/06/2025, 7:31 PMKyle Brunker
06/09/2025, 8:02 PMVapi Support Bot
06/09/2025, 9:52 PMKyle Brunker
06/10/2025, 8:11 AMAndreas G
06/10/2025, 8:13 AMKings_big💫
06/10/2025, 8:15 AMAndreas G
06/10/2025, 4:06 PMAndreas G
06/10/2025, 4:07 PMAndreas G
06/10/2025, 4:08 PMAndreas G
06/10/2025, 4:08 PMghl_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
.Andreas G
06/10/2025, 4:08 PMghl_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?”Kings_big💫
06/10/2025, 8:35 PMKyle Brunker
06/10/2025, 9:30 PMAde
06/16/2025, 5:13 PMAndreas G
06/16/2025, 5:28 PMKyle Brunker
06/17/2025, 7:52 AMWes
06/17/2025, 4:40 PMWes
06/17/2025, 4:42 PMKyle Brunker
06/17/2025, 6:10 PMAde
06/17/2025, 6:16 PMKyle Brunker
06/18/2025, 2:41 AMAde
06/18/2025, 4:46 AMKyle Brunker
06/19/2025, 3:02 AMKyle Brunker
06/19/2025, 3:02 AMAndreas G
06/20/2025, 2:59 PMAndreas G
06/20/2025, 2:59 PMKyle Brunker
06/20/2025, 3:49 PMKyle Brunker
06/20/2025, 4:40 PM"startedAt": "2025-06-01T11:27:39.208Z",
"endedAt": "2025-06-01T11:30:07.300Z",
Kyle Brunker
06/20/2025, 4:42 PMget_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.Andreas G
06/25/2025, 3:57 PMKyle Brunker
06/26/2025, 11:20 PMAndreas G
07/01/2025, 5:40 PMAndreas G
07/03/2025, 2:38 PMKyle Brunker
07/06/2025, 4:18 PM