Comanda: convierte un mensaje de WhatsApp en un pedido con productos, cantidades y precios
El problema
En una PyME argentina el pedido no llega por un formulario web: llega por WhatsApp, escrito como se lo diría a una persona.
«hola! 2 docenas de empanadas y una coca grande»
Alguien lo lee y lo copia a mano a una planilla o a un sistema. Ese paso es el que se rompe: se traspapelan pedidos, se cobra de menos, el stock nunca coincide.
Comanda hace ese paso automático.
Cómo funciona
El parser (lib/parser.ts) es determinista, sin modelo de lenguaje. Para un catálogo acotado —una parrilla, un kiosco, una distribuidora— las reglas alcanzan, no cuestan nada por mensaje y no se pueden abusar. Un modelo entra recién cuando el catálogo es grande o el vocabulario del cliente es impredecible.
Resuelve lo que aparece en los mensajes reales:
| Entrada | Interpretación |
|---|---|
2 empanadas | cantidad en dígitos |
tres chorizos | cantidad escrita en palabras |
una docena de empanadas | unidades de venta (docena, media docena) |
medio kilo de vacío · 1,5 kilos | productos por peso, con decimal en coma |
2 empandas | errores de tipeo, por distancia de edición |
una coca grande vs una coca | el alias más largo gana, o se cobra de menos |
3 milanesas, 2 chorizos y un agua | varios productos en un mensaje |
hola! quiero … gracias | cortesías, que no son productos faltantes |
Lo que no reconoce lo devuelve como faltante en vez de ignorarlo: es preferible que el cliente vea «no encontré pizzas» a que el pedido salga incompleto sin que nadie se entere.
Demo en vivo
La demo simula la conversación para que se pueda probar sin instalar nada. Escribí un mensaje con productos y mirá cómo se convierte en un pedido con cantidades y precios.
No hay un WhatsApp conectado detrás de la demo: el mismo parser corre igual detrás de la API oficial de WhatsApp Cloud, que es lo que se instala en cada cliente.
Tampoco hay base de datos: el estado del pedido y del stock vive en la sesión de cada visitante, así que dos personas probando al mismo tiempo no se pisan.
Por qué determinista
Un modelo de lenguaje puede interpretar cualquier mensaje, pero:
- Cuesta por mensaje. Cada pedido pasa por la API.
- No es determinístico. El mismo mensaje puede interpretarse distinto dos veces.
- Se puede abusar. Un prompt injection en un mensaje puede hacer que el modelo ignore el catálogo.
Para un catálogo acotado, un parser con reglas resuelve el 95% de los casos sin esos costos. El 5% restante —pedidos ambiguos, productos nuevos, mensajes muy largos— se puede derivar a un modelo o a un humano, pero no hace falta arrancar por ahí.
Código abierto
El parser y la demo están bajo licencia MIT. El código está en GitHub y la demo corre en comanda.lykos.com.ar.