badges on the right, evolution api sender
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import crypto from "crypto";
|
||||
import {
|
||||
createTakeover,
|
||||
listPendingTakeovers,
|
||||
@@ -10,7 +11,9 @@ import {
|
||||
getTakeoverStats,
|
||||
} from "../db/takeoverRepo.js";
|
||||
import { insertAlias, upsertAliasMapping } from "../db/repo.js";
|
||||
import { getRecentMessagesForLLM, getConversationState, upsertConversationState } from "../../2-identity/db/repo.js";
|
||||
import { getRecentMessagesForLLM, getConversationState, upsertConversationState, insertMessage } from "../../2-identity/db/repo.js";
|
||||
import { sseSend } from "../../shared/sse.js";
|
||||
import { sendTextMessage, isEvolutionEnabled } from "../../1-intake/services/evolutionSender.js";
|
||||
|
||||
/**
|
||||
* Lista takeovers pendientes de respuesta
|
||||
@@ -107,12 +110,69 @@ export async function handleRespondToTakeover({
|
||||
id,
|
||||
humanResponse: response,
|
||||
respondedBy,
|
||||
cartItems, // Pasar los items para que se guarden
|
||||
cartItems,
|
||||
});
|
||||
|
||||
if (!result) {
|
||||
throw new Error("Takeover not found or already responded");
|
||||
}
|
||||
|
||||
// INSERTAR EL MENSAJE DE RESPUESTA EN LA BD
|
||||
if (result.chat_id && response) {
|
||||
try {
|
||||
const messageId = `takeover_${crypto.randomUUID()}`;
|
||||
await insertMessage({
|
||||
tenant_id: tenantId,
|
||||
wa_chat_id: result.chat_id,
|
||||
provider: "takeover",
|
||||
message_id: messageId,
|
||||
direction: "out",
|
||||
text: response,
|
||||
payload: {
|
||||
reply: response,
|
||||
takeover_id: id,
|
||||
railguard: { simulated: false, source: "human_takeover" }
|
||||
},
|
||||
run_id: null,
|
||||
});
|
||||
|
||||
// Emitir SSE para que la UI se actualice
|
||||
sseSend("run.created", {
|
||||
run_id: null,
|
||||
ts: new Date().toISOString(),
|
||||
chat_id: result.chat_id,
|
||||
from: respondedBy || "admin",
|
||||
status: "ok",
|
||||
prev_state: "AWAITING_HUMAN",
|
||||
input: { text: "[human takeover response]" },
|
||||
llm_output: {
|
||||
reply: response,
|
||||
intent: "human_response",
|
||||
next_state: "CART",
|
||||
},
|
||||
tools: [],
|
||||
invariants: { ok: true, checks: [] },
|
||||
final_reply: response,
|
||||
order_id: null,
|
||||
payment_link: null,
|
||||
latency_ms: 0,
|
||||
});
|
||||
|
||||
// Enviar a WhatsApp via Evolution API (si está habilitado)
|
||||
if (isEvolutionEnabled()) {
|
||||
try {
|
||||
await sendTextMessage({ chatId: result.chat_id, text: response });
|
||||
console.log(`[takeovers] Message sent to Evolution for ${result.chat_id}`);
|
||||
} catch (e) {
|
||||
console.error("[takeovers] Evolution send error:", e.message);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[takeovers] Message inserted for ${result.chat_id}`);
|
||||
} catch (e) {
|
||||
console.error("[takeovers] Error inserting message:", e);
|
||||
}
|
||||
}
|
||||
|
||||
// Si hay items para agregar al carrito, actualizar el estado de la conversación
|
||||
if (cartItems && cartItems.length > 0 && result.chat_id) {
|
||||
@@ -132,7 +192,7 @@ export async function handleRespondToTakeover({
|
||||
}));
|
||||
|
||||
order.cart = [...(order.cart || []), ...newCartItems];
|
||||
|
||||
|
||||
// Actualizar estado: cambiar a CART para que el bot retome
|
||||
await upsertConversationState({
|
||||
tenant_id: tenantId,
|
||||
|
||||
Reference in New Issue
Block a user