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.
Marcá cada paso a medida que lo hacés: el avance queda guardado en este navegador. ¿Preferís preguntar en vez de leer? El agente de soporte sabe exactamente lo mismo y responde al momento.
~5 min
Antes de instalar nada, conviene tener claro el modelo: vos instalás el sistema una vez y le vendés el acceso a negocios de tu zona. No vendés horas ni desarrollo: vendés un sistema que ya funciona.
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. Vos cobrás una instalación inicial, una mensualidad, o las dos cosas.
Lo que decidas: le cobrás 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 turnos que ya daba por perdidos. La conversación de venta más efectiva es mostrarle su propia tasa de ausencias.
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
Decí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.
~4 min
Vale la pena tenerlo claro antes de salir a vender, porque define cómo podés cobrar y cómo no.
Podés usar el software para operar tu propio servicio y cobrarles a los negocios que atendés. No podés vender, ceder ni distribuir el software ni su código a terceros.
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.
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.
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. Podés 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 turno. Si un negocio cambia de rubro, conviene darlo de alta de nuevo.
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 cargás 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 completás vos.
Las dos formas se habilitan al cumplirse los 7 días de garantía, y valen lo mismo. Mientras tanto usás el producto desde tu espacio. «Espacio ya listo»: autorizás tu cuenta de GitHub, te creamos un repositorio privado tuyo con el producto adentro y lo publicás en Vercel con un clic — no tocás código ni abrís una terminal. «Carpeta de código»: descargás el ZIP y lo instalás donde quieras con el manual al lado. Podés 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.
Tenés 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 perdés 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.
Cobrás por el servicio: instalación, mensualidad, por uso, o como prefieras. Lo que no hacés 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.
~45 min
Son tres piezas: una base de datos (Supabase), una clave de IA (Claude) y un hosting (Vercel u otro). Con calma, la primera vez lleva menos de una hora.
Entrá a supabase.com, creá una cuenta y un proyecto nuevo. Guardá la contraseña de la base que te pide al crearlo: la vas a necesitar y no se puede recuperar después, sólo cambiar. El plan gratuito alcanza para arrancar.
En el proyecto, andá a Project Settings → API. Vas a necesitar tres valores: la URL del proyecto, la clave anon (pública) y la clave service_role (secreta).
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.
Copiá .env.example a .env.local y completá los valores. Después corré las migraciones, que crean las tablas.
cp .env.example .env.local
npm install
npm run migrateOjo con esto
Si al abrir la app ves 'permission denied for table ...', es que faltó la migración 0003_grants.sql. Supabase da permisos automáticamente a lo que se crea desde su editor web, pero no a lo que se crea por conexión directa. Volvé a correr npm run migrate.
Dos valores que se generan en tu máquina y van en .env.local. El primero cifra los tokens de WhatsApp y las claves de API guardadas; el segundo protege los endpoints programados.
openssl rand -base64 32 # APP_ENCRYPTION_KEY
openssl rand -hex 32 # CRON_SECRETOjo con esto
Si cambiás 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. Generala una vez y guardala bien.
Tu instalación viene completa y no tenés que tocar nada. Si querés vender dos niveles de precio, levantá 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=reducidoOjo con esto
En tu instalación principal dejá 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.
Con npm run dev lo probás en tu máquina. Para publicarlo, subilo a Vercel: importás el repositorio, pegás las mismas variables de entorno y listo.
npm run devLos recordatorios y las automatizaciones necesitan un cron. En Vercel ya viene configurado en vercel.json. En otro hosting, apuntá 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/automationsOjo 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.
~15 min
Con el sistema andando, cada cliente tuyo se da de alta en minutos. Podés hacerlo vos y entregarle el acceso listo.
Abrí la app y pedí el link de acceso con tu correo. Llega un enlace, hacés clic y entrás. No hay contraseñas.
Elegís 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.
Cargá 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) cargá el tiempo de limpieza en 'Limpieza después'. Si lo dejás en cero, el agente va a ofrecer turnos pegados uno tras otro.
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.
En Ajustes va la clave de API de Claude del negocio. Se guarda cifrada. Cada negocio usa la suya, así el consumo de IA lo paga quien lo usa.
Andá a 'Probar el agente'. Es el agente real contra la agenda real, con el envío simulado. Reservá, reagendá y cancelá desde ahí antes de conectar ningún número.
~40 min
Es el paso que más intimida y el que más conviene entender bien. Hay dos caminos y podés elegir según cuánto apure el cliente.
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 vos.
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.
Una vez para toda tu instalación: creás una cuenta de Meta Business, una App en developers.facebook.com con el producto WhatsApp, y configurás el Embedded Signup. Eso te da tres valores (META_APP_ID, META_APP_SECRET, META_CONFIG_ID) que ponés en el entorno. No se repite por 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 copiás ni pegás ningún token.
Si no querés 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 pegás en el panel y quedás conectado en minutos. Cuesta un poco más por conversación.
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/webhookOjo 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.
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, mandalos a aprobar y esperá — normalmente tardan horas.
cita_recordatorio_24h
cita_recordatorio_2h
encuesta_satisfaccion
pedido_resena
rescate_no_show
turno_liberado
alerta_cliente_disconformeOjo con esto
Los nombres tienen que coincidir exactamente. Si creás la plantilla con otro nombre, el envío falla en silencio y queda registrado como fallido en la base.
~20 min
Ya tenés el producto andando. Ahora la parte que decide si esto te devuelve la inversión.
El producto incluye las mismas vitrinas que probaste antes de comprar, en /demo. Sembrá el negocio de demostración, publicalo con tu marca y usalo como argumento de venta: que el cliente le escriba al agente y vea la cita aparecer.
npm run seed:demoA los negocios donde el turno 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.
Preguntale cuánta gente le falta por semana. Casi todos lo saben de memoria y les duele. Después mostrale en el demo el panel de métricas con las ausencias recuperadas. El producto se vende solo cuando el número es de ellos.
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. Vos definís los montos.
Prometé 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 vos.
~10 min
Los tropiezos más comunes, con la causa real y no con el síntoma.
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. Corré npm run migrate de nuevo: la migración 0003 los declara explícitamente.
Casi siempre es que el negocio no tiene horarios de atención cargados, o el servicio no tiene ningún profesional que lo preste. Revisá Horarios y Equipo. El agente nunca inventa un turno: si el motor dice que no hay, no hay.
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. Mirá la tabla de recordatorios: los fallidos guardan el motivo.
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ó: reconectá el número desde el panel.
Es lo correcto: está hecho para no inventar. Completá el campo 'Sobre el negocio' y las preguntas frecuentes en Ajustes con esa información, y deja de pasar.
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.