codigoencasa / builderbot

🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource

Home Page:https://www.builderbot.app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ERROR GOTOFLOWS ANIDADOS [🐛]

Gregoriotecnico opened this issue · comments

¿Que versión estas usando?

v2

¿Sobre que afecta?

Flujo de palabras (Flow)

Describe tu problema

Pasar de un flujo mediante gotoFlow con más de un gotoFlow no funciona (creo que desde que se añadió el tema de la dependencia circular)
El error se vé:
Flujo 1 -> (gotoflow: flujo 2) PERFECTO
Flujo 2 -> (gotoflow: flujo 3) NO LO HACE

Este sistema ya lo tenia yo realizado en bots ateriores funcionando perfectamente. He cambiado la funcion del gotoFlow(interna) de uno de mis bots antiguos hacia este ejemplo y funciona perfectamente.

image

Reproducir error

No response

Información Adicional

No response

Puedes compartir el ejemplo de los gotoFlows anidados a que te refieres?

IMG-20231109-WA0002_1699604368695
Estoy fuera de casa, te mando una captura que tenía de ayer.
Falta el primer flujo que deriva a "flowReserva" (este lo hace bien)
El que hace mal es el que ves en el ejemplo que te adjunto:
Hago gotoFlow hacia "flowReservaNuevoCliente" pero nunca lo hace.

Cuando llegue a casa te envío el otro flujo, pero simpleme te es como si hicieras un gotoFlow desde un events.welcome

main.js (Primer gotoFlow que lo hace correctamnte)

const { addKeyword, addAnswer, EVENTS } = require("@bot-whatsapp/bot");
const cron = require("node-cron");
const { activarDiariamente } = require("./utils/activarDiariamente");
const consultarBlacklist = require("./utils/consultarBlacklist.js");
const conexionSheets = require("./services/conexionSheets.js");
const flowBienvenida = require("./flows/flow.bienvenida.js");
const { flowMenu } = require("./flows/flow.menu.js");
const flowHorario = require("./flows/flow.horario.js");
const flowZona = require("./flows/flow.zona.js");
const flowCarta = require("./flows/flow.carta.js");
const  {flowReserva}  = require("./flows/flow.reserva.js");
let ultimaEjecucionSheet = 0;
let ultimaEjecucionVacaciones = 0;

const flowMain = addKeyword(EVENTS.WELCOME).addAction(async (ctx, ctxFn) => {
  try {
    //TODO - LEEMOS SHEETS PARA LOS MENSAJES
    const tiempoActual = Date.now();
    if (tiempoActual - ultimaEjecucionSheet >= 30000) {
      // Leemos sheets cada 30 segundos
      await conexionSheets(ctxFn);
      ultimaEjecucionSheet = tiempoActual;
    }
    //TODO - LEEMOS MYSQL PARA TRAER ESTADO DEL CHATBOT
    const estadoChatbot = await ctxFn.extensions.mesas.estadoChatbot();
    const consultaConfiguracion =
      await ctxFn.extensions.mesas.consultaConfiguracion();
    ctxFn.extensions.json.escribirEnJson({
      carta: consultaConfiguracion[0].CartaURL,
      mesasExterior: consultaConfiguracion[0].Mesas_exterior,
      mesasInterior: consultaConfiguracion[0].Mesas_Interior,
      personasXmesa: consultaConfiguracion[0].PersonasXmesas
    });
  

    //TODO - INICIAMOS LA DERIVACION A FLUJOS
    const resUsuario = ctx.body.toLowerCase().trim();

    switch (resUsuario) {
     
      case "reserva":
      case "reservar":
      case "reservar mesa":
      case "reserva mesa":
      case "🗓️ *reservar mesa*":
        return ctxFn.gotoFlow(flowReserva);

      default:
        return ctxFn.gotoFlow(flowBienvenida);
    }
  } catch (e) {
    console.log("Error en el flowMain: ", e);
  }
});

module.exports = { flowMain };

flow.reserva.js (Estan dos flujos, flowReserva y flowReservaNuevoCliente)

const { addKeyword, EVENTS, addAction } = require("@bot-whatsapp/bot");
const flowReservaNuevoCliente = require("./subflowreserva");

