codigoencasa / bot-whatsapp

🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource (Typescript Version Pronto)

Home Page:https://bot-whatsapp.netlify.app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[🐛] gotoFlow no hace capture ni entra en la funcion de callBack

decode9 opened this issue · comments

¿Que versión estas usando?

v2

¿Sobre que afecta?

Flujo de palabras (Flow)

Describe tu problema

Tengo problemas al realizar una captura utilizando goToFlow, estuve revisando el codigo fuente y no se si se deba que al realizar el goToFlow realiza un endFlow al final de la funcion

  const gotoFlow =
            (flag) =>
            async (flowInstance, step = 0) => {
                const promises = []
                flag.gotoFlow = true

                if (!flowInstance?.toJson) {
                    printer([
                        `[POSSIBLE_CIRCULAR_DEPENDENCY]: Se ha detectado una dependencia circular.`,
                        `Para evitar problemas, te recomendamos utilizar 'require'('./ruta_del_flow')`,
                        `Ejemplo:  gotoFlow(helloFlow) -->  gotoFlow(require('./flows/helloFlow.js'))`,
                        `[INFO]: https://bot-whatsapp.netlify.app/docs/goto-flow/`,
                    ])
                    return
                }

                await delay(flowInstance?.ctx?.options?.delay ?? 0)

                const flowTree = flowInstance.toJson()

                const flowParentId = flowTree[step]

                const parseListMsg = await this.flowClass.find(flowParentId?.ref, true, flowTree)

                for (const msg of parseListMsg) {
                    const msgParse = this.flowClass.findSerializeByRef(msg?.ref)

                    const ctxMessage = { ...msgParse, ...msg }

                    // Enviar el mensaje al proveedor y guardarlo
                    await this.sendProviderAndSave(from, ctxMessage).then(() => promises.push(ctxMessage))
                }

                await endFlow(flag)(promises)

                return
            }

Mi Codigo es el siguiente

import whatsappBot from "@bot-whatsapp/bot";
import data from "../../data/availability.json" assert { type: "json" };
import rooms from "../../data/roomsAvailable.json" assert { type: "json" };
import { GoodbyeFlow } from "../getStarted/endFlow.js";

const { addKeyword } = whatsappBot;

export const createFlowSearch = (hotels) => {
  return whatsappBot.addKeyword(['FLOW_SEARCH']).addAnswer(
    [
      'Hoteles disponibles',
      ...hotels.map((hotel) => {
        return `👉 ${hotel["Hotel Name"]}`
      }),
      "\n Indique el hotel deseado",
    ],
    { capture: true },
    (ctx, { fallBack, gotoFlow }) => {

      console.log("Mensaje entrante: ", ctx.body);
    }
  )
}

export const flowCotizar = addKeyword("1").addAnswer(
  [
    "Elige entre las siguientes ciudades:",
    "👉 *New York*",
    "👉 *Los Angeles*",
    "👉 *Chicago*",
    "👉 *San Francisco*",
    "👉 *Miami*",
    "👉 *Las Vegas*",
    "👉 *Orlando*",
    "👉 *Seattle*",
    "👉 *Boston*",
    "👉 *Washington*",

    "\n*0* Para volver al menú principal.",
  ],
  { capture: true },
  async (ctx, { fallBack, gotoFlow, flowDynamic }) => {

    const result = data.filter((hotel) => hotel.City === ctx.body);

    if (result.length === 0) {
      return fallBack();
    }

    await gotoFlow(createFlowSearch(result))
  },
  [GoodbyeFlow]
)

Una captura de la conversacion
image

Captura de la consola donde no muestra el console log de Mensaje entrante:

image

Si utilizo dicho flow como un nested si entra en la funcion que hace la captura de datos, pero no lo hace cuando utilizo gotoFlow.

Dependencias utilizadas

  "@bot-whatsapp/bot": "latest",
    "@bot-whatsapp/cli": "latest",
    "@bot-whatsapp/database": "latest",
    "@bot-whatsapp/portal": "latest",
    "@bot-whatsapp/provider": "latest",

Si necesitan alguna informacion adicional a la orden, muchas gracias.

Reproducir error

No response

Información Adicional

No response

Lo pudiste solucionar tengo el mismo error :(

¿Alguna novedad sobre esta ISSUE?