From f5a7de3a003c012e2164e51fff26892cfc3144be Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Fri, 20 Jan 2023 11:58:50 +0100 Subject: [PATCH 1/4] fix(bot): :bug: flowDynamic stranger behaviour --- .gitignore | 1 + packages/bot/core/core.class.js | 25 ++++++------------------- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 1cc3038..9f6dbbc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /node_modules +/packages/repl /packages/*/starters /packages/*/node_modules /packages/*/dist diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index e3efc04..e1e16e4 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -89,14 +89,18 @@ class CoreClass { // 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx const sendFlow = async (messageToSend, numberOrId) => { + // [1 Paso] esto esta bien! + if (prevMsg?.options?.capture) await cbEveryCtx(prevMsg?.ref) + const queue = [] for (const ctxMessage of messageToSend) { const delayMs = ctxMessage?.options?.delay || 0 if (delayMs) await delay(delayMs) QueuePrincipal.enqueue(() => Promise.all([ - this.sendProviderAndSave(numberOrId, ctxMessage), - resolveCbEveryCtx(ctxMessage), + this.sendProviderAndSave(numberOrId, ctxMessage).then( + () => resolveCbEveryCtx(ctxMessage) + ), ]) ) } @@ -139,7 +143,6 @@ class CoreClass { // 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback const resolveCbEveryCtx = async (ctxMessage) => { - if (prevMsg?.options?.capture) return cbEveryCtx(prevMsg?.ref) if (!ctxMessage?.options?.capture) return await cbEveryCtx(ctxMessage?.ref) } @@ -153,17 +156,6 @@ class CoreClass { }) } - if (prevMsg?.ref) resolveCbEveryCtx(prevMsg) - - // 📄 [options: callback]: Si se tiene un callback se ejecuta - //TODO AQUI - // if (!fallBackFlag) { - // if (prevMsg?.options?.capture) cbEveryCtx(prevMsg?.ref) - // for (const ite of this.flowClass.find(body)) { - // if (!ite?.options?.capture) cbEveryCtx(ite?.ref) - // } - // } - // 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa if (!fallBackFlag && prevMsg?.options?.nested?.length) { const nestedRef = prevMsg.options.nested @@ -173,11 +165,6 @@ class CoreClass { msgToSend = this.flowClass.find(body, false, flowStandalone) || [] - // //TODO AQUI - // for (const ite of msgToSend) { - // cbEveryCtx(ite?.ref) - // } - sendFlow(msgToSend, from) return } From 877252bd4a8a7bbbbf083c3ceaeaeb952b0a1828 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Fri, 20 Jan 2023 12:02:01 +0100 Subject: [PATCH 2/4] fix(bot): :bug: flowDynamic stranger behaviour --- packages/bot/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bot/package.json b/packages/bot/package.json index d3f004e..fe542c1 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/bot", - "version": "0.0.66-alpha.0", + "version": "0.0.73-alpha.0", "description": "", "main": "./lib/bundle.bot.cjs", "scripts": { From 7067b4a80b7938ccfaf1ed141a37d645a1a3a062 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Mon, 23 Jan 2023 09:09:16 +0100 Subject: [PATCH 3/4] fix(contexts): :bug: fixed #524 issue --- packages/bot/core/core.class.js | 19 +++++++++++++++++++ .../src/dialogflow-cx/dialogflow-cx.class.js | 2 +- .../src/dialogflow/dialogflow.class.js | 4 ++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index e1e16e4..ea5eff3 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -212,5 +212,24 @@ class CoreClass { this.continue(null, responde.ref) } } + + /** + * Funcion dedicada a enviar el mensaje sin pasar por el flow + * (dialogflow) + * @param {*} messageToSend + * @param {*} numberOrId + * @returns + */ + sendFlowSimple = async (messageToSend, numberOrId) => { + const queue = [] + for (const ctxMessage of messageToSend) { + const delayMs = ctxMessage?.options?.delay || 0 + if (delayMs) await delay(delayMs) + QueuePrincipal.enqueue(() => + this.sendProviderAndSave(numberOrId, ctxMessage) + ) + } + return Promise.all(queue) + } } module.exports = CoreClass diff --git a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js index 25bd2a6..2d0ebd2 100644 --- a/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js +++ b/packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js @@ -117,7 +117,7 @@ class DialogFlowCXContext extends CoreClass { } }) - this.sendFlow(listMessages, from) + this.sendFlowSimple(listMessages, from) } } diff --git a/packages/contexts/src/dialogflow/dialogflow.class.js b/packages/contexts/src/dialogflow/dialogflow.class.js index ebd92bc..6a7cda0 100644 --- a/packages/contexts/src/dialogflow/dialogflow.class.js +++ b/packages/contexts/src/dialogflow/dialogflow.class.js @@ -107,7 +107,7 @@ class DialogFlowContext extends CoreClass { ...customPayload, answer: fields?.answer?.stringValue, } - this.sendFlow([ctxFromDX], from) + this.sendFlowSimple([ctxFromDX], from) return } @@ -115,7 +115,7 @@ class DialogFlowContext extends CoreClass { answer: queryResult?.fulfillmentText, } - this.sendFlow([ctxFromDX], from) + this.sendFlowSimple([ctxFromDX], from) } } From 79cc31a96f6a9836447cc4e6bb1e1521c54183fe Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Mon, 23 Jan 2023 09:14:36 +0100 Subject: [PATCH 4/4] fix(contexts): :bug: fixed #524 issue --- packages/bot/tests/flow.class.test.js | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 packages/bot/tests/flow.class.test.js diff --git a/packages/bot/tests/flow.class.test.js b/packages/bot/tests/flow.class.test.js new file mode 100644 index 0000000..b9c55e2 --- /dev/null +++ b/packages/bot/tests/flow.class.test.js @@ -0,0 +1,29 @@ +const { test } = require('uvu') +const assert = require('uvu/assert') +const FlowClass = require('../io/flow.class') +const MockProvider = require('../../../__mocks__/mock.provider') +const { addKeyword } = require('../index') + +test(`[FlowClass] Probando instanciamiento de clase`, async () => { + const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!') + const flowClass = new FlowClass([MOCK_FLOW]) + assert.is(flowClass instanceof FlowClass, true) +}) + +test(`[FlowClass] Probando find`, async () => { + const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!') + const flowClass = new FlowClass([MOCK_FLOW]) + + flowClass.find('hola') + assert.is(flowClass instanceof FlowClass, true) +}) + +test(`[FlowClass] Probando findBySerialize`, async () => { + const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!') + const flowClass = new FlowClass([MOCK_FLOW]) + + flowClass.findBySerialize('') + assert.is(flowClass instanceof FlowClass, true) +}) + +test.run()