orkestral / venom

Venom is a high-performance system developed with JavaScript to create a bot for WhatsApp, support for creating any interaction, such as customer service, media sending, sentence recognition based on artificial intelligence and all types of design architecture for WhatsApp.
https://orkestral.io
Apache License 2.0
6.13k stars 1.21k forks source link

Erro ao enviar mensagem com o método sendText para um telefone fixo #1269

Closed miguelarcjr closed 2 years ago

miguelarcjr commented 3 years ago

Description

Estou tentando enviar uma mensagem para um telefone fixo comercial com ddd 61. Ao tentar enviar mensagem o venom retorna o seguinte erro: (node:24712) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: n._find is not a function at https://web.whatsapp.com/bootstrap_qr.6a499aa48d60caaefb11.js:56:349001 at Generator.next (<anonymous>) at t (https://web.whatsapp.com/vendor1~bootstrap_qr.fac97d8af22734ef1183.js:2:63784) at s (https://web.whatsapp.com/vendor1~bootstrap_qr.fac97d8af22734ef1183.js:2:63995) at https://web.whatsapp.com/vendor1~bootstrap_qr.fac97d8af22734ef1183.js:2:64054 at j (https://web.whatsapp.com/bootstrap_qr.6a499aa48d60caaefb11.js:2:390225) at new g (https://web.whatsapp.com/bootstrap_qr.6a499aa48d60caaefb11.js:2:381120) at https://web.whatsapp.com/vendor1~bootstrap_qr.fac97d8af22734ef1183.js:2:63935 at W._serverQuery (https://web.whatsapp.com/bootstrap_qr.6a499aa48d60caaefb11.js:56:349365) at W._query (https://web.whatsapp.com/bootstrap_qr.6a499aa48d60caaefb11.js:56:348492) at ExecutionContext._evaluateInternal (C:\Users\User\Documents\GitHub\fastzap\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:217:19) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async ExecutionContext.evaluate (C:\Users\User\Documents\GitHub\fastzap\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:106:16) (node:24712) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag--unhandled-rejections=strict(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 6)

Para um número de celular movel a mensagem está sendo enviada corretamente.

Environment

  1. Envie uma mensagem utilizando o método sendText para um telefone fixo ex: 556934413650@c.us

Script utilizado

// Supports ES6
// import { create, Whatsapp } from 'venom-bot';
const venom = require('venom-bot');

venom.create({
    session: 'session-name', //name of session
    multidevice: true // for version not multidevice use false.(default: true)
  })
  .then((client) => start(client))
  .catch((erro) => {
    console.log(erro);
  });

async function start(client) {
  await client
  .sendText('556934413650@c.us', 'Teste de envio')
  .then((res) => {
    console.log('Result: ', res); 
  })
  .catch((err) => {
    console.error('Error when sending: ', err); 
  });
  client.onMessage((message) => {
    if (message.body === 'Hi' && message.isGroupMsg === false) {
      client
        .sendText(message.from, 'Welcome Venom 🕷')
        .then((result) => {
          console.log('Result: ', result); //return object success
        })
        .catch((erro) => {
          console.error('Error when sending: ', erro); //return object error
        });
    }
  });
}
miguelarcjr commented 3 years ago

Miguel informação limitada. poste o script que você utilizou.

Ok script adicionado.

andrerizzi commented 3 years ago

Mesmo erro aqui. Estava tudo funcionando mas após atualizar o venom e utilizar o multidevice o sendText está retornando esse erro e não funciona mais

LennonSantos commented 3 years ago

Mesmo erro aqui

dev-ispa commented 3 years ago

Para vocês está mandando corretamente para um número de celular movel e dando somente problemas com telefone fixo comercial?

Porque para mim parou de mandar mensagem para qualquer numero (fixo, movel, sem/com historico de conversa, etc). Começou anteontem. Alguém mais com este problema?

miguelarcjr commented 3 years ago

Para vocês está mandando corretamente para um número de celular movel e dando somente problemas com telefone fixo comercial?

Porque para mim parou de mandar mensagem para qualquer numero (fixo, movel, sem/com historico de conversa, etc). Começou anteontem. Alguém mais com este problema?

Exatamente, eu tive um problema para enviar mensagens para números de celular móvel com ddd acima de 22. Se for o seu caso tbm, é por que o digito 9 nesses estados é opcional, então tem que fazer uma condição para remover o nono digito; Ou seja, remover o nono digito para os números dos estados com ddd acima de 22.

Agora para os números de telefone fixo, até agora, não estou conseguindo enviar.

VictorDeAlmeida commented 3 years ago

Pessoal, este erro está ocorrendo quando não há uma janela de conversa existente. Se a janela de conversar existir a função .sendtext irá funcionar.

Vamos aguardar uma atualização do desenvolvedor como a função multidevice do whatsapp ainda é beta toda hora ocorre uma atualização.

Sim, o problema não acontece somente com números fixos, como a issue descreve, mas móveis também. O que engatilha o erro é a janela como o irmão falou aqui

