Skip to content

Commit 77c03ce

Browse files
authored
Merge pull request #933 from codigoencasa/dev
build: ⚡ improved
2 parents 3437d7a + 53dc6c1 commit 77c03ce

File tree

9 files changed

+102
-19
lines changed

9 files changed

+102
-19
lines changed

__test__/0.0.2-goto-flow.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ testSuite(`Debe de continuar el el encadenamiento con procesos async`, async ({
235235
assert.is('datos de json', history[3])
236236
assert.is('Digame su *Nombre y apellidos* para reservar su mesa...', history[4])
237237
assert.is('leifer', history[5])
238-
assert.is(undefined, history[96])
238+
assert.is(undefined, history[6])
239239
})
240240

241241
//Issue https://github.com/codigoencasa/bot-whatsapp/issues/877

__test__/0.1.5-case.test.js renamed to __test__/0.1.5-endflow.test.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const { suite } = require('uvu')
22
const assert = require('uvu/assert')
33
const { addKeyword, createBot, createFlow } = require('../packages/bot/index')
44
const { setup, clear, delay } = require('../__mocks__/env')
5+
const { EVENTS } = require('../packages/bot/lib/bundle.bot.cjs')
56

67
const fakeHTTP = async (fakeData = []) => {
78
await delay(50)
@@ -164,4 +165,71 @@ suiteCase(`flowDynamic con capture`, async ({ database, provider }) => {
164165
assert.is('Puedes pasar', getHistory[11])
165166
})
166167

168+
suiteCase(`endFlow desde gotoFlow`, async ({ database, provider }) => {
169+
const flow = addKeyword(['hola'])
170+
.addAnswer('Buenas!', null, async (_, { gotoFlow }) => {
171+
return gotoFlow(flowUsuario)
172+
})
173+
.addAnswer('no debe llegar')
174+
175+
const flowUsuario = addKeyword(EVENTS.ACTION)
176+
.addAction({ ref: `1111111111111111` }, async (_, { flowDynamic, endFlow }) => {
177+
try {
178+
const confirmar = {
179+
data: {
180+
estado: '3',
181+
},
182+
}
183+
if (confirmar === 500) {
184+
return gotoFlow(serverError)
185+
}
186+
if (confirmar.data.estado === '3') {
187+
return endFlow(`Final y no mas`)
188+
}
189+
190+
if (confirmar.data) {
191+
await flowDynamic('ya estas! debe finalizar flow no debe enviar mas mensajes')
192+
return endFlow()
193+
}
194+
} catch (error) {
195+
console.error(error)
196+
}
197+
await flowDynamic('⏳ por favor solo espere a que el asistente responda 🍀🤖...')
198+
})
199+
.addAction({ ref: `22222222222` }, async (_, { flowDynamic }) => {
200+
await flowDynamic('ping pong')
201+
console.log(`🌟🌟🌟🌟`)
202+
})
203+
204+
await createBot({
205+
database,
206+
provider,
207+
flow: createFlow([flow, flowUsuario]),
208+
})
209+
210+
await provider.delaySendMessage(100, 'message', {
211+
from: '000',
212+
body: 'hola',
213+
})
214+
215+
await delay(5000)
216+
const getHistory = database.listHistory.map((i) => i.answer)
217+
assert.is('Buenas!', getHistory[0])
218+
assert.is('__capture_only_intended__', getHistory[1])
219+
assert.is('__capture_only_intended__', getHistory[2])
220+
assert.is('Final y no mas', getHistory[3])
221+
assert.is(undefined, getHistory[4])
222+
// assert.is('this is not email value', getHistory[1])
223+
// assert.is(MOCK_VALUES[0], getHistory[2])
224+
// assert.is('[email protected]', getHistory[3])
225+
// assert.is('Gracias por tu email se ha validado de manera correcta', getHistory[4])
226+
// assert.is(MOCK_VALUES[1], getHistory[5])
227+
// assert.is(MOCK_VALUES[2], getHistory[6])
228+
// assert.is('20', getHistory[7])
229+
// assert.is('Ups creo que no eres mayor de edad', getHistory[8])
230+
// assert.is('18', getHistory[9])
231+
// assert.is('Bien tu edad es correcta!', getHistory[10])
232+
// assert.is('Puedes pasar', getHistory[11])
233+
})
234+
167235
suiteCase.run()

__test__/0.2.0-case.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ suiteCase(`Encadenanos addAction con captures and gotoFlow`, async ({ database,
9999
.addAction({ ref: `1111111111111111111` }, async (ctx, { flowDynamic }) => {
100100
await flowDynamic(`Chao!`)
101101
})
102+
102103
await createBot({
103104
database,
104105
flow: createFlow([flujoPrincipal, flujoSegundario, flujoTercero]),

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bot-whatsapp/root",
3-
"version": "0.1.33",
3+
"version": "0.1.34",
44
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
55
"main": "app.js",
66
"private": true,

packages/bot/core/core.class.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,21 +174,33 @@ class CoreClass extends EventEmitter {
174174
// 📄 Finalizar flujo
175175
const endFlow =
176176
(flag) =>
177-
async (messages = null) => {
177+
async (messages = null, options = { fromGotoFlow: false, end: false }) => {
178178
flag.endFlow = true
179179
endFlowFlag = true
180-
if (typeof messages === 'string') {
180+
181+
if (typeof messages === 'string' || messages === null) {
181182
await this.sendProviderAndSave(from, createCtxMessage(messages))
183+
clearQueue()
184+
return
182185
}
183186

184187
// Procesos de callback que se deben execute como exepciones
185188
if (Array.isArray(messages)) {
189+
// console.log('options.fromGotoFlow', messages)
190+
191+
// const indexLimit = messages.findIndex((m) => m.ref === inRef)
186192
for (const iteratorCtxMessage of messages) {
187-
await resolveCbEveryCtx(iteratorCtxMessage, {
188-
omitEndFlow: true,
193+
// console.log(`Counter ${indexLimit}`)
194+
// if(indexLimit !== -1 && counterFor === indexLimit) break
195+
const scopeCtx = await resolveCbEveryCtx(iteratorCtxMessage, {
196+
omitEndFlow: options.fromGotoFlow,
189197
idleCtx: !!iteratorCtxMessage?.options?.idle,
190198
triggerKey: iteratorCtxMessage.keyword.startsWith('key_'),
191199
})
200+
201+
if (scopeCtx?.endFlow) break
202+
203+
// options.fromGotoFlow = false
192204
}
193205
}
194206
clearQueue()
@@ -315,13 +327,10 @@ class CoreClass extends EventEmitter {
315327
const msgParse = this.flowClass.findSerializeByRef(msg?.ref)
316328

317329
const ctxMessage = { ...msgParse, ...msg }
318-
319-
// Enviar el mensaje al proveedor y guardarlo
320330
await this.sendProviderAndSave(from, ctxMessage).then(() => promises.push(ctxMessage))
321331
}
322332

323-
await endFlow(flag)(promises)
324-
333+
await endFlow(flag)(promises, { fromGotoFlow: true, ...{ end: endFlowFlag } })
325334
return
326335
}
327336

@@ -377,13 +386,16 @@ class CoreClass extends EventEmitter {
377386
`[ATENCION IDLE]: La función "idle" no tendrá efecto a menos que habilites la opción "capture:true". Por favor, asegúrate de configurar "capture:true" o elimina la función "idle"`
378387
)
379388
}
389+
390+
// if(endFlowFlag) return
391+
380392
if (ctxMessage?.options?.idle) {
381-
await cbEveryCtx(ctxMessage?.ref, { ...options, startIdleMs: ctxMessage?.options?.idle })
382-
return
393+
const run = await cbEveryCtx(ctxMessage?.ref, { ...options, startIdleMs: ctxMessage?.options?.idle })
394+
return run
383395
}
384396
if (!ctxMessage?.options?.capture) {
385-
await cbEveryCtx(ctxMessage?.ref, options)
386-
return
397+
const run = await cbEveryCtx(ctxMessage?.ref, options)
398+
return run
387399
}
388400
}
389401

@@ -414,7 +426,7 @@ class CoreClass extends EventEmitter {
414426
inRef,
415427
fallBack: fallBack(flags),
416428
flowDynamic: flowDynamic(flags, inRef, options),
417-
endFlow: endFlow(flags),
429+
endFlow: endFlow(flags, inRef),
418430
gotoFlow: gotoFlow(flags),
419431
}
420432

@@ -452,7 +464,7 @@ class CoreClass extends EventEmitter {
452464
}
453465

454466
await runContext()
455-
return
467+
return { ...flags }
456468
}
457469

458470
const exportFunctionsSend = async (cb = () => Promise.resolve()) => {

packages/bot/io/flow.class.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ class FlowClass {
1212

1313
constructor(_flow) {
1414
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
15-
this.flowRaw = this.addEndsFlows(_flow)
15+
// this.flowRaw = this.addEndsFlows(_flow)
16+
this.flowRaw = _flow
1617

1718
this.allCallbacks = flatObject(_flow)
1819

packages/bot/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bot-whatsapp/bot",
3-
"version": "0.0.204-alpha.0",
3+
"version": "0.0.216-alpha.0",
44
"description": "",
55
"main": "./lib/bundle.bot.cjs",
66
"scripts": {

starters/apps/base-baileys-json/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"description": "",
55
"main": "app.js",
66
"scripts": {
7+
"prestart": "npx eslint . --no-ignore",
78
"pre-copy": "cd .. && npm run copy.lib base-baileys-json",
89
"start": "node app.js"
910
},

starters/apps/base-baileys-memory/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "",
55
"main": "app.js",
66
"scripts": {
7-
"prestart": "npx eslint .",
7+
"prestart": "npx eslint . --no-ignore",
88
"pre-copy": "cd .. && npm run copy.lib base-baileys-memory",
99
"start": "node app.js"
1010
},

0 commit comments

Comments
 (0)