Self-Booking
An agentic AI chat where customers of El Cuatro TV, a TV & internet provider, book, reschedule or cancel technical visits in plain conversation. One reusable core, configured per client with a JSON profile.
Problem
El Cuatro TV runs 3,500+ technical service visits a month. Every reschedule or cancellation went through a call center: in May 2026 alone, 125+ measured calls (58 cancellations, 67 reschedules) for those two operations. Customers had no way to manage a visit that didn't involve installing an app or waiting on the phone.
The provider needed customers to manage their own visits in plain language, in whatever language they speak, without the company giving up control over what the system is allowed to do.
Approach
The design principle is bounded agency: the language model only translates what the customer says into a bounded set of actions and slots, as structured output. A deterministic layer owns what's actually possible. The model can't invent an action, pick a slot that wasn't offered, or write anything to the backend without the customer confirming first.
The whole product is one reusable core driven by a per-client JSON profile: branding, data fields, allowed actions, status mapping. Onboarding the next client is a config file, not a code fork.
- Four languages: Spanish, English, Portuguese, and Hebrew for the platform's home market. Relative dates like "next week" are resolved deterministically, never left to the model to guess.
- Demoed live to OfficeTrack's own leadership, commercial and R&D directors included, against real production data.
Architecture
A LangGraph state machine drives the conversation. The only path that writes to OfficeTrack's SOAP API is gated behind the customer's explicit confirmation.
- Self-hosted on my own VPS: systemd services, nginx, SQLite-backed session persistence.
- Integrated live against OfficeTrack's SOAP API: real slots, real bookings, real audit trail. Not a mockup.
Spec sheet
- Engine
- LangGraph state machine. The model emits structured output only, never free-form actions.
- Action layer
- Bounded set defined per client. Every backend write is gated behind the customer's explicit confirmation.
- Languages
- Spanish, English, Portuguese and Hebrew. Relative dates like "next week" are resolved deterministically, not guessed by the model.
- Integration
- OfficeTrack's SOAP API, live: real slots, real bookings, full audit trail.
- Onboarding
- One JSON profile per client: branding, data fields, allowed actions, status mapping.
- Hosting
- Self-managed VPS: systemd services behind nginx, SQLite-backed session persistence.
Outcome