From 29c014603b3cedfaef458b6c13c23b9079746296 Mon Sep 17 00:00:00 2001 From: Harsh Thakkar Date: Mon, 26 Oct 2026 13:37:30 +0530 Subject: [PATCH] fix(bot): honor delays after gotoFlow --- .../bot/__tests__/e2e/0.0.2-goto-flow.test.ts | 16 +++++++++++++--- packages/bot/src/core/coreClass.ts | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/bot/__tests__/e2e/0.0.2-goto-flow.test.ts b/packages/bot/__tests__/e2e/0.0.2-goto-flow.test.ts index cd22df6c5..34579fdde 100644 --- a/packages/bot/__tests__/e2e/0.0.2-goto-flow.test.ts +++ b/packages/bot/__tests__/e2e/0.0.2-goto-flow.test.ts @@ -238,12 +238,19 @@ testSuite('Debe de continuar el el encadenamiento con procesos async', async ({ //Issue https://github.com/codigoencasa/bot-whatsapp/issues/877 testSuite('Debe respectar el delay del node previo', async ({ database, provider }) => { + const sentAt: number[] = [] + provider.sendMessage = async () => { + sentAt.push(Date.now()) + } + const flowPing = addKeyword(['hi']).addAction(async (_, { flowDynamic, gotoFlow }) => { await flowDynamic('Buenas ping debe espera 1segundo') return gotoFlow(flowBye) }) - const flowBye = addKeyword('ping').addAnswer(`Pong con delay 1 segundo`, { delay: 1000 }) + const flowBye = addKeyword('ping') + .addAnswer(`Pong con delay 1 segundo`, { delay: 1000 }) + .addAnswer(`Segundo pong con delay 1 segundo`, { delay: 1000 }) await createBot({ database, @@ -256,11 +263,14 @@ testSuite('Debe respectar el delay del node previo', async ({ database, provider body: 'hi', }) - await delay(2000) + await delay(3000) const history = parseAnswers(database.listHistory).map((item) => item.answer) assert.is('Buenas ping debe espera 1segundo', history[0]) assert.is('Pong con delay 1 segundo', history[1]) - assert.is(undefined, history[2]) + assert.is('Segundo pong con delay 1 segundo', history[2]) + assert.is(undefined, history[3]) + assert.ok(sentAt[1] - sentAt[0] >= 800, 'gotoFlow debe esperar el delay de la primera respuesta') + assert.ok(sentAt[2] - sentAt[1] >= 800, 'gotoFlow debe esperar el delay entre respuestas') }) testSuite.run() diff --git a/packages/bot/src/core/coreClass.ts b/packages/bot/src/core/coreClass.ts index a4491e523..5f3153e14 100644 --- a/packages/bot/src/core/coreClass.ts +++ b/packages/bot/src/core/coreClass.ts @@ -434,8 +434,6 @@ class CoreClass

extends return } - await delay(flowInstance?.ctx?.options?.delay ?? 0) - const flowTree = flowInstance.toJson() const flowParentId = flowTree[step] @@ -446,6 +444,8 @@ class CoreClass

extends const msgParse = this.flowClass.findSerializeByRef(msg?.ref) const ctxMessage: TContext = { ...msgParse, ...msg } + const delayMs = ctxMessage?.options?.delay ?? this.generalArgs.delay ?? 0 + await delay(delayMs) await this.sendProviderAndSave(from, ctxMessage).then(() => promises.push(ctxMessage)) }