← CitasIA

Manual de instalación, uso y venta

De cero a vendiendo. Unos 139 minutos de lectura en total, aunque la instalación la vas a hacer una sola vez y el resto es referencia.

Marca cada paso a medida que lo haces: el avance queda guardado en este navegador. ¿Prefieres preguntar en vez de leer? El agente de soporte sabe exactamente lo mismo y responde al momento.

Qué compraste y cómo se gana dinero con esto

~5 min

Antes de instalar nada, conviene tener claro el modelo: tú instalas el sistema una vez y le vendes el acceso a negocios de tu zona. No vendes horas ni desarrollo: vendes un sistema que ya funciona.

  1. El modelo de negocio en una frase

    Una sola instalación tuya atiende a muchos negocios. Cada negocio entra con su marca, sus servicios, su equipo y su propio número de WhatsApp, y no ve nada de los demás. Tú cobras una instalación inicial, una mensualidad, o las dos cosas.

  2. Qué cobrar

    Lo que decidas: le cobras a cada negocio el precio que quieras por el servicio. Un punto de referencia útil es que el sistema le ahorra al negocio el tiempo de atender el teléfono y le recupera citas que ya daba por perdidos. La conversación de venta más efectiva es mostrarle su propia tasa de ausencias.

  3. Qué NO incluye

    No incluye la cuenta de Supabase, ni la clave de Claude, ni el número de WhatsApp de cada cliente, ni lo que Meta cobra por mensaje. Esos son costos operativos: los de la infraestructura son tuyos y muy bajos; los de WhatsApp los paga cada negocio.

    Ojo con esto

    Díselo a tu cliente ANTES de cerrar la venta. Que se entere después de que Meta le cobra por mensaje es la forma más rápida de perder la cuenta.

Qué te deja hacer la licencia

~4 min

Vale la pena tenerlo claro antes de salir a vender, porque define cómo puedes cobrar y cómo no.

  1. La regla, en una línea

    El software es de su autor; lo que compraste es una licencia para usarlo. Con ella puedes operar tu propio servicio y cobrarles a los negocios que atiendes. No puedes vender, ceder ni distribuir el software ni su código a terceros.

  2. Lo que sí puedes

    Instalarlo en tu infraestructura, personalizarlo sin límite (marca, colores, nombre y código), dar de alta todos los negocios que quieras, cobrarles lo que decidas, y publicar el demo con tu marca.

  3. Lo que no puedes

    Venderle el software o el código a otra persona o empresa, entregárselo a un cliente para que lo instale por su cuenta, publicarlo en un repositorio público, o redistribuirlo como producto, plantilla o curso.

    Ojo con esto

    Distribuir el software a terceros termina la licencia de forma inmediata. Es la única condición con esa consecuencia, y existe para que los que compran no terminen compitiendo contra copias de lo que compraron.

  4. Los cinco agentes de nicho

    No hay un agente que se adapta: hay cinco, ya preparados de fábrica, uno por rubro — barbería, estética, consultorio dental, spa y veterinaria. El nicho se elige al dar de alta cada negocio y define cómo atiende: el de veterinaria pregunta qué animal es y por qué lo traen; el de barbería va directo al horario sin interrogar; el dental trata el dolor como urgencia. Puedes probar los cinco en el demo.

    Ojo con esto

    El rubro no se cambia después desde Ajustes, a propósito: cambiarlo alteraría cómo el agente atiende a clientes que ya tienen cita. Si un negocio cambia de rubro, conviene darlo de alta de nuevo.

  5. Nicho y personalización no son lo mismo

    El nicho es el oficio y viene de fábrica: cómo se agenda en ese rubro y qué preguntas maneja. La personalización es lo tuyo y la cargas desde el panel para cada negocio: nombre del agente, tono, servicios con sus tiempos y precios, equipo, horarios y respuestas propias. En Ajustes ves las dos cosas: arriba el agente de nicho activo con lo que ya sabe, abajo los campos que completas tú.

  6. Las dos formas de recibir el producto

    Las dos formas se habilitan al cumplirse los 7 días de garantía, y valen lo mismo. Mientras tanto usas el producto desde tu espacio. «Espacio ya listo»: autorizas tu cuenta de GitHub, te creamos un repositorio privado tuyo con el producto adentro y lo publicas en Vercel con un clic — no tocas código ni abres una terminal. «Carpeta de código»: descargas el ZIP y lo instalas donde quieras con el manual al lado. Puedes usar las dos: el ZIP sigue disponible en tu página de acceso aunque hayas elegido el espacio listo.

    Ojo con esto

    GitHub te va a pedir el permiso «repo»: es el mínimo que permite crear un repositorio privado tuyo. Sin él sólo se podrían crear públicos, y el código no puede quedar público.

  7. Si quieres devolverlo

    Tienes 7 días desde la compra para pedir la devolución del importe completo, por cualquier motivo y sin dar explicaciones. El pedido se hace desde Hotmart, que es quien cobró y quien devuelve. Es la garantía que Hotmart exige a todos sus productos: no se puede renunciar y nadie te la puede sacar.

    Ojo con esto

    Al pedir el reembolso pierdes el acceso a las dos cosas: al espacio funcionando y al código. Por eso el código se habilita recién al cumplirse los 7 días — una vez descargado no hay forma de devolverlo, y escalonar la entrega es lo que permite que la garantía sea de verdad. Pasado el plazo, la compra es definitiva.

  8. Cómo se traduce en tu modelo de cobro

    Cobras por el servicio: instalación, mensualidad, por uso, o como prefieras. Lo que no haces es venderle una copia del sistema a un cliente. Si un negocio quiere "quedarse con el software", lo que corresponde es que se compre su propia licencia.

