wppconnect-team / wppconnect

WPPConnect is an open source project developed by the JavaScript community with the aim of exporting functions from WhatsApp Web to the node, which can be used to support the creation of any interaction, such as customer service, media sending, intelligence recognition based on phrases artificial and many other things, use your imagination
https://wppconnect.io
Other
1.93k stars 339 forks source link

tokenStore file não salva no MultiDevice (BETA) #516

Closed ghsgabriel closed 3 years ago

ghsgabriel commented 3 years ago

Description

Estou tentando implementar o MD no server, mas quando usamos o Multi-Device (BETA), o tokenStore file da lib não salva, visto que tem uma validação (isValidSessionToken)

Seria legal usarmos o tokenStore file mesmo no MD, para funcionar o startAllSessions/getAllTokens no server, e coisas como Webhook e Chatwoot (que da para personalizar para cada session mas fica salvo no token).

Ao forçar retornar true na função isValidSessionToken, o token é salvo, e em meus testes preliminares parece que tando o legacy quanto o md conectam e enviam/recebem texto normalmente, mesmo não validando os parâmetros do token.

Na minha cabeça passou 2 hipoteses: Removar essa validação ou, se tiver uma forma de checar se é MD, da pra fazer um if (temTodosOsAtributos || isMD) return true

Não enviei um PR, pois não sei qual a melhor forma de tratar.

Obrigado!

Environment

Steps to Reproduce

  1. Crie uma nova sessão
  2. Escaneie o QR com o WhatsApp no MD (BETA)
  3. Verá que o token não foi salvo

Log Output

warn: [local:token] Failed to update session token

rookylu commented 3 years ago

@edgardmessias

diazzaid commented 3 years ago

Description

Estou tentando implementar o MD no server, mas quando usamos o Multi-Device (BETA), o tokenStore file da lib não salva, visto que tem uma validação (isValidSessionToken)

Seria legal usarmos o tokenStore file mesmo no MD, para funcionar o startAllSessions/getAllTokens no server, e coisas como Webhook e Chatwoot (que da para personalizar para cada session mas fica salvo no token).

Ao forçar retornar true na função isValidSessionToken, o token é salvo, e em meus testes preliminares parece que tando o legacy quanto o md conectam e enviam/recebem texto normalmente, mesmo não validando os parâmetros do token.

Na minha cabeça passou 2 hipoteses: Removar essa validação ou, se tiver uma forma de checar se é MD, da pra fazer um if (temTodosOsAtributos || isMD) return true

Não enviei um PR, pois não sei qual a melhor forma de tratar.

Obrigado!

Environment

  • Wppconnect version(s): 1.8.13
  • Browser: [e.g. Chrome 87, Chromium 85]
  • OS: Windows 10
  • Node version: Node 14
  • WhatsApp version: 2.2126.14
  • MultiDevice (BETA): YES

Steps to Reproduce

  1. Crie uma nova sessão
  2. Escaneie o QR com o WhatsApp no MD (BETA)
  3. Verá que o token não foi salvo

Log Output

warn: [local:token] Failed to update session token

if want to enable multi-device add this puppeteerOptions: {userDataDir: './tokens/chat2/', // for multidevice beta },

ghsgabriel commented 3 years ago

if want to enable multi-device add this puppeteerOptions: {userDataDir: './tokens/chat2/', // for multidevice beta },

I'm not asking how to enable multi-device.

I'm reporting a bug about saving tokens when using multi-device.

I know it is not necessary token for general use, but for a good functioning of the wppconnect-server it is, for the reasons already presented.

wenioferraz commented 3 years ago

A Solução mais rapida para startAll é fazer um fs na pasta tokens e pegar o nome delas montar um map e start a função open!

pelo menos foi a mais rapida que encontrei e funcional.

ghsgabriel commented 3 years ago

Realmente isso resolve o startAll @wenioferraz , porem não resolve ainda as outras questões como custom webook url e chatwoot.

Ontem o @edgardmessias adicionou a função isMultiDevice(), com base nela, vou tentar enviar entre hoje e amanhã um PR que resolveria todas essas questões de uma vez só.

ghsgabriel commented 3 years ago

Parece que não tem como chamar a função isMultiDevice dentro do isValidSessionToken, a forma que eu havia pensado não vai funcionar. Além disso, o token é checado antes de iniciar a sessão, justamente para injetar, ou seja, não tem como saber se é MultiDevice ou não.

Amanhã vou testar e pensar em outras abordagens, como preencher um dummy data nos campos requeridos.