The challenge
Callers ask “is a boat free tomorrow?”. The AI agent had to check real availability and take the booking in the same call.
What we built
- Laravel middleware between GHL Voice AI and the Peek Pro (OCTO) booking API
- Database-backed call sessions keep service, date, slot and reservation ID between steps
- Availability, reservation and confirmation kept as separate stages so nothing is confirmed early
The full story
The situation
A boat charter business wanted its AI phone agent to answer “Is a boat free tomorrow?” and take the caller all the way to a booking in one call. The booking system, Peek Pro, needs exact product, option, unit and availability IDs, which callers never say out loud.
What we built
We built Laravel middleware between the GoHighLevel voice agent and Peek Pro’s OCTO API. The voice agent calls a few simple actions, and Laravel does the hard work of mapping, checking and booking.
How a call flows
- The agent starts a booking session, saved in the database
- The chosen rental is mapped to Peek’s product and option IDs
- Availability is checked for the requested date and group size
- A reservation is created from the selected slot and its reference is kept
- Confirmation is requested and reported back to the caller
A key decision
We treated availability, reservation and confirmation as three separate stages. A free slot is not a booking, so the agent can never tell a caller they’re booked before Peek confirms it. Keeping state in the database means nothing is lost between voice-agent steps.
Where it stands
The integration architecture is in place: session handling, ID mapping and the availability-to-reservation flow. The aim is less manual availability checking and a smoother path from a phone call to a confirmed booking.