Actualizado el 25/10/2026
En el agendamiento automático con IA en WhatsApp, el cliente escribe en lenguaje natural («¿hay horario el jueves por la tarde?»), un agente de IA consulta la agenda real mediante herramientas, ofrece los horarios libres, reserva el elegido y lo confirma en el chat. Después, el sistema envía recordatorios y solicitudes de confirmación con plantillas de utilidad y gestiona reprogramaciones y cancelaciones por el mismo camino. Quien decide si un horario existe es la agenda, nunca el modelo de lenguaje.
Este artículo se centra en lo propio del agendamiento: las herramientas del agente, cómo evitar dos clientes en el mismo horario, la secuencia de confirmación y recordatorio y las reglas de Meta para cada mensaje. La infraestructura general (webhook, cola, traspaso a humano) se trata en nuestra guía de chatbots con IA en la API de WhatsApp.
Chatbot genérico vs. agente de agendamiento
Un chatbot de atención responde preguntas. Un agente de agendamiento ejecuta una transacción con efecto real: ocupa el tiempo de una persona o de una sala. Eso cambia el diseño:
| Aspecto | Chatbot de atención | Agente de agendamiento |
|---|---|---|
| Fuente de verdad | Base de conocimiento | Agenda (Google Calendar, software de la clínica, ERP) |
| Acción principal | Responder | Consultar, reservar, reprogramar, cancelar |
| Riesgo principal | Respuesta incorrecta | Horario duplicado o inexistente |
| Mensajes fuera de la ventana | Pocos | Recordatorio y confirmación, por plantilla |
| Fin de la conversación | Duda resuelta | Reserva guardada y confirmada |
Cómo funciona el flujo
- El cliente pide. «Quiero agendar una limpieza facial la semana que viene.» El mensaje abre la ventana de atención de 24 horas.
- El agente entiende. El modelo extrae servicio, período y preferencias y, si falta algo, pregunta.
- El agente consulta. Llama a la herramienta
buscar_horarioscon servicio y rango de fechas. La herramienta lee la agenda y devuelve tres o cuatro opciones. - El cliente elige. Las opciones van como botones o lista, no como texto libre para copiar.
- El agente reserva. Llama a
crear_cita, que guarda el horario con un bloqueo para evitar duplicados. - Confirmación. El agente responde con fecha, hora, dirección y cómo reprogramar.
- Recordatorio. La víspera, el sistema envía una plantilla de utilidad con botones «Confirmo» y «Reprogramar».
- Reprogramación o cancelación. El botón vuelve al agente, que repite los pasos 3 a 6.
¿Quieres probar mientras lees? Crea tu cuenta en Vectalk y envía el primer mensaje por la API oficial. Crear cuenta gratis →
Las herramientas del agente
El modelo no debe «saber» la agenda. Llama a funciones de su backend y recibe el resultado. Cuatro herramientas cubren la mayoría de los casos:
| Herramienta | Entrada | Salida |
|---|---|---|
buscar_horarios | servicio, fecha inicial, fecha final, profesional (opcional) | lista de horarios libres con ID |
crear_cita | ID del horario, nombre, teléfono | ID de la cita o error «horario ocupado» |
reprogramar_cita | ID de la cita, nuevo ID de horario | cita actualizada |
cancelar_cita | ID de la cita, motivo | confirmación |
Definición de la herramienta de búsqueda con los parámetros en JSON Schema. El nombre del campo que envuelve el esquema (input_schema, parameters) cambia de un proveedor de LLM a otro:
{
"name": "buscar_horarios",
"description": "Lista horarios libres para un servicio. Úsela siempre antes de ofrecer horarios al cliente.",
"input_schema": {
"type": "object",
"properties": {
"servicio_id": { "type": "string", "description": "ID del servicio en el catálogo interno" },
"fecha_inicio": { "type": "string", "format": "date" },
"fecha_fin": { "type": "string", "format": "date" },
"profesional_id": { "type": "string" }
},
"required": ["servicio_id", "fecha_inicio", "fecha_fin"]
}
}
Si la agenda está en Google Calendar, la herramienta puede usar la consulta de disponibilidad (POST https://www.googleapis.com/calendar/v3/freeBusy, con timeMin, timeMax y la lista de calendarios), según la documentación de Google, y luego aplicar las reglas del negocio: duración del servicio, intervalo entre citas y horario de atención.
Instrucciones que el prompt de sistema necesita:
- Nunca ofrezca un horario que no venga de
buscar_horarios. - Nunca diga «agendado» antes de que
crear_citadevuelva éxito. - Las fechas relativas («jueves», «mañana») se resuelven en la zona horaria del negocio, indicada en el prompt junto con la fecha actual.
- Si el cliente pide algo fuera del alcance (diagnóstico, precio negociado, reclamo), pase a una persona.
Cómo evitar dos clientes en el mismo horario
Dos clientes pueden ver el mismo horario libre y elegirlo a la vez. La reserva debe ser atómica en la base de datos, no una consulta seguida de una escritura:
// Reserva atómica: solo guarda si el horario sigue libre.
export async function crearCita(db, { slotId, nombre, waId }) {
const r = await db.query(
`UPDATE horarios
SET estado = 'reservado', cliente_wa_id = $2, cliente_nombre = $3, reservado_en = now()
WHERE id = $1 AND estado = 'libre'
RETURNING id, inicio, profesional_id`,
[slotId, waId, nombre]
);
if (r.rowCount === 0) return { ok: false, error: 'horario_ocupado' };
return { ok: true, cita: r.rows[0] };
}
Cuando la herramienta devuelve horario_ocupado, el agente se disculpa, vuelve a llamar a buscar_horarios y ofrece otras opciones. Si la agenda oficial es externa (Google Calendar, software de gestión), guarde primero en su base con el bloqueo y sincronice después, o use el mecanismo de concurrencia que ofrezca el sistema externo.
Ofrecer horarios con botones
Con hasta tres opciones, los botones de respuesta rápida funcionan bien. Con más, use una lista. El id de cada opción lleva el ID del horario, así la elección vuelve sin ambigüedad:
{
"messaging_product": "whatsapp",
"to": "5584999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": { "text": "Tengo estos horarios para limpieza facial con la Dra. Ana:" },
"action": { "buttons": [
{ "type": "reply", "reply": { "id": "slot_88213", "title": "Jue 30/10 14h" } },
{ "type": "reply", "reply": { "id": "slot_88214", "title": "Jue 30/10 16h" } },
{ "type": "reply", "reply": { "id": "slot_88301", "title": "Vie 31/10 10h" } }
] }
}
}
El título de cada botón tiene un límite corto de caracteres, así que abrevie las fechas. Para agendas con muchos campos (seguro médico, sede, profesional), un formulario con WhatsApp Flows puede reunir todo dentro del chat.
Confirmación, recordatorio y reprogramación
La confirmación justo después de reservar ocurre dentro de la ventana de 24 horas, así que puede ser un mensaje libre. El recordatorio de la víspera suele caer fuera de la ventana y necesita plantilla.
Meta usa como ejemplo de plantilla de utilidad la confirmación de una reserva con fecha, hora y número de personas (plantillas de utilidad). Un recordatorio de cita sigue la misma lógica: datos del compromiso del cliente, sin oferta.
| Mensaje | Momento | Categoría probable |
|---|---|---|
| «Su cita de {{1}} quedó para el {{2}} a las {{3}}.» | Justo después de reservar | Mensaje libre (dentro de la ventana) |
| «Recordatorio: {{1}} mañana, {{2}}, a las {{3}}. ¿Confirma?» con botones «Confirmo» y «Reprogramar» | Víspera | Utilidad |
| «Su cita de {{1}} se canceló a pedido suyo. Para agendar de nuevo, responda este mensaje.» | Tras cancelar | Utilidad |
| «Pasaron 6 meses desde su última visita, ¿agendamos?» | Sin acción del cliente | Marketing |
El mensaje de «vuelva a agendar» promociona un servicio y es marketing, con opt-in de ofertas. Vea los criterios en cómo Meta clasifica su plantilla.
Cuando el cliente toca «Reprogramar», el webhook trae el botón y abre una nueva ventana de 24 horas. El agente recibe el contexto de la cita y conduce el cambio con las mismas herramientas. Cuando toca «Confirmo», basta registrar la confirmación; no hace falta llamar al modelo.
Sobre el costo: desde el 1 de octubre de 2026, las plantillas de utilidad enviadas dentro de la ventana se cobran, y las respuestas libres tienen una franquicia de 1.000 mensajes de servicio por número al mes (página de precios). Por eso la confirmación inmediata debe ser un mensaje libre, y la plantilla queda para lo que realmente está fuera de la ventana. Vea mensajes de utilidad en la ventana de atención.
Qué puede salir mal
- Zona horaria. Guarde todo en UTC y convierta a la zona del negocio al mostrar. Un error aquí manda al cliente a la hora equivocada.
- Audios. Mucha gente pide horario por audio. Transcriba antes de pasarlo al agente o responda pidiendo texto.
- Pedidos ambiguos. «Después del almuerzo» debe convertirse en un rango. El agente debe confirmar antes de reservar.
- Agenda desactualizada. Si la recepción agenda por teléfono, el sistema debe reflejarlo en tiempo real.
- Temas sensibles. En salud, el agente agenda pero no orienta tratamientos. La Política de Mensajes de WhatsApp Business también restringe la información de salud cuando la ley local lo exige. Vea WhatsApp para clínicas.
- Traspaso a humano. La política exige caminos claros para hablar con una persona. Incluya esa opción en cada conversación.
Los términos de Meta prohíben usar la plataforma para ofrecer asistentes de IA de uso general como producto principal. Un agente que agenda citas del propio negocio usa la IA como herramienta de atención, que no es el uso al que apuntan los términos; lea la cláusula 4.7 de los Términos de Meta para la Plataforma de WhatsApp Business.
Cómo hacerlo con Vectalk
Vectalk da acceso a la WhatsApp Cloud API oficial de Meta con los mismos payloads y webhooks: el agente envía botones, listas y plantillas a https://apis.vectalk.com.br/api/messages y recibe las respuestas en su webhook. Las plantillas de recordatorio se crean en el endpoint de plantillas, y los botones interactivos siguen la página de botones de respuesta. Con la coexistencia, la recepción sigue usando la app WhatsApp Business en el mismo número. Cree su cuenta en apps.vectalk.com.br/register.
Preguntas frecuentes
¿Necesito IA para tener agendamiento automático en WhatsApp?
No. Un flujo con botones y listas ya agenda sin IA. El agente de IA ayuda cuando los pedidos llegan en lenguaje libre, con fechas relativas, dudas y cambios en medio de la conversación.
¿El agente puede enviar el recordatorio por su cuenta?
El recordatorio de la víspera suele caer fuera de la ventana de 24 horas y necesita una plantilla aprobada. Lo dispara su programador de tareas, no el modelo.
¿Cómo evito que la IA invente horarios?
Prohíba en el prompt cualquier horario que no venga de la herramienta de búsqueda y valide en el backend: la cita solo existe si crear_cita devuelve éxito.
¿El cliente puede reprogramar solo?
Sí. El botón «Reprogramar» del recordatorio lleva de vuelta al agente, que consulta la agenda y cambia el horario con las mismas herramientas.
¿Funciona con varias sedes y profesionales?
Sí, siempre que la herramienta de búsqueda reciba sede y profesional como parámetros y la agenda de cada uno esté en el sistema. Con muchos agentes humanos en el mismo número, vea varios agentes en un número.
Fuentes oficiales consultadas el 25/10/2026: Plantillas de utilidad, Categorización de plantillas, Precios, Política de Mensajes de WhatsApp Business, Términos de Meta para la Plataforma de WhatsApp Business, Google Calendar API: freeBusy, Documentación de Vectalk.
Pon a funcionar el WhatsApp oficial de tu empresa
Crea tu cuenta, conecta tu número a la API oficial (puedes mantener la app con coexistencia) y empieza a atender y enviar mensajes.
