Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[🐛] Bug un flujo no respeta delay si entró por medio de gotoFlow #877

Open
KichanCrazy opened this issue Oct 4, 2023 · 9 comments
Open
Assignees
Labels
bug Something isn't working next-release

Comments

@KichanCrazy
Copy link

¿Que versión estas usando?

v2

¿Sobre que afecta?

Flujo de palabras (Flow)

Describe tu problema

Cuando se entra a un flujo por medio de gotoFlow, se ignora la opción de delay que tiene un mensaje y se envía de inmediato.

Reproducir error

No response

Información Adicional

Ejemplo de codigo:

archivo20.js

const { addKeyword, EVENTS } = require("@bot-whatsapp/bot");

const archivo21 = require("./archivo21");

module.exports = addKeyword("testarchivo20").addAnswer('entraste a archivo 20\n presiona 1 para ir archivo 21', 
{ capture: true }, async(ctx, { gotoFlow }) => {
    const answerMenu = ctx.body.trim().toString()
    switch (answerMenu.toString()) {
        case '1':
          return gotoFlow(archivo21)
          break
    }
})

archivo21.js

const { addKeyword, EVENTS } = require("@bot-whatsapp/bot");

module.exports = addKeyword("testarchivo21")
.addAnswer("entraste a archivo 21, 5 segundos de delay",{ delay: 5000 })
.addAnswer("otros 5 segundos de delay", { delay: 5000 })

**Problema:

Si entras directamente al flujo del archivo21.js si se respeta el delay de cada addAnswer ( o en su caso si se usa la función delay() en el callback) pero cuando entras al flujo por medio del gotoflow que esta en el archivo20.js los mensajes no respetan el delay y se envían al instante uno tras otro.**

@KichanCrazy KichanCrazy added the bug Something isn't working label Oct 4, 2023
@leifermendez leifermendez self-assigned this Nov 17, 2023
leifermendez added a commit that referenced this issue Nov 17, 2023
leifermendez added a commit that referenced this issue Nov 17, 2023
@leifermendez
Copy link
Member

Solucionado next-release

@Yenyil
Copy link

Yenyil commented Nov 19, 2023

Hola!
he actualizado a la versión dev pero aun si presentando el problema

@Yenyil
Copy link

Yenyil commented Nov 19, 2023

`const flowtest3 = addKeyword("test3")
.addAction((_, { flowDynamic }) => {
const msg = [
"Menu",
"1️⃣ Test1",
"2️⃣ Test2",
"3️⃣ Test3",
"",
"Escribe el numero de la opcion",
];
return flowDynamic(msg.join("\n"));
})
.addAnswer(
"Seleccione una opción",
{ capture: true, delay: 1000 },
async (ctx, { fallBack, flowDynamic, endFlow }) => {
if (!["1", "2", "3"].includes(ctx.body)) {
console.log("Entro en la validación");
return fallBack("opcion no valida");
}
console.log("Finaliza");
return endFlow;
}
);

const flowtest2 = addKeyword("test2")
.addAction((, { flowDynamic }) => {
return flowDynamic("2) Test2");
})
.addAction(async (
, { gotoFlow }) => {
/* const { flowtest3 } = require("flowtest"); */
await gotoFlow(flowtest3);
});

const flowtest1 = addKeyword("test1")
.addAction((, { flowDynamic }) => {
return flowDynamic("1) Test1");
})
.addAction(async (
, { gotoFlow }) => {
await gotoFlow(flowtest3);
});
Test1
Test2
`

@leifermendez
Copy link
Member

`const flowtest3 = addKeyword("test3") .addAction((_, { flowDynamic }) => { const msg = [ "Menu", "1️⃣ Test1", "2️⃣ Test2", "3️⃣ Test3", "", "Escribe el numero de la opcion", ]; return flowDynamic(msg.join("\n")); }) .addAnswer( "Seleccione una opción", { capture: true, delay: 1000 }, async (ctx, { fallBack, flowDynamic, endFlow }) => { if (!["1", "2", "3"].includes(ctx.body)) { console.log("Entro en la validación"); return fallBack("opcion no valida"); } console.log("Finaliza"); return endFlow; } );

const flowtest2 = addKeyword("test2") .addAction((, { flowDynamic }) => { return flowDynamic("2) Test2"); }) .addAction(async (, { gotoFlow }) => { /* const { flowtest3 } = require("flowtest"); */ await gotoFlow(flowtest3); });

const flowtest1 = addKeyword("test1") .addAction((, { flowDynamic }) => { return flowDynamic("1) Test1"); }) .addAction(async (, { gotoFlow }) => { await gotoFlow(flowtest3); }); Test1 Test2 `

esto se encuentra en la version dev, debes de ejecutar este comando para poder tener la version adelantada

npm i @bot-whatsapp/bot@dev @bot-whatsapp/cli@dev @bot-whatsapp/database@dev @bot-whatsapp/provider@dev @bot-whatsapp/portal@dev

@Yenyil
Copy link