FelipeDeveloperFullStack commented 3 years ago

Mesmo problema aqui! ;(

VictorDeAlmeida commented 3 years ago

Galera, caso alguém ainda não tenha uma resolução além daquela mudando a versão (pra mim não funcionou em produção, causando instabilidades bem atípicas), uma medida paleativa seria colocar um try catch simples no método sendText do arquivo src/api/layers/sender.layer.ts, como mostrado abaixo. Ponto BEM negativo: a mensagem a usuários sem janela existente não é enviada, mas, ao menos no nosso caso, é um erro bem menos grave do que quebrar a instância a cada erro desses.

      // ...
      try {
        const result = await this.page.evaluate(
          ({ to, content }) => {
            return WAPI.sendMessage(to, content);
          },
          { to, content }
        );
        if (result['erro'] == true) {
          return reject(result);
        } else {
          return resolve(result);
        }
      } catch(err){
        reject(err);
      }

Para constar, o erro que encontro ao colocar esse try...catch é que WAPI vem undefined quando usuários não tem janela

VictorDeAlmeida commented 3 years ago

Problema resolvido na versão 4.0.2 lançada hoje

orkestral commented 2 years ago

fixed in version 4.0.2

jsuceir commented 2 years ago

to na 4.0.2 e ainda estou com o mesmo problema TypeError: Cannot read property 'sendText' of undefined

LennonSantos commented 2 years ago

to na 4.0.2 e ainda estou com o mesmo problema TypeError: Cannot read property 'sendText' of undefined

eu tinha este erro, mas a versão 4.0.2 corrigiu.

dev-ispa commented 2 years ago

Estava funcionando com 4.02 mas começou novamente dar este mesmo problema.

Luciara-Abreu commented 1 year ago

Criei um serviço para enviar as mensagens para um whats qualquer, mas por conta da linha onde chama o client.SendText não estou conseguindo enviar a da erro.

import AppError from '@shared/errors/AppError' import { isValidPhoneNumber, parsePhoneNumber } from 'libphonenumber-js' import { Whatsapp } from 'venom-bot'

class SendWhatsService { private client: Whatsapp

public async sendText(to: string, body: string) { if (!isValidPhoneNumber(to, 'BR')) { throw new AppError('This number is not valid') }

let phoneNumber = parsePhoneNumber(to, 'BR')?.format('E.164').replace('+', '') as string
phoneNumber = phoneNumber.concat('+55').includes('@c.us') ? phoneNumber : `${phoneNumber}@c.us`
console.log('AQUIIIIII SENDTEXT  ===>   ', 'phoneNumber ==>', phoneNumber, 'Message for whats => ', body)

this.client.sendText(phoneNumber, body)  // essa linha 

} } export default SendWhatsService

// Meu controller está chamando esse metodo também sendText

async SendWhats(req: Request, res: Response) { const { phoneNumber, body } = req.body const sendWhats = new SendWhatsService() const thisPost = await sendWhats.sendText(phoneNumber, body)

return res.json(thisPost)

}

// Ele me mostra formatado e a mensagem que eu coloquei no insominia mas não está enviando. // eu alterei o numero por segurança

AQUIIIIII SENDTEXT ===> phoneNumber ==> 5551999999999@c.us Message for whats => hoje é um novo dia!!!

TypeError: Cannot read properties of undefined (reading 'sendText') at SendWhatsService.execute (C:_PROJETOS\Agenda_Aniversariantes\API\src\services\whatsApp\sendWhatsService.ts:18:17) at SendWhats (C:_PROJETOS\Agenda_Aniversariantes\API\src\controllers\WhatsController.ts:35:38) at newFn (C:_PROJETOS\Agenda_Aniversariantes\API\node_modules\express-async-errors\index.js:16:20) at Layer.handle [as handle_request] (C:_PROJETOS\Agenda_Aniversariantes\API\node_modules\express\lib\router\layer.js:95:5) at next (C:_PROJETOS\Agenda_Aniversariantes\API\node_modules\express\lib\router\route.js:144:13) at processTicksAndRejections (node:internal/process/task_queues:96:5)

// Aguém saberia como eu poderia chamar o meu controller e ele executar o serviço de forma correta? Eu preciso de ajuda huahuaha

sgalvao commented 1 year ago

Estou com o mesmo problema

Luciara-Abreu commented 1 year ago

@sgalvao, Oie brother!! Qual versão está usando? eu consegui resolver aqui...

Tive que pesquisar bastante mas valeu a pena... ai vai as mudanças que fiz... Vá em node_modules, venom-bot/dist/controllers/initializer.js e comenta essa parte do código.

image

E se vc tiver com uma versão anteriror a versão 5, terá que trocar nesse mesmo arquivo (initializer.js) apenas as vaiaveis => this.session por session Se nada der certo me chama no discord ==> Luciara Abreu#4387, para vermos teu código.

passo1 comentar código ==> https://github.com/orkestral/venom/issues/2159 passo 2 trocar variaveis ==> https://github.com/orkestral/venom/issues/1659.