Files
taller_automotriz/scripts/chat-bot.ts
T
Beldor 9e93808dc1
Revisión con IA / ai-review (pull_request) Successful in 25s
fix: detalles del formato de telefono senalados en la revision
- esLocalArgentinoValido tambien rechaza los que arrancan con 15: ninguna
  caracteristica argentina empieza asi, es el viejo prefijo de celular.
- El formulario ya no reta "faltan digitos" mientras se esta tipeando; ese
  aviso espera a que el campo pierda el foco. Los errores seguros (0 o 15
  adelante) se siguen mostrando al instante.
- chat-bot.ts normalizaba el telefono para conversar pero no para /reset, asi
  que el reset no encontraba la conversacion y no borraba nada.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 15:02:59 -03:00

55 lines
1.9 KiB
TypeScript

/**
* Chatear con el bot de WhatsApp desde la consola, sin Meta.
*
* Habla directo con `procesarMensaje`, que es lo mismo que invoca el webhook, así
* que ejercita la conversación completa contra la base a la que apunte DATABASE_URL
* (turnos incluidos: lo que reserves acá queda guardado).
*
* DATABASE_URL=... npx tsx scripts/chat-bot.ts [telefono]
*
* Acepta entrada interactiva o por tubería (una línea por mensaje).
* Comandos propios: /salir, /reset (borra la conversación de ese teléfono).
*/
import { createInterface } from "readline";
import { prisma } from "../src/lib/prisma";
import { procesarMensaje } from "../src/lib/whatsapp-bot";
import { normalizarTelefono } from "../src/lib/telefono";
// Normalizado igual que en el bot: si no, /reset no encuentra la conversación.
const telefono = normalizarTelefono(process.argv[2] ?? "5493510000000");
function mostrar(resp: { tipo: string; texto: string; botones?: { titulo: string }[] }[]) {
for (const r of resp) {
console.log("\n🤖 " + r.texto.replace(/\n/g, "\n "));
if (r.tipo === "botones" && r.botones)
console.log(" [ " + r.botones.map((b) => b.titulo).join(" ] [ ") + " ]");
}
}
async function main() {
console.log(`Chateando como ${telefono}. /salir para terminar, /reset para empezar de cero.`);
const rl = createInterface({ input: process.stdin, terminal: false });
for await (const linea of rl) {
const texto = linea.trim();
if (texto === "/salir") break;
if (texto === "/reset") {
await prisma.conversacionWhatsapp.deleteMany({ where: { telefono } });
console.log("\n(conversación borrada)");
continue;
}
console.log(`\n👤 ${texto}`);
mostrar(await procesarMensaje(telefono, texto));
}
await prisma.$disconnect();
}
main().catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});