const flowReserva = addKeyword("__FLOWRESERVA__")
  .addAction(async (ctx, ctxFn) => {
    ctxFn.flowDynamic(ctxFn.extensions.json.leerCampoJson("menuReserva"));
  })
  .addAction(async (ctx, { extensions, gotoFlow }) => {
    const buscarCliente = await extensions.mesas.buscarCliente(
      ctx.from.slice(2)
    );
    if (!buscarCliente) {
      console.log("entra al if");

      return gotoFlow(flowReservaNuevoCliente);
    }
  });

const flowReservaNuevoCliente = addKeyword("12345").addAnswer(
  "Digame su *Nombre y apellidos* para reservar su mesa...",
  { capture: true },
  async (ctx, { state }) => {
    console.log("entro al answer");

    state.update({ Nombre: ctx.body, Telefono: ctx.from.slice(2) });
  }
);

module.exports = { flowReserva, flowReservaNuevoCliente };

Evidentemente en el app.js estan implementados los 3 flujos con sus respectivas rutas

Siguiente release ya esta fixed.

https://github.com/codigoencasa/bot-whatsapp/blob/6edf3730e143c58b3bb36e1d748a6730e6392168/__test__/0.0.2-goto-flow.test.js#L177

Gracias !! casualmente me tope con el mismo issue

un gotoFlow no funciona cuando ya vienes de otro

Siguiente release ya esta fixed.
https://github.com/codigoencasa/bot-whatsapp/blob/6edf3730e143c58b3bb36e1d748a6730e6392168/__test__/0.0.2-goto-flow.test.js#L177

Gracias !! casualmente me tope con el mismo issue

un gotoFlow no funciona cuando ya vienes de otro

Peudes ir probando con este comando instalas la version que se viene
Dejo un video relacionado:

https://www.youtube.com/watch?v=veybTEYGir0

npm i @bot-whatsapp/bot@dev @bot-whatsapp/cli@dev @bot-whatsapp/database@dev @bot-whatsapp/provider@dev @bot-whatsapp/portal@dev

Disculpen al día de hoy tengo entendido que ese cambio ya esta añadido a la última liberación sin embargo, pruebo el ejemplo que mencionas en bot-whatsapp/test/0.0.2-goto-flow.test.js y no entra al addAction del flowReserva, no imprime Flow de la reserva 1 y mucho menos el 2, para verificarlo borre los node_modules e incluso instale las dependencias de desarrollo que mencionas pero sigue pasando lo mismo, por favor pueden indicarme si hay algo que esté haciendo mal.
img

Creo que no se ha solucionado todavia dado que un ejemplo tan siemple como este no funciona

Captura
Captura2

Creo que no se ha solucionado todavia dado que un ejemplo tan siemple como este no funciona

Captura Captura2

Debes colocar todos los flows en el array de

createFlow([test_gotoFlow, test_gotoFlow_2, test_gotoFlow_3])

Disculpen al día de hoy tengo entendido que ese cambio ya esta añadido a la última liberación sin embargo, pruebo el ejemplo que mencionas en bot-whatsapp/test/0.0.2-goto-flow.test.js y no entra al addAction del flowReserva, no imprime Flow de la reserva 1 y mucho menos el 2, para verificarlo borre los node_modules e incluso instale las dependencias de desarrollo que mencionas pero sigue pasando lo mismo, por favor pueden indicarme si hay algo que esté haciendo mal. img

Revisa el mensaje del compañero @jhonnymosquera

@leifermendez Muchas gracias, me gustaria ayudar con la documentasion en el sitio web pero no se como, mientras dejo la solucion mas clara aqui a quien pueda servirle

solucion1
solucion2

@jhonnymosquera para evitar el uso de ese uuid usa EVENT.ACTION que tecnicamente hace algo similar con el mismo proposito. ya estamos trabajando en una nueva doc esta en construccion pero puedes ir aportando. https://builderbot.vercel.app/methods#goto-flow

@jhonnymosquera para aporta a la doc debes ir a https://github.com/codigoencasa/documentation

  • hacer Fork del proyecto
  • Luego clonar el proyecto desde tu Fork
  • Luego en local instalar dependencias y pnpm run dev
  • Luego hacer commit push y pull request