Instalación: de cero a funcionando

~45 min

Son tres piezas: una base de datos (Supabase), una clave de IA (Claude) y un hosting (Vercel u otro). Hasta tenerlo corriendo en tu máquina son unos 45 minutos la primera vez, contando crear las cuentas; publicarlo suma otro rato.

  1. 1. Lo que necesitas antes de empezar

    Una computadora con terminal y Node.js 20.9 o más nuevo (lo compruebas con node -v; si es más viejo, instala la versión LTS desde nodejs.org). Además vas a crear dos cuentas: Supabase, para la base de datos, y Anthropic, para la IA. Ten a mano un correo al que puedas entrar: el panel se abre con un link que llega por correo.

    node -v
  2. 2. Crear el proyecto de Supabase

    Entra a supabase.com, crea una cuenta y un proyecto nuevo. Guarda la contraseña de la base que te pide al crearlo: la vas a necesitar en el paso 4 y no se puede recuperar después, sólo cambiar. El plan gratuito alcanza para arrancar.

  3. 3. Descomprimir e instalar

    Descomprime el ZIP, abre una terminal dentro de la carpeta citasia y corre npm install. Tarda uno o dos minutos. Todos los comandos que siguen se corren desde esa misma carpeta.

    cd citasia
    npm install

    Ojo con esto

    Al terminar, npm puede avisar de «vulnerabilities». Es normal en proyectos de Node y no impide nada. No corras npm audit fix --force: cambia versiones de librerías y puede romper el proyecto.

  4. 4. Pegar las credenciales de Supabase

    Crea tu archivo de configuración copiando el de ejemplo, y ábrelo con cualquier editor de texto. Del proyecto de Supabase van cuatro valores. En Project Settings → API: la URL del proyecto (NEXT_PUBLIC_SUPABASE_URL), la clave anon (NEXT_PUBLIC_SUPABASE_ANON_KEY) y la clave service_role (SUPABASE_SERVICE_ROLE_KEY). Y la conexión directa a la base (DATABASE_URL): botón «Connect» arriba del proyecto → Connection string → URI; copia esa dirección y cambia [YOUR-PASSWORD] por la contraseña que guardaste en el paso 2.

    cp .env.example .env.local

    Ojo con esto

    La clave service_role salta todas las reglas de seguridad. Nunca la pongas en el navegador, ni en un repositorio público, ni se la mandes a un cliente. Y el archivo es .env.local, no .env.example: lo que escribas en el de ejemplo no se lee.

  5. 5. Pegar la clave de Claude

    En console.anthropic.com crea una cuenta, carga saldo en Billing y genera una clave en API Keys. Pégala en ANTHROPIC_API_KEY. Es la clave que usan todos los negocios que no tengan una propia; más adelante, en Ajustes, cada negocio puede llevar la suya para que el consumo de IA lo pague quien lo usa.

  6. 6. Generar las claves de seguridad

    Dos valores que se generan en tu máquina y se pegan en .env.local. El primero va en APP_ENCRYPTION_KEY y cifra los tokens de WhatsApp y las claves de API guardadas; el segundo va en CRON_SECRET y protege las tareas automáticas.

    openssl rand -base64 32   # APP_ENCRYPTION_KEY
    openssl rand -hex 32      # CRON_SECRET

    Ojo con esto

    Si cambias APP_ENCRYPTION_KEY después de haber conectado WhatsApp, los tokens guardados dejan de poder descifrarse y hay que volver a conectar cada número. Genérala una vez y guárdala bien.

  7. 7. Crear las tablas

    Con .env.local completo, corre las migraciones: crean las tablas en tu Supabase. Se pueden correr más de una vez sin problema; las que ya se aplicaron se saltan.

    npm run migrate

    Ojo con esto

    Si dice «Falta DATABASE_URL», el valor no está en .env.local o quedó en .env.example. Si falla la conexión, casi siempre es la contraseña: revisa que hayas reemplazado [YOUR-PASSWORD] completo, corchetes incluidos. Y si al abrir la app ves 'permission denied for table ...', faltó la migración 0003_grants.sql: vuelve a correr npm run migrate.

  8. 8. Levantarlo en tu máquina

    Arranca la app y abre http://localhost:3000 en el navegador. Te pide tu correo y te manda un link para entrar. El capítulo siguiente sigue desde ahí.

    npm run dev

    Ojo con esto

    El correo con el link lo manda Supabase con su servidor de prueba, que permite muy pocos envíos por hora. Para probar alcanza; antes de darles acceso a tus clientes, configura tu propio servidor de correo (SMTP) en la sección Authentication de tu proyecto de Supabase. Si se alcanza el límite, la pantalla de entrada lo dice.

  9. 9. Publicarlo

    Para que tus clientes lo usen, súbelo a Vercel: subes la carpeta a un repositorio privado de GitHub, lo importas en Vercel y pegas las mismas variables de .env.local en Environment Variables. Después, en Supabase → Authentication → URL Configuration, pon la dirección publicada en Site URL y agrégala en Redirect URLs.

    Ojo con esto

    Si te saltas lo de URL Configuration, el link de entrada te manda a localhost en vez de a tu dominio y parece que el acceso está roto. Y el plan gratuito de Vercel (Hobby) sólo permite tareas programadas una vez por día: con el vercel.json que trae el producto, que las corre cada 10 minutos, necesitas el plan Pro, o quitar la sección crons de vercel.json y usar un cron externo como en el paso siguiente.

  10. 10. Programar las tareas automáticas

    Los recordatorios y las automatizaciones necesitan un cron. En Vercel ya viene configurado en vercel.json. En otro hosting, apunta un cron externo a los dos endpoints cada 10 minutos.

    curl -H "Authorization: Bearer $CRON_SECRET" https://YOUR-DOMAIN/api/cron/reminders
    curl -H "Authorization: Bearer $CRON_SECRET" https://YOUR-DOMAIN/api/cron/automations

    Ojo con esto

    Sin el cron, la agenda funciona pero no sale ningún recordatorio. Es el error más común y el más difícil de notar, porque nada falla visiblemente.

  11. 11. Opcional: un plan más barato para tus clientes

    Tu instalación viene completa y no tienes que tocar nada. Si quieres vender dos niveles de precio, levanta una SEGUNDA instalación con el modo reducido: apaga métricas, clientes, automatizaciones y lista de espera, y se la das a quien no necesita esa parte. Es el mismo código con una variable distinta.

    NEXT_PUBLIC_PRODUCT_MODE=reducido

    Ojo con esto

    En tu instalación principal deja esa variable VACÍA. Si queda puesta por error, Métricas y Clientes devuelven 404 y parece que faltara medio producto — por eso el panel muestra un aviso arriba de todo cuando el modo reducido está activo, y lo dice también en el log al arrancar.

