codigoencasa / bot-whatsapp

🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource (Typescript Version Pronto)
https://bot-whatsapp.netlify.app
MIT License
2.32k stars 801 forks source link

[🐛] Al usar gotoFlow lanza error Column 'refSerialize' cannot be null #871

Closed ric98esley closed 11 months ago

ric98esley commented 11 months ago

¿Que versión estas usando?

v2

¿Sobre que afecta?

Base de datos

Describe tu problema

Al usar gotoFlow la base de datos lanza una excepción y detiene el proceso de node

Reproducir error

No response

Información Adicional

Version de node

18.16.1

Categorias

const flowMostrarCategorias = addKeyword([
  'categorias',
  'categoria',
  'categorías',
  'categoría',
])
  .addAnswer(
    'Estas son las categorías disponibles:',
    null,
    async (ctx, { flowDynamic }) => {
      const data = await getCategories({});
      const mapeoDeLista = data.map((item) => `*${item.body}*`).join(', ');
      flowDynamic(mapeoDeLista);
    }
  )
  .addAnswer(
    'Elige una de ellas',
    {
      capture: true,
    },
    async (ctx, { state }) => {
      try {
        const category = ctx.body;
        await updateState(state, { category });

      } catch (error) {
        console.error(error)
      }
    }
  ).addAction(async(ctx, {gotoFlow}) => {
    try {
      gotoFlow(flowBuscarProducto) // aqui se presenta el error
    } catch (error) {
      console.error(error)
    }

  });

Productos

const flowBuscarProducto = addKeyword(['producto', 'productos'])
  .addAnswer(
    'Por favor cuéntanos que estas buscando:',
    {
      capture: true,
    },
    async (ctx, { state }) => {
      const search = ctx.body;
      await updateState(state, { search });
    }
  )
  .addAnswer(
    'Estos son los productos disponibles',
    null,
    async (ctx, { state, flowDynamic }) => {
      try {
        const queries = await state.getMyState();
        const products = await listProducts({...queries});
        const mapedProducts = products.map((product) => ({
          body: `*id:* *${product.id}* \n *Nombre:* ${product.name} \n *Precio:* ${product.price} \n *Descripción:* ${product.description} \n`,
          media: product.image,
        }));
        flowDynamic(mapedProducts);
      } catch (error) {
        console.log(error)
      }
    }
  );

Package.json

{
    "name": "base-bailey-mysql",
    "version": "1.0.0",
    "description": "",
    "main": "src/index.js",
    "scripts": {
        "pre-copy": "cd .. && npm run  copy.lib base-baileys-mysql",
        "start": "node src/index.js",
        "dev": "nodemon --watch src/ src/index.js"
    },
    "keywords": [],
    "dependencies": {
        "@bot-whatsapp/bot": "latest",
        "@bot-whatsapp/cli": "latest",
        "@bot-whatsapp/database": "latest",
        "@bot-whatsapp/portal": "latest",
        "@bot-whatsapp/provider": "latest",
        "@whiskeysockets/baileys": "^6.4.0",
        "axios": "^1.5.1",
        "dotenv": "^16.3.1",
        "mysql2": "^2.3.3",
        "wa-sticker-formatter": "4.3.2"
    },
    "author": "",
    "license": "ISC"
}

Error

            if (err) throw err
                     ^

Error: Column 'refSerialize' cannot be null
    at Packet.asError (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\packets\packet.js:728:17)      
    at Query.execute (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\commands\command.js:29:26)      
    at Connection.handlePacket (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\connection.js:456:32) 
    at PacketParser.onPacket (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\connection.js:85:12)    
    at PacketParser.executeStart (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket.<anonymous> (C:\Users\inven\Documents\inventario\bot-whatsapp\base-baileys-mysql\node_modules\mysql2\lib\connection.js:92:25)       
    at Socket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:324:12)
    at readableAddChunk (node:internal/streams/readable:297:9)
    at Readable.push (node:internal/streams/readable:234:10) {
  code: 'ER_BAD_NULL_ERROR',
  errno: 1048,
  sqlState: '23000',
  sqlMessage: "Column 'refSerialize' cannot be null",
  sql: `INSERT INTO history (ref, keyword, answer, refSerialize, phone, options, created_at) values ('ans_cxxxxxxxxxxxxxxxxxxxxx', 'key_8xxxxxxxxxxxxx', 'Por favor cuéntanos que estas buscando:', NULL, 'xxxxxxxxx89', '{\\"media\\":null,\\"buttons\\":[],\\"capture\\":true,\\"child\\":null,\\"delay\\":0,\\"nested\\":[],\\"keyword\\":{},\\"callback\\":true}', NULL)`
}

Node.js v18.16.1
[nodemon] app crashed - waiting for file changes before starting...
oliverpx23 commented 11 months ago

Puedes revisar en el inicio de la aplicación si tu flujo esta registrado en la función "createFlow"

const adapterFlow = createFlow([flowPrincipal, ...flows_1]);

tenia el mismo problema, y al agregar los flujos que son llamados mediante "gotoFlow" aquí, funciono.

ric98esley commented 11 months ago

Es correcto @oliverpx23, había pasado ese detalle