saas gastronómico / asistente de ia · en vivo
actualizado
Asistente de WhatsApp con IA sobre la línea fija de cada restaurante.
Muchos clientes prefieren escribir antes que llamar. Los restaurantes conectan su número de siempre a WhatsApp Business, y un asistente de IA toma reservas y responde preguntas sobre la carta y el local, a cualquier hora y en el idioma del cliente.
- Rol
- Arquitectura y desarrollo
- Stack
- NestJS, Postgres, AWS Bedrock
- Modelos
- Claude Sonnet, Claude Haiku
- Canal
- WhatsApp Cloud API
- herramientas que el agente puede usar, activables por restaurante
- 37
- modelos, elegidos en cada turno
- 2
- tests automatizados, incluidas conversaciones end-to-end
- ~880
- ¡Hola! ¿Tienen mesa para 4 mañana a las 19 h?
- Mañana a las 19 h para 4 personas está disponible. ¿La reservo? Confirmar Cambiar
- Confirmar
- ¡Reservado! Nos vemos mañana a las 19 h.
- Webhook El mensaje llega por la WhatsApp Cloud API. Firma verificada, duplicados descartados.
- Cola Cola en Postgres con un bloqueo por conversación. Los mensajes enviados seguidos se procesan como un solo turno.
- Router de modelos Reglas eligen el modelo en cada turno. Este trata de una reserva: este mensaje Claude Sonnet reservas y todo lo que continúa una Claude Haiku preguntas simples, por un tercio del costo
- Agente · 37 herramientas Un único bucle de tool calling. Aquí consulta la disponibilidad y prepara la reserva. Reservas · 11 Carta y alérgenos · 5 Info y FAQ · 4 Botones y listas · 4 Memoria del cliente Eventos Vales
- Confirmación La reserva solo se propone. Se ejecuta cuando el cliente toca Confirmar.
- Sistema de reservas La reserva pasa al sistema del restaurante y la respuesta vuelve por la cola de envío.
La idea
El teléfono de un restaurante suena en el peor momento: en pleno servicio. Con este asistente, cada restaurante conecta a WhatsApp Business el número que sus clientes ya conocen. Los clientes escriben ahí, y el asistente consulta la disponibilidad, toma reservas y responde preguntas sobre la carta, los alérgenos, los horarios y los eventos. También funcionan los audios: se transcriben antes de que el asistente los lea.
Un agente, muchas herramientas
Por dentro es un único agente con tool calling en un backend NestJS. Puede usar 37 herramientas, agrupadas en reservas, carta, información del restaurante, memoria de clientes, eventos, vales y elementos interactivos de WhatsApp como botones y listas. Cada restaurante activa los grupos que necesita y tiene sus propias instrucciones, su propio tono y sus propios límites de costo. Un solo despliegue atiende a todos los restaurantes.
Las preguntas sobre un restaurante se responden con sus propias FAQ, encontradas por búsqueda vectorial en Postgres y reordenadas antes de que el modelo las vea. El asistente además recuerda a los clientes: necesidades alimentarias y preferencias se mantienen en la próxima conversación.
El modelo adecuado para cada turno
No todos los mensajes necesitan el modelo más potente. Un router basado en reglas elige uno en cada turno:
- Claude Sonnet se ocupa de las reservas y de todo lo que continúa una reserva. Ahí un error cuesta una mesa, por eso ese flujo recibe el modelo más potente, que comete menos errores.
- Claude Haiku se ocupa de las preguntas simples. Es más rápido y cuesta alrededor de un tercio.
Ambos corren en AWS Bedrock con perfiles de inferencia de la UE.
Reglas claras para las reservas
Un modelo de lenguaje no debería poder reservar una mesa por su cuenta. Cada reserva, cambio o cancelación primero solo se propone. Se ejecuta cuando el cliente toca Confirmar o responde que sí, lo que además limita lo que puede lograr una prompt injection. A eso se suman entradas validadas (nada de reservas en el pasado, tamaños de grupo razonables), timeouts, un límite diario de costo por cliente, reintentos con una dead-letter queue y un mensaje de respaldo fijo si algo falla.
Hecho para producción
Los mensajes llegan por el webhook de la WhatsApp Cloud API, se verifican, se descartan duplicados y pasan por una cola en Postgres. Un bloqueo por conversación mantiene el orden de las respuestas, y los mensajes enviados seguidos se responden juntos. El tracing corre con Langfuse y el seguimiento de errores con Sentry, sin datos personales. Unos 880 tests automatizados, incluidas conversaciones end-to-end con los modelos reales, corren en CI.
Resultado
El asistente está en vivo. Los restaurantes tienen un canal de reservas que funciona cuando nadie puede atender el teléfono, y los clientes reciben respuesta a cualquier hora, en su propio idioma.
Para el mismo proveedor también construí la app de reservas y un generador de apps white-label.
- NestJS
- AWS Bedrock
- Claude
- Agentes de IA
- Postgres