Dar de alta tu primer negocio

~15 min

Con el sistema andando, cada cliente tuyo se da de alta en minutos. Puedes hacerlo tú y entregarle el acceso listo.

  1. 1. Entrar al panel

    Abre la app y pide el link de acceso con tu correo. Llega un enlace, haces clic y entras. No hay contraseñas. La primera vez, en vez de la agenda, te pide crear el negocio.

    Ojo con esto

    Abre el link en el mismo navegador donde lo pediste. Si lo pides en la computadora y lo abres desde el correo del teléfono, no entra. Si no llega, mira el correo no deseado antes de pedir otro: cada pedido nuevo invalida el anterior.

  2. 2. Crear el negocio

    Eliges nombre, rubro, zona horaria e idioma. El sistema carga solo un horario de lunes a sábado y tres servicios típicos del rubro, para que la agenda no nazca vacía. Todo se cambia después.

    Ojo con esto

    La zona horaria viene en Ciudad de México. Si el negocio está en otro país, cámbiala al crearlo: el agente ofrece y confirma los horarios en esa hora, y una zona equivocada corre todas las citas.

  3. 3. Ajustar servicios y equipo

    Carga los servicios reales con su duración y precio, y las personas que atienden. Cada una tiene su propia agenda y el sistema impide que se le crucen dos citas.

    Ojo con esto

    En rubros con limpieza entre clientes (dental, spa) carga el tiempo de limpieza en 'Limpieza después'. Si lo dejas en cero, el agente va a ofrecer citas pegadas uno tras otro.

  4. 4. Completar 'Sobre el negocio'

    Es el texto que el agente usa para responder dudas. Pon todo lo que un cliente podría preguntar: formas de pago, estacionamiento, si atienden niños, promociones vigentes. Cuanto más completo, menos veces el agente tiene que decir que no sabe.

  5. 5. Cargar la clave de Claude

    En Ajustes puedes cargar la clave de API de Claude de este negocio. Se guarda cifrada. Así el consumo de IA lo paga quien lo usa. Si la dejas vacía, el negocio usa la ANTHROPIC_API_KEY de tu .env.local.

  6. 6. Probarlo sin mandar un solo WhatsApp

    Ve a 'Probar el agente'. Es el agente real contra la agenda real, con el envío simulado. Reserva, reagenda y cancela desde ahí antes de conectar ningún número: la cita que reserve aparece en la Agenda como cualquier otra.

    Ojo con esto

    Meta no cobra nada aquí, pero Claude sí: cada mensaje de prueba consume saldo de la clave de Claude. «Empezar de nuevo» borra la conversación y cancela las citas de prueba.

