Offers the slots that can actually happen, not the ones that look free
Every booking system answers "is the practitioner free at six?" — which is almost never the question that matters. The chair is free and the laser is not. There are forty minutes before the next appointment and the treatment takes sixty. The room is free but it is the one being cleaned between the two either side of it.
So a slot gets offered, a customer takes it, and somebody at the desk finds the conflict the next morning and makes an apologetic call. That booking was never real, and while it sat there nobody else could take the time.
This agent resolves a service into everything it actually consumes — the practitioner qualified to do it, the room, the equipment, the assistant who has to be present, the turnaround before the next one — and only offers what survives all of it.
It also reads the request as people write it. "Saturday after five", "same as last time", "with whoever did my colour", "before I fly on the 14th". A great many bookings are lost not because there was no slot but because the customer could not find it in a dropdown and gave up.
It writes a booking only after the customer has confirmed a specific slot in plain words. It never moves or cancels an existing appointment, never books over a block, and never takes a payment.
Because the slot was checked against everything it needed.
From the requests a dropdown cannot read.
Conflicts are prevented rather than discovered.
The room, the equipment, the second pair of hands, the turnaround before the next one. A slot that fails any of them was never bookable.
"Saturday after five", "same as last time", "before I fly on the 14th". Most bookings are lost in the dropdown, not for want of a slot.
A consultation and a laser session are not the same appointment. Forty minutes free does not fit a sixty-minute service.
A booking made on an assumption is a no-show with extra steps. It restates the slot and waits for a plain yes.
When nothing fits, it says what is closest and why the request could not be met, rather than returning an empty list.
Rescheduling somebody to make room is a decision about another customer, and it belongs to a person at the desk.
Why Operations in particular. A booking widget checks one diary. The chair is free and the laser is not, so the slot it sold was never real and nobody else could take it either.
Runs unattended
Started by you or by an event, and it finishes on its own. Nothing waits for someone to be at a desk.
The same standard every time
The two-hundredth item is held to the bar the first one was. Consistency is the part people cannot sustain.
Nothing runs above your ceiling
Anything above the risk you allow stops and waits for your approval, with its impact stated.
This agent runs server-side through the PROMIVO runtime. Each run is logged step by step and every tool call is permission-checked before it executes.
Demo dataIllustrative sample output, abridged.
{
"request": "Hi, can I get a laser session Saturday after 5 with whoever did it last time?",
"services": [],
"availability": []
}{
"booked": {
"startsAt": "2026-09-12T17:30",
"reference": "BK-4471",
"confirmedBy": "Customer replied \"yes please\" at 23:04",
"practitioner": "Nadia"
},
"offered": [
{
"room": "Treatment 2",
"endsAt": "2026-09-12T18:30",
"startsAt": "2026-09-12T17:30",
"whyThisOne": "The only Saturday slot after five where Nadia, the laser unit and a treatment room are all free for the full sixty minutes with the fifteen-minute turnaround after it. 17:00 looks free on Nadia's diary but the laser is in Treatment 1 until 17:20.",
"practitioner": "Nadia",
"resourcesChecked": [
"Nadia",
"Laser unit A",
"Treatment 2",
"15 min turnaround"
]
}
],
"escalate": false,
"disclaimer": "Availability checked against the practitioner, room, equipment and turnaround supplied. No existing appointment was moved and no payment was taken.",
"understood": {
"service": "Laser session",
"timeConstraint": "Saturday, at or after 17:00",
"durationMinutes": 60,
"practitionerRequested": "Nadia — from this customer's appointment on 14 August"
},
"couldNotMeet": "",
"depositRequired": false,
"checkWasComplete": true,
"escalationReason": "",
"nearestAlternative": "",
"confirmationMessage": "I can do Saturday 12 September, 5:30pm to 6:30pm, laser with Nadia in Treatment 2. Shall I book it?",
"whatCouldNotBeChecked": []
}No integrations required.
Where a procedure needs a room, equipment and a second clinician.
Where duration varies wildly by service and the chair is not the constraint.
One request against several diaries, several branches.
The bookings that arrive at eleven at night and are gone by morning.
$59/month
Billed monthly through your PROMIVO subscription. Cancel at any time.
Runs consume your plan allowance for agent executions and tokens. See plan limits.
It writes a booking only after the customer has confirmed a specific slot in plain words. It never books over a block, never double-books, and never moves or cancels an appointment that already exists — those affect somebody who is not in the conversation.
It says so, gives the nearest alternatives, and states which part of the request could not be met — the day, the time, the practitioner, or the duration. It never invents availability to avoid an empty answer.
No. It never handles a card, a deposit or a refund. Where a deposit is required it says so and hands the customer to whatever you already use for payment.
Its real duration, who is qualified to deliver it, and what it consumes — room, equipment, an assistant, turnaround time. Without that it can only check the practitioner's diary, and it says so rather than pretending the check was complete.
Reviews open once customers have run this agent.
Tell us what to change and our team will scope a customised version for your business.
Customize this agent