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

[🐛] Error timeout al tratar de enviar mensaje

raymundo-salazar opened this issue · comments

¿Que versión estas usando?

v2

¿Sobre que afecta?

Otro

Describe tu problema

Hola @leifermendez primero que nada muchas gracias por todo tu aporte.

Comunidad les comento el error que he estado teniendo para ver si me pueden apoyar.
Estuve siguiendo el tutorial que se encuentra en este link https://youtu.be/u3YbNYAalDc sin embargo al momento me crear la ruta [POST] /message para enviar mensajes no me esta funcionando. Me termina respondiendo un error 408 Request Timeout.

Les comparto mis archivos involucrados para ver si pueden ayudarme a ver el error.

Otro dato interesante es que tengo un FLOW que se lanza con la keyword !hola y me responde Hola mundo!. Este esta funcionando bien, es decir, si me envia el mensaje de respuesta de manera correcta.

// app.ts

import {
  MemoryDB,
  addKeyword,
  createBot,
  createFlow,
  createProvider,
} from "@bot-whatsapp/bot";
import { BaileysProvider, handleCtx } from "@bot-whatsapp/provider-baileys";
import * as messages from "./controllers/messages";

const flowBienvenida = addKeyword("!hola").addAnswer("Hola mundo!");

const main = async () => {
  const provider = createProvider(BaileysProvider);

  provider.initHttpServer(process.env.PORT ? +process.env.PORT : 3002);

  provider.http?.server.post("/messages", handleCtx(messages.sendMessage)); // <--- esta es la ruta y hace referencia al metodo sendMessage del controller messages

  await createBot({
    flow: createFlow([flowBienvenida]),
    database: new MemoryDB(),
    provider,
  });
};

main();
// controllers/messages.ts

import { BaileysProvider } from "@bot-whatsapp/provider-baileys";
import { WASocket } from "@bot-whatsapp/provider-baileys/dist/baileyWrapper";

type bot = Pick<BaileysProvider, "sendMessage"> & {
  provider: WASocket;
};

export const sendMessage = async (bot: bot, req, res) => {
  const phone = req.body.phone;
  const message = req.body.message;

  console.log(phone, message); // <---- Este console.log muestra de manera correcta el numero que le estoy enviando

  const ctx = await bot
    .sendMessage(phone, message, {})
    .catch((err) => console.log("Error", err)); // <-- despues de un tiempo sin hacer nada me regresa aquí el error 408 Request Timeout
  console.log(ctx);

  res.end("great!");
};
## ERROR TIMEOUT

Error Error: Timed Out
    at /Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Utils/generics.js:137:32 {
  data: {
    stack: 'Error\n' +
      '    at promiseTimeout (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Utils/generics.js:132:19)\n' +
      '    at waitForMessage (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/socket.js:119:53)\n' +
      '    at query (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/socket.js:141:22)\n' +
      '    at getUSyncDevices (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/messages-send.js:166:30)\n' +
      '    at /Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/messages-send.js:357:53\n' +
      '    at Object.transaction (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Utils/auth-utils.js:136:32)\n' +
      '    at relayMessage (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/messages-send.js:279:30)\n' +
      '    at Object.sendMessage (/Users/<user>/_WORK/whatsapp-bot/node_modules/.pnpm/@whiskeysockets+baileys@6.7.4/node_modules/@whiskeysockets/baileys/lib/Socket/messages-send.js:652:23)\n' +
      '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
      '    at sendMessage (/Users/<user>/_WORK/whatsapp-bot/src/controllers/messages.ts:14:15)'
  },
  isBoom: true,
  isServer: false,
  output: {
    statusCode: 408,
    payload: {
      statusCode: 408,
      error: 'Request Time-out',
      message: 'Timed Out'
    },
    headers: {}
  }
}

De antemano muchas gracias a todos. Espero que me puedan apoyar con este error. Saludos.

Reproducir error

No response

Información Adicional

No response

Hola, te recomendaria mejor hacerlo de la siguiente forma:

la version que uso es la v 0.1.3-alpha.22

// routes.ts

import polka from "polka";
import { handleSendMessage } from "../services/index";

export const setRoutes = (server: polka.Polka) => {
  // Ruta para enviar mensajes
  server.post("/send-message", handleSendMessage);
};
// services.ts

import { inHandleCtx } from "@bot-whatsapp/provider-baileys";
import "dotenv/config";
import { Request, Response } from "express";

export const handleSendMessage = inHandleCtx(
  async (bot, req: Request, res: Response) => {
    try {
      const phonePrefix = process.env.PREX_PHONE_DEFAULT || "";
      const body = req.body;
      const phone = `${phonePrefix}${body.phone}`;
      const message = body.message;
      const imageUrl = body.imageUrl;

      const options = imageUrl ? { image: imageUrl } : {};
      await bot.sendMessage(phone, message, options);
      res.end(`Mensaje enviado a ${phone}`);
    } catch (error) {
      console.error(error);
      res.status(500).end("Error al enviar el mensaje");
    }
  }
);