builderbot icon indicating copy to clipboard operation
builderbot copied to clipboard

[🐛] Las palabras claves de inicio se activan si se ponen entre la conversación de los flujos

Open goldentgd opened this issue 1 year ago • 2 comments

¿Que versión estas usando?

v2

¿Sobre que afecta?

Flujo de palabras (Flow)

Describe tu problema

Cuando un usuario escribe una palabra clave (Key_Words), inicia el flujo, pero si el usuario pone un hola en cualquier parte de la conversación, se traba y vuelve a entrar al inicio y no continua el flujo, esta es una parte del flujo principal:

const KEY_WORDS = ['hola', 'hi', 'buenas tardes', 'buen dia', 'buenos días', 'buenas noches']; const MSG_INITIAL = ['Bienvenido(a)']; const MSG_RFC = ['¿Me podría proporcionar su RFC?']; const MSG_CLIENTE = ['¿Me podría proporcionar su grupo de cliente?']; const MSG_OPTIONS = ['Escribe un mensaje con la palabra o número resaltado en el menú.']; const MSG_OPTIONS_ERROR = 'Opción no valida, seleccione la opción correcta'; const MSG_VALIDATERFC = ['Su número de RFC es: '] const MSG_VALIDATE = ['Su número de Grupo de cliente es: '] const MSG_ERRORRFC = 'El RFC es incorrecto'; const MSG_ERRORCLIENTE = 'El Grupo de cliente es incorrecto';

let clienteInfo = {};

const initialFlow = addKeyword(KEY_WORDS) .addAnswer(MSG_INITIAL, null, async(ctx, ctxFn) => { await getParameterGlobal("MIN-INAC").then(data => { start(ctx, ctxFn, data[0].value); saveState(ctxFn, ctx, MSG_INITIAL) }); }) .addAnswer(MSG_RFC, {capture:true}, async(ctx, ctxFn) => { const resultado = await validateText(ctx); if(resultado.error) { ctxFn.flowDynamic("Favor de proporcionar una información correcta"); return ctxFn.fallBack(resultado.message); } const rfcInput = ctx.body.trim().toUpperCase(); clienteInfo.rfc = rfcInput; await getCliente(clienteInfo.grupoCliente, clienteInfo.rfc).then(cliente => { if (cliente.error) { console.error('Error encontrado:', cliente.mensaje); return ctxFn.fallBack(MSG_ERRORRFC); } else { saveOrderState(ctx.body.trim(), ctxFn.state); const estRFC = MSG_VALIDATERFC + cliente.cliente["VAT Registration No_"]; ctxFn.flowDynamic(estRFC); var data = ctxFn.state.getMyState()?.history || {}; data.cliente = cliente; ctxFn.state.update({ history: data }); saveState(ctxFn, null, estRFC); } }) await saveState(ctxFn, null, MSG_RFC); await saveState(ctxFn, ctx, null) }) .addAnswer(MSG_CLIENTE, {capture:true}, async(ctx, ctxFn) => { const resultado = await validateText(ctx); if(resultado.error) { ctxFn.flowDynamic("Favor de proporcionar una información correcta"); return ctxFn.fallBack(resultado.message); } const grupoClienteInput = ctx.body.trim().toUpperCase(); clienteInfo.grupoCliente = grupoClienteInput; //saveState(ctxFn, null, 'Grupo de Cliente'); await getCliente(clienteInfo.grupoCliente, clienteInfo.rfc).then(cliente => { if (cliente.error) { console.error('Error encontrado:', cliente.mensaje); return ctxFn.fallBack(MSG_ERRORCLIENTE); } else { if (cliente.cliente["Grupo Cliente"] !== clienteInfo.grupoCliente) { console.error('Error: Grupo de Cliente no coincide con el RFC'); return ctxFn.fallBack(MSG_ERRORCLIENTE); }
saveOrderState(ctx.body.trim(), ctxFn.state); const estCliente = MSG_VALIDATE + cliente.cliente["Grupo Cliente"]; const estName = 'Bienvenido(a) ' + cliente.cliente["Name"].trim() + ''; const datosCliente = ${estCliente}\r\n${estName}; var data = ctxFn.state.getMyState()?.history || {}; data.cliente = cliente; ctxFn.state.update({ history: data });

            ctxFn.flowDynamic(datosCliente);

            saveState(ctxFn, null, estCliente);
            saveState(ctxFn, null, estName);
        }
    });
    await saveState(ctxFn, null, MSG_CLIENTE);
    await saveState(ctxFn, ctx, null)
})

Reproducir error

No response

Información Adicional

Estoy usando builderbot y Baileys como proveedor, así se ve en whatsapp al poner hola en lugar de un RFC me activa de nuevo el flujo y se queda trabado y ya no pasa de ahí al menos que reinicie el sistema de nuevo: [28/08/2024 10:55 a. m.]usuario: Buenos días [28/08/2024 10:55 a. m.]Chat : Bienvenido(a), soy tu agente virtual [28/08/2024 10:55 a. m.]Chat: ¿Me podría proporcionar su RFC? [28/08/2024 10:56 a. m.] usuario: Hola usuario: Hola [28/08/2024 10:56 a. m.] Chat: El RFC es incorrecto [28/08/2024 10:56 a. m.] Chat: Bienvenido(a), soy tu agente virtual

Este es otro ejemplo de como se ve en whatsapp y se traba después del primer hola y ya no funciona, se cicla: error en ciclo

goldentgd avatar Aug 28 '24 18:08 goldentgd

Buenas eso lo puedes controlar con la propiedad sensitive true or false https://www.builderbot.app/en/add-functions#sensitive

leifermendez avatar Sep 14 '24 13:09 leifermendez

Otra forma de solucionarlo es validad la respuesta del usuario, en ctx.body llega la respuesta, validas si lo que te respondio concuerda con algun flujo que debe dispararse, ejemplo: un if o switch con los flujos habilitados, usando gotoFlow puedes enviar al usuario al flujo que sea correcto.

ozzyoss77 avatar Sep 26 '24 12:09 ozzyoss77

¿Alguna novedad sobre esta ISSUE?

github-actions[bot] avatar Nov 25 '24 22:11 github-actions[bot]