Yenyil commented Nov 19, 2023

ya tengo "dev", aun asi sigue presente el problema

"@adiwajshing/baileys": "4.4.0",
"@bot-whatsapp/bot": "^0.0.214-alpha.0",
"@bot-whatsapp/cli": "^0.0.151-alpha.0",
"@bot-whatsapp/database": "^0.0.128-alpha.0",
"@bot-whatsapp/portal": "^0.0.86-alpha.0",
"@bot-whatsapp/provider": "^0.0.153-alpha.0",
"@whiskeysockets/baileys": "^6.5.0",
"dotenv": "^16.0.3",
"wa-sticker-formatter": "4.3.2"

@leifermendez
Copy link
Member

leifermendez commented Nov 19, 2023

Veo que tu problema radica es en el hecho de que no tienes declarado los flujos como procesos asincronos:

const flowtest3 = addKeyword("test3")
    .addAction(async (_, { flowDynamic }) => {
        const msg = [
            "Menu",
            "1️⃣ Test1",
            "2️⃣ Test2",
            "3️⃣ Test3",
            "",
            "Escribe el numero de la opcion",
        ];
        await flowDynamic(msg.join("\n"));
    })
    .addAnswer(
        "Seleccione una opción",
        { capture: true, delay: 1000 },
        async (ctx, { fallBack, flowDynamic, endFlow }) => {
            if (!["1", "2", "3"].includes(ctx.body)) {
                console.log("Entro en la validación");
                return fallBack("opcion no valida");
            }
            console.log("Finaliza");
            return endFlow;
        }
    );

const flowtest2 = addKeyword("test2")
    .addAction(async (_, { flowDynamic }) => {
        await flowDynamic("2) Test2");
    }).addAction(async (_, { gotoFlow }) => {
        /* const { flowtest3 } = require("flowtest"); */
        return gotoFlow(flowtest3);
    });

const flowtest1 = addKeyword("test1")
    .addAction(async (_, { flowDynamic }) => {
        await flowDynamic("1) Test1");
    })
    .addAction(async (_, { gotoFlow }) => {
        return gotoFlow(flowtest3);
    });

Estoy probando con ese codigo y funciona correcto! Te recomiendo usar eslint con el plugin diseñador para el bot y evitar que estas cosas te ocurran te comaparto mi package

{
    "name": "base-bailey-json",
    "version": "1.0.0",
    "description": "",
    "main": "app.js",
    "scripts": {
        "start": "npx eslint . --no-ignore && node app.js"
    },
    "keywords": [],
    "dependencies": {
        "@bot-whatsapp/bot": "latest",
        "@bot-whatsapp/cli": "latest",
        "@bot-whatsapp/database": "latest",
        "@bot-whatsapp/provider": "latest",
        "@bot-whatsapp/portal": "latest",
        "mime-types": "2.1.35",
        "@whiskeysockets/baileys": "6.5.0",
        "wa-sticker-formatter": "4.4.4",
        "cache-manager": "5.2.4"
    },
    "devDependencies": {
        "eslint-plugin-bot-whatsapp": "latest",
        "eslint": "^8.52.0"
    },
    "author": "",
    "license": "ISC"
}

@Yenyil
Copy link

Yenyil commented Nov 19, 2023

He creado otro proyecto, instale la version dev, copie y peque el codigo que me has proporcionado realize pruebas y sigo recibiendo el mismo comportamiento.
adjunto foto y mi codigo:
TestBot1_new

App.json
package.json

@leifermendez
Copy link
Member

He creado otro proyecto, instale la version dev, copie y peque el codigo que me has proporcionado realize pruebas y sigo recibiendo el mismo comportamiento. adjunto foto y mi codigo: TestBot1_new

App.json package.json

Ya entiendo cual era tu detalle no lo entendí desde el inicio de esa manera, este issue no esta relacionado con eso.
Lo revisaré, de igualmanera es facil de corregir si haces esto:

const flowtest3 = addKeyword("test3")
    .addAction(async (_, { flowDynamic }) => {
        const msg = [
            "Menu",
            "1️⃣ Test1",
            "2️⃣ Test2",
            "3️⃣ Test3",
            "",
            "Escribe el numero de la opcion",
        ];
        await flowDynamic(msg.join("\n"));
        await flowDynamic("Seleccione una opción")
    })
    .addAction(
        { capture: true },
        async (ctx, { fallBack, flowDynamic, endFlow }) => {
     
            if (!["1", "2", "3"].includes(ctx.body)) {
                console.log("Entro en la validación");
                return fallBack("opcion no valida");
            }
            console.log("Finaliza");
            return endFlow;
        }
    );

@NRotili
Copy link

NRotili commented Sep 20, 2024

Buen día, existe alguna novedad respecto a esta issue?

El problema aun persiste, al acceder a un flow desde un gotoFlow los delay no funcionan enviándose de inmediato uno detrás del otro sin esperar el tiempo correspondiente.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working next-release
Projects
None yet
Development

No branches or pull requests

4 participants