Skip to main content
Agendar citas es el caso de uso clásico de un agente de voz: el asistente consulta los huecos libres durante la llamada, ofrece un par de opciones y reserva la que elige quien llama. La plataforma soporta esto de dos formas que puedes combinar libremente:
  1. Integraciones de calendario: conecta un proveedor externo de programación (Cal.com, Calendly, Google Calendar, Outlook) una sola vez, asígnalo a un asistente, y el asistente obtiene automáticamente herramientas de reserva en cada llamada.
  2. El motor de reservas integrado: define tus propios tipos de evento con disponibilidad semanal y obtén una página de reserva pública e integrable en /book/{workspace}/{slug}, correos de invitación ICS y una integración native contra la que tus asistentes pueden reservar. No necesitas ninguna cuenta externa.

Proveedores de un vistazo

Modo de enlace de Calendly: la API de programación de Calendly requiere un plan de pago de Calendly. Si tu plan no permite reservar directamente, configura el booking_mode de la integración en link: el asistente entonces acuerda una hora aproximada con quien llama y envía un enlace de programación de un solo uso por SMS o correo (link_channel) en lugar de reservar directamente. Las integraciones que topan con la restricción del plan de pago durante la llamada se marcan con el estado link_mode.

Conectar una integración

Ve a Herramientas → Integraciones y elige la tarjeta del proveedor:
  • Cal.com: pega tu clave de API (Cal.com → Settings → Developer → API Keys) y el ID numérico del tipo de evento (visible en la URL del tipo de evento). La zona horaria es opcional; asegúrate de que coincida con la del tipo de evento en Cal.com.
  • Calendly: pega un token de acceso personal (Calendly → Integrations & apps → API & webhooks) y elige el tipo de evento. Selecciona el modo de reserva (api o link) y el canal del enlace.
  • Google / Outlook: haz clic en Conectar y completa el consentimiento de OAuth. La conexión se guarda por espacio de trabajo y la reutilizan todas las integraciones y tipos de evento que la referencien.
  • Native: elige uno de tus tipos de evento de reserva (ver más abajo).
Toda integración se verifica antes de guardarse: una clave de API, token o ID de tipo de evento inválidos se rechazan con un error claro y nunca se almacenan. Los valores secretos nunca salen del servidor: las respuestas los enmascaran como ••• (envía ••• al actualizar para conservar el valor guardado).

Asignar a un asistente

Abre la configuración del asistente y marca las integraciones que debe usar (o llama a PUT /api/v1/assistants/{id}/integrations). Por cada integración asignada, el asistente obtiene estas herramientas en cada llamada: Si se asigna más de una integración, los nombres de las herramientas llevan el nombre de la integración como sufijo (por ejemplo, check_availability_sales). Los huecos siempre se dicen en la zona horaria del asistente; configúrala en los ajustes del asistente.
Indícale al asistente cuándo reservar en su prompt, por ejemplo: “Antes de ofrecer cualquier horario, llama a check_availability. Cuando quien llama confirme un hueco, llama a book_appointment con su nombre y correo.”

El motor de reservas integrado

Crea tipos de evento en Reservas dentro del panel (o vía API/MCP):
  • Nombre, slug y duración: el slug es único dentro del espacio de trabajo y se convierte en la URL de la página pública /book/{workspace}/{slug} (workspace = booking_handle del tenant).
  • Disponibilidad semanal: franjas horarias por día de la semana en la zona horaria del tipo de evento, por ejemplo, de lunes a viernes de 09:00 a 17:00.
  • Márgenes y reglas: margen antes/después de cada reserva, aviso mínimo, horizonte de reserva (max_days_ahead) e incremento entre huecos.
  • Sincronización de calendario (opcional): vincula un calendario de Google/Outlook conectado; sus horarios ocupados se restan de los huecos ofrecidos, y las reservas confirmadas se envían como eventos de calendario (los invitados reciben la invitación del proveedor).

Página de reserva pública e inserción

Cada tipo de evento activo tiene una página pública con la marca de tu espacio de trabajo en https://<your-domain>/book/{workspace}/{slug}, sin necesidad de iniciar sesión. Insértala donde quieras:
Los visitantes eligen un hueco (mostrado en su propia zona horaria), indican su nombre y correo, y reciben un correo de confirmación con una invitación de calendario ICS más un enlace de cancelación. Las reservas duplicadas son imposibles: una restricción de exclusión a nivel de base de datos protege el hueco incluso cuando un visitante web y un asistente reservan en el mismo instante; quien pierde la carrera recibe un mensaje amistoso de “hueco recién ocupado”.

Reservar desde llamadas

Crea una integración con el proveedor native apuntando al tipo de evento y asígnala a un asistente: las reservas hechas a mitad de llamada aterrizan en el mismo calendario con source: "call" y un enlace al registro de la llamada.

Restricción por plan

Toda la función está controlada por el flag de plan calendar_integrations (administrador de la plataforma → Planes). Sin él, crear integraciones o tipos de evento devuelve 403; las páginas de reserva públicas existentes dejan de aceptar nuevas reservas.

API y MCP

Todo lo anterior está disponible en la API REST pública y como herramientas MCP en https://<your-domain>/mcp: GET /api/v1/bookings y list_bookings admiten filtros por tipo de evento, origen y fecha. Usa view=upcoming|unconfirmed|recurring|past|cancelled para obtener las mismas vistas de reservas que el panel, o usa un filtro status exacto; view y status son mutuamente excluyentes. Cancelar una reserva envía una actualización ICS METHOD:CANCEL, de modo que la cita desaparece automáticamente del calendario del invitado.