# Tovayo — una recepción con AI gratuita para pequeños negocios

Un recepcionista con AI de código abierto para los pequeños negocios de servicios que viven en la mensajería — peluquerías, profesores particulares, coaches, astrólogos. Atiende a los clientes, agenda y reprograma citas reales, recoge lo que cada reserva necesita y envía recordatorios — 24/7, en el idioma del cliente — sobre un bot de Telegram que el dueño conecta pegando un token. Multi-tenant, model-agnostic, backend hexagonal en Python/FastAPI + panel en Next.js, transporte por webhooks con polling de respaldo, y las acciones sensibles controladas por Airlock. Gratis para autohospedar o usar alojado, gratis, en tovayo.com.

- **Author:** Fedor Chishchin
- **Role:** Solo — diseño, implementación, tests
- **Period:** 2026
- **Stack:** Python · FastAPI · PostgreSQL · Next.js · Telegram Bot API · OpenRouter · Hexagonal architecture · Docker · Railway
- **Source:** https://fedorthinks.com/es/work/tovayo

---

Autohospédalo con un solo comando, o úsalo alojado gratis en [tovayo.com](https://tovayo.com):

<Command>docker compose up</Command>

## El problema, en una frase

Un montón de pequeños negocios funcionan enteramente sobre la mensajería — una peluquería, un
profesor particular, un coach, un astrólogo — y pierden reservas por una razón aburrida: no pueden
responder lo bastante rápido.

Un cliente escribe _«¿puedo pasar mañana por la tarde?»_ a las 11 de la noche. Para cuando el dueño
lo ve, ya ha reservado en otro sitio. El dueño está ocupado haciendo el trabajo de verdad —
cortando el pelo, dando clase, leyendo cartas — no pegado al teléfono. Un recepcionista de verdad
cuesta más de lo que el negocio gana; los CRM existentes son torpes y quieren cobrar una cuota
mensual por un software que el dueño nunca abre.

## Qué hace Tovayo

Tovayo es un recepcionista con AI que vive en el canal que el cliente ya usa — un bot de Telegram
que el dueño conecta pegando un solo token. A partir de ahí:

- **Responde** desde los propios servicios, precios, horarios y FAQ del negocio — nunca se inventa
  nada.
- **Agenda, reprograma y cancela** citas reales, con protección contra dobles reservas garantizada
  en la base de datos, no confiada a un prompt.
- **Recoge lo que la reserva necesita** antes de confirmar — una fecha y un lugar de nacimiento para
  un astrólogo, un objetivo para un coach — configurado por servicio.
- **Envía recordatorios** antes de cada cita para que se acaben las ausencias.
- **Se aparta cuando se lo pides.** El dueño puede entrar en cualquier conversación y responder como
  él mismo; la AI se calla hasta que se la devuelve.
- Habla **cuatro idiomas** de fábrica (inglés, español, ruso, chino), en el idioma del propio
  cliente.

Son dos formas de usarlo, ambas gratis: toma el código abierto y córrelo donde quieras — incluso
comercialmente — o usa el servicio alojado en tovayo.com, gratis e ilimitado.

## Dónde está la ingeniería

Lo interesante no es el chat; es todo lo que lo rodea y que hace que el chat sea confiable.

**Reservas reales, no un calendario simulado.** La disponibilidad se calcula a partir del horario de
trabajo de cada servicio, su antelación y sus márgenes; la escritura real está protegida por una
exclusion constraint de Postgres, así que dos clientes que pelean por el mismo hueco de las 14:00 no
pueden ganar ambos. El asistente propone horarios llamando a una herramienta `find_availability` y
reserva llamando a `book` — nunca se inventa un hueco.

**El modelo es secuestrable, así que las acciones con forma de dinero están controladas.** Tovayo
usa su propia medicina con [Airlock](/work/airlock): las cancelaciones, las reprogramaciones y
cualquier cosa sensible se detienen para que el dueño las apruebe en el panel antes de ejecutarse.
Un modelo con inyección de prompt o equivocado puede _sugerir_ un reembolso; no puede ejecutarlo por
su cuenta.

**Multi-tenant y model-agnostic.** Un solo despliegue sirve a muchos negocios, cada uno con su
propio bot, horario, prompt y (opcionalmente) su propia clave de LLM. Al modelo se llega a través de
un adaptador estilo OpenRouter detrás de un protocolo `LlmProvider` — cambia el modelo en la
configuración, sin tocar código.

**Un transporte que sobrevive a la realidad.** Telegram entrega las actualizaciones de dos maneras.
Tovayo prefiere los **webhooks** (un push a la API pública) y cae al **polling** por bot — el mismo
flag `webhook_set` los separa, así que un bot cuyo webhook no se registró sigue atendido por el
poller y nunca por ambos. Los webhooks necesitan un dominio; el polling no necesita nada, así que
también corre justo después de un `docker compose up` en un portátil.

**Construido con el mismo estándar que todo lo demás aquí.** Arquitectura hexagonal con los límites
garantizados por import-linter, dependencias inyectadas a través de protocolos con fakes en memoria
(no mocks), Pydantic y Zod en los bordes, `mypy --strict` y `tsc` limpios, y una compuerta de
cobertura. El backend es FastAPI; el panel del dueño es Next.js (en/es/ru/zh); la autenticación es
por email o Google OAuth; se despliega en Railway como API + worker + poller de Telegram + Postgres.

## Por qué es gratis y abierto

Un recepcionista no debería ser una suscripción que un negocio de una sola persona no pueda
justificar. El código está abierto para que cualquiera pueda correrlo, leerlo y confiar en él; la
versión alojada es gratis para que las personas que más la necesitan — las que no quieren tocar un
servidor — la tengan igual. Las conversaciones se guardan para que el asistente tenga contexto, y un
dueño puede borrar su cuenta y todo rastro de sus datos en cualquier momento, de forma irreversible.
La honestidad es justo el punto.
