codigoencasa / builderbot

🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource
https://www.builderbot.app
MIT License
2.41k stars 826 forks source link

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

Closed decode9 closed 8 months ago

decode9 commented 11 months ago

¿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

joomoodle commented 10 months ago

Lo pudiste solucionar tengo el mismo error :(

github-actions[bot] commented 8 months ago

¿Alguna novedad sobre esta ISSUE?

jrangelardila commented 1 month ago

Exactamente el mismo problema.....

joomoodle commented 1 month ago

Lo que deben de hacer es declarar todos los flujos en el array proncipal a mi me funciono