9e93808dc1
Revisión con IA / ai-review (pull_request) Successful in 25s
- 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>
55 lines
1.9 KiB
TypeScript
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);
|
|
});
|