Eliminar payment + waiting (legacy): el bot toma pedidos, no cobra
El bot conversacional no maneja pagos. Su trabajo: pedidos, datos de entrega, dejar la orden anotada en Woo (status=pending). El cobro lo gestiona el comercio offline. Todo lo de payment_type / is_paid / PAYMENT / WAITING_WEBHOOKS era legacy de un flow viejo que se baja. Nuevo flow: IDLE → CART → SHIPPING → IDLE (con orden creada). Cuando el usuario completa shipping (pickup elegido OR delivery+address), shipping.js emite create_order y el bot cierra con order.confirmed. - fsm.js: 4 estados (IDLE/CART/SHIPPING/AWAITING_HUMAN). hasPaymentInfo e isPaid eliminados. deriveNextState gira SHIPPING→IDLE en vez de →PAYMENT→WAITING. ALLOWED transitions actualizadas. - orderModel.js: createEmptyOrder() sin payment_type/is_paid. migrateOldContext deja de leer payment_method / mp.payment_status. - stateHandlers: payment.js y waiting.js eliminados. shipping.js gana finalizeOrder() que emite create_order action y vuelve a IDLE. - replyTemplates: payment.* y waiting.* fuera. order.confirmed nuevo, con 3 variantes y rewriter habilitado. - NLU openai.js + nlu/schemas.js: select_payment fuera del enum, payment_method fuera de entities. Prompt sin la regla de SELECCIONAR PAGO. - nlu/router.js + nlu/index.js: dominio "payment" eliminado. shouldSkipRouter ya no chequea PAYMENT. - nlu/specialists/payment.js: eliminado. - promptsRepo.js + promptLoader.js: PROMPT_KEYS sin "payment". - turnEngineV3.js: switch ya no dispatcha a PAYMENT/WAITING. normalizeState mapea estados legacy (PAYMENT/WAITING_WEBHOOKS/COMPLETED) a IDLE. context_patch ya no emite payment_method. - wooOrders.createOrder: paymentMethod param eliminado. Order queda en status=pending sin payment_method (cobro offline). - pipeline.js: paymentMethod fuera del create_order glue. Invariant "no_checkout_without_payment_link" eliminado. signal payment_selected reemplazado por shipping_completed. - XState machine: top-level PAYMENT y WAITING eliminados. SELECT_PAYMENT event fuera. SHIPPING ahora cierra con enqueueWooCreateOrder + replyOrderConfirmed → IDLE. Guards hasPayment/isPaid borrados. - Tests fsm.test.js / orderModel.test.js / machine/index.test.js actualizados al nuevo contrato. 188 tests pasando. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,6 @@ import { routerClassify, quickDomainDetect } from "./router.js";
|
||||
import { greetingNlu } from "./specialists/greeting.js";
|
||||
import { ordersNlu } from "./specialists/orders.js";
|
||||
import { shippingNlu } from "./specialists/shipping.js";
|
||||
import { paymentNlu } from "./specialists/payment.js";
|
||||
import { browseNlu } from "./specialists/browse.js";
|
||||
import { createEmptyNlu } from "./schemas.js";
|
||||
|
||||
@@ -50,7 +49,7 @@ export async function llmNluModular({ input, tenantId, storeConfig = {} } = {})
|
||||
|
||||
// Casos donde podemos saltar el router:
|
||||
// - Saludos simples
|
||||
// - Números solos (1, 2) en estados SHIPPING/PAYMENT
|
||||
// - Números solos (1, 2) en estado SHIPPING
|
||||
// - Patrones muy claros
|
||||
const skipRouter = shouldSkipRouter(text, state, quickDomain);
|
||||
|
||||
@@ -85,12 +84,7 @@ export async function llmNluModular({ input, tenantId, storeConfig = {} } = {})
|
||||
routing.specialist_used = "shipping";
|
||||
result = await shippingNlu({ tenantId, text, storeConfig });
|
||||
break;
|
||||
|
||||
case "payment":
|
||||
routing.specialist_used = "payment";
|
||||
result = await paymentNlu({ tenantId, text, storeConfig });
|
||||
break;
|
||||
|
||||
|
||||
case "browse":
|
||||
routing.specialist_used = "browse";
|
||||
result = await browseNlu({ tenantId, text, storeConfig });
|
||||
@@ -145,18 +139,11 @@ function shouldSkipRouter(text, state, quickDomain) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Números solos en estados específicos
|
||||
if (/^[12]$/.test(t)) {
|
||||
if (state === "SHIPPING" || state === "PAYMENT") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// "efectivo" o "tarjeta" solos en estado PAYMENT
|
||||
if (state === "PAYMENT" && /^(efectivo|tarjeta|link|transfer)$/i.test(t)) {
|
||||
// Números solos en estado SHIPPING (selección 1/2)
|
||||
if (/^[12]$/.test(t) && state === "SHIPPING") {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// "delivery" o "retiro" solos en estado SHIPPING
|
||||
if (state === "SHIPPING" && /^(delivery|retiro|buscar|sucursal)$/i.test(t)) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user