Conectar el WhatsApp de un cliente

~40 min

Es el paso que más intimida y el que más conviene entender bien. Hay dos caminos y puedes elegir según cuánto apure el cliente.

  1. Antes de empezar: qué cobra Meta

    El sistema usa la API oficial de WhatsApp Business. Meta cobra por mensaje de plantilla enviado, según su tarifa vigente por país. Cuando el cliente final escribió en las últimas 24 horas, la ventana de servicio está abierta y el sistema manda texto libre, que no se cobra como plantilla. Ese costo lo paga el negocio, no tú.

    Ojo con esto

    Desde enero de 2026 Meta prohíbe los bots de IA de propósito general sin un foco definido. Este agente es específico de reservas de ese negocio, así que cumple. No lo reconviertas en un asistente genérico: es motivo de bloqueo del número.

  2. Camino A — Meta oficial (recomendado)

    Una vez para toda tu instalación: creas una cuenta de Meta Business, una App en developers.facebook.com con el producto WhatsApp, y configuras el Embedded Signup. Eso te da tres valores (META_APP_ID, META_APP_SECRET, META_CONFIG_ID) que pones en el entorno. No se repite por cliente.

  3. Camino A — después, por cada cliente

    En el panel del negocio, WhatsApp → 'Conectar con Meta'. Se abre el popup de Meta, el dueño elige o crea su cuenta de WhatsApp Business, registra su número y lo verifica por SMS. Al cerrarse, queda conectado. No copias ni pegas ningún token.

  4. Camino B — 360dialog (el rápido)

    Si no quieres crear una App de Meta ni esperar la verificación del negocio, 360dialog es un proveedor autorizado: te da una API key por número. La pegas en el panel y quedas conectado en minutos. Cuesta un poco más por conversación.

  5. La URL del webhook

    Es una sola para toda tu instalación, no una por cliente. En la configuración del webhook de Meta pon esta URL y el mismo valor que tengas en META_VERIFY_TOKEN.

    https://YOUR-DOMAIN/api/whatsapp/webhook

    Ojo con esto

    El identificador del número viene en cada mensaje, y por eso el sistema sabe a qué negocio pertenece. No configures una URL distinta por cliente: no hace falta y complica todo.

  6. Las 7 plantillas

    Los mensajes que salen fuera de la ventana de 24 horas tienen que ser plantillas aprobadas por Meta. Son dos para los recordatorios y cinco para las automatizaciones. Los nombres exactos y los textos sugeridos están en el panel: WhatsApp y Automatizaciones. Copialos, mándalos a aprobar y espera — normalmente tardan horas.

    cita_recordatorio_24h
    cita_recordatorio_2h
    encuesta_satisfaccion
    pedido_resena
    rescate_no_show
    turno_liberado
    alerta_cliente_disconforme

    Ojo con esto

    Los nombres tienen que coincidir exactamente. Si creas la plantilla con otro nombre, el envío falla en silencio y queda registrado como fallido en la base.

Publicarlo y salir a vender

~20 min

Ya tienes el producto andando. Ahora la parte que decide si esto te devuelve la inversión.

  1. Publica tu propio demo

    El producto incluye las mismas vitrinas que probaste antes de comprar, en /demo. Carga el negocio de demostración, publícalo con tu marca y úsalo como argumento de venta: que el cliente le escriba al agente y vea la cita aparecer.

    npm run seed:demo
  2. A quién venderle primero

    A los negocios donde la cita se pierde caro: consultorios dentales, estéticas y spas. Un no-show en una barbería cuesta el precio de un corte; en un consultorio cuesta la consulta entera y una hora de sillón vacío.

  3. El argumento que mejor funciona

    Pregúntale cuánta gente le falta por semana. Casi todos lo saben de memoria y les duele. Después muéstrale en el demo el panel de métricas con las ausencias recuperadas. El producto se vende solo cuando el número es de ellos.

  4. Cómo cobrar

    Lo más habitual es una instalación inicial más una mensualidad. La instalación cubre tu tiempo de alta y configuración; la mensualidad, el hosting y tu disponibilidad. Tú defines los montos.

  5. Qué prometer y qué no

    Promete lo que el sistema hace: atiende WhatsApp, agenda sin choques, recuerda, mide y recupera ausencias. No prometas que Meta aprueba las plantillas en un plazo fijo ni que no habrá costos de mensajería: eso no depende de ti.

Cuando algo no anda

~10 min

Los tropiezos más comunes, con la causa real y no con el síntoma.

  1. 'permission denied for table ...'

    Faltó la migración de permisos. Supabase concede permisos automáticamente a las tablas creadas desde su editor web, pero no a las creadas por conexión directa. Corre npm run migrate de nuevo: la migración 0003 los declara explícitamente.

  2. El agente responde pero no reserva

    Casi siempre es que el negocio no tiene horarios de atención cargados, o el servicio no tiene ningún profesional que lo preste. Revisa Horarios y Equipo. El agente nunca inventa una cita: si el motor dice que no hay, no hay.

  3. No llegan los recordatorios

    Tres causas, en orden de frecuencia: el cron no está configurado; las plantillas no están aprobadas en Meta; o el nombre de la plantilla no coincide exactamente. Mira la tabla de recordatorios: los fallidos guardan el motivo.

  4. Meta rechaza los envíos

    Si el error menciona la ventana de 24 horas, el mensaje salió como texto libre cuando debía ser plantilla. Si menciona el token, la conexión se venció o se revocó: reconecta el número desde el panel.

  5. El agente dice que no sabe algo del negocio

    Es lo correcto: está hecho para no inventar. Completa el campo 'Sobre el negocio' y las preguntas frecuentes en Ajustes con esa información, y deja de pasar.

  6. Dos clientes reservaron el mismo horario

    No puede pasar: la base de datos tiene una restricción que lo impide a nivel de motor, no sólo en la aplicación. Si ves dos citas superpuestas, van a ser de profesionales distintos o alguna está cancelada.