Executando verificação de segurança...
47
jjrdev
9 min de leitura ·

Como eu integrei o ChatGPT ao WhatsApp para uma empresa

Alguns meses atrás fui contratado para desenvolver um sistema web que realizasse uma integração com o WhatsApp, acredito que só imaginar como isso deve funcionar, você consiga enxergar os possíveis problemas e dificuldades, pois bem. A primeira dificuldade foi decidir se a integração iria ocorrer através da API oficial do WhatsApp ou não, uma vez que a API oficial possui diversas limitações e um custo elevado, a empresa contratante decidiu por solicitar que o desenvolvimento fosse realizado com uma conexão não oficial com o WhatsApp, sendo assim, seria necessário contratar um sistema já desenvolvido de integração com o WhatsApp, o que iria gerar custos adicionais ou desenvolver e hospedar por conta própria (o que também leva a custos adicionais, porém menores em longo prazo).

Conectando com o WhatsApp

Com o foco em desenvolver uma conexão com o WhatsApp de maneira não oficial, decidimos por desenvolver em NodeJs a conexão com o WhatsApp utilizando o whatsapp-web.js, um projeto super legal com uma comunidade bastante ativa no Discord. Decidido o caminho do desenvolvimento, criei toda uma API em Express.js que se conectasse com o WhatsApp através do whatsapp-web.js e permitisse que essa conexão fosse explorada no sistema web em seguida.

Com a API de conexão finalizada, ela foi previamente hospedada em um servidor simples que serviu para que realizassemos diversos testes de usabilidade e uso de CPU, com os testes a empresa contratante decidiu por hospedar a API do WhatsApp em uma máquina local que ficasse 24 horas ligada (como uma nuvem no seu próprio escritório), construiram todo um sistema de conexão com a internet que diminuisse ao máximo as possibilidades de não haver conexão e com proteção contra queda de energia.

Isso claramente gerou um custo maior que contratar uma empresa já existente que tivesse a API do WhatsApp não oficial, mas o custo é imediato e consegue ser reduzido a longo prazo, uma vez que uma API não oficial cobra em média de 99 reais por instância e eles (empresa contratante) utilizariam mais de 50 instâncias, gerando um custo de mais de 4950 reais por mês.

Acessando o WhatsApp

Já com a API hospedada e funcionando corretamente, o desenvolvimento do sistema web que se conectasse com ela se iniciava, ele deveria conter diversas funções que iam além do que era fornecido pelo WhatsApp e também por outras empresas já existentes, como a ChatGuru ou a Umbler Talk, uma vez que parte das funções eram voltadas diretamente para o uso da empresa contratante.

O sistema desenvolvido contou com funções como:

  • Visualização dos contatos;
  • Filtro avançado de listagem de contatos;
  • Envio de mensagens de texto, mídia e áudio;
  • Diferentes níveis de acesso;
  • Gestão de etiquetas de contatos;
  • Gestão de campos personalizados;
  • Gestão e envio automatizado de mensagens periódicas;
  • Gestão de equipes de atendentes;
  • Gestão de instâncias.

Assim, um único sistema web permite que mais de 50 atendentes utilizem o WhatsApp corporativo (cada um com o seu próprio número) com acesso a todos os recursos e automações e permissão para que os gestores consigam controlar como tudo sem funcionado, conseguindo gerar relatórios de atendimento, acompanhar vendas, controlar acessos e outros...

Toda a conexão entre o WhatsAppWebJs (API desenvolvida em NodeJs) e o sistema web (desenvolvido em PHP com uso do framework também desenvolvido por mim Luna é realizada através de chamadas HTTP e envio de WebHooks.

As funções citadas ainda não envolvem o chatbot e tão pouco a inteligência artificial, daria para imagina-las como uma versão 2.0 do WhatsApp, servindo como a base para a integração do ChatGPT.

Criando um fluxo de atendimento

Agora que a base de conexão com o WhatsApp já estava preparada (isso demorou mais do que eu imaginava e menos do que deveria) era hora de partir para o fluxo de atendimento, de maneira simples, um caminho que o sistema deveria percorrer sempre que uma nova mensagem surgir e permitir que a parte inicial do atendimento fosse agilizada e chegasse no atendente já filtrada.

Você com certeza já utilizou algo semelhante, quando manda uma mensagem para uma empresa pelo WhatsApp e o retorno é algo como "Digite 1 para realizar X ação".

Esse desenvolvimento é um pouco mais complexo, explicar totalmente aqui é possível mas tomaria um tempo não disponível no momento, por isso tentarei resumir como as coisas funcionam:

  • O contato envia uma mensagem;
  • O sistema verifica se existe uma sessão já aberta para aquele contato, se não, a cria;
  • Caso a sessão exista, verifica qual o estágio dela e realiza as ações daquele estágio, como enviar mensagens, verificar respostas, redirecionar ou outras ações.

A configuração do fluxo parecia ser tão complexa quanto o desenvolvimento dele, ainda mais quando me baseava em outros sistemas já existentes, tudo parecia ser bastante confuso e bagunçado, por isso tentei criar algo que fosse bastante intuitivo e permitisse que o usuário comum (ou gestor) conseguisse configurar tudo sem dificuldades.

Exemplo de um fluxo configurado:

Captura de Tela

Ainda pode parecer confuso, mas esse fluxo está grande sem muita necessidade, ele foi utilizado para testes, um fluxo real seria menor e mais dividido entre diferentes fluxos

O uso do fluxo já permitiria que parte das conversas realizadas por atendentes fosse reduzida, uma vez que algumas informações poderiam ser filtradas e chegaria ao atendente aquilo que fosse realmente necessário, contudo ainda não iniciamos a inteligência artificial, porém tudo que foi dito até agora serve como uma escada, sem essas etapas a integração da inteligência seria inviável (ou inútil) e por isso precisa ser citado.

Integrando o ChatGPT

A API do ChatGPT possui uma documentação mas não consegui entender tudo muito bem, algumas informações são rasas (ou eram no momento em que li), o que dificultou um pouco na integração, contudo alguns estudos e testes me auxiliaram no entendimento. Com isso em mente, irei detalhar algumas informações importantes aqui para você, pode ser que um dia sejam úteis:

Como o ChatGPT cobra

O ChatGPT é parte da OpenAi, uma empresa que desenvolve diversos sistemas de inteligências artificiais que podem ser utilizadas pelo público, como a MidJourney para gerar imagens, sendo assim, o ChatGPT está atrelado na cobrança da API da OpenAi, que solicita um valor de depósito através de um cartão de crédito e realiza cobranças conforme o uso sob aquele valor depositado.

Existem funções dentro do dashboard da OpenAi que permite bloquear maiores cobranças e lhe notifica caso chegue em um valor X.

Agora que a OpenAi possui o acesso ao cartão de crédito e possibilidade de cobrar, ela irá faze-lo (no caso do ChatGPT) com precificação sob seus tokens, por exemplo o modelo GPT 3.5 Turbo (os preços variam dependendo da versão do ChatGPT utilizada) atualmente cobra 0.0015 por mil tokens de entrada (pergunta) e 0.002 por mil tokens de saída (resposta).

O valor informado foi encontrado aqui no dia 17/09/2023.

Mas, o que são tokens? Segundo o ChatGPT:
Os tokens são unidades de texto em que o modelo de linguagem divide o texto de entrada ou geração de texto. Em termos simples, um token pode ser uma palavra única ou uma parte de uma palavra, como um caractere individual. Por exemplo:

  • A palavra "chat" é um token.
  • A palavra "GPT-3" é um token.
  • A frase "ChatGPT é incrível!" pode ser dividida em cinco tokens: ["Chat", "G", "PT", " é", " incrível", "!"].

No momento que escrevo isso, ainda decidimos por utilizar a API do ChatGPT, porém existe a possibilidade de em breve utilizarmos uma máquina própria para rodar uma versão local da inteligência artificial do ChatGPT e reduzir também esse custo de tokens, se for viável.

Enviando uma pergunta ao ChatGPT

Como o sistema web foi desenvolvido em PHP, optei por utilizar o pacote orhanerday/open-ai para realizar a integração, mas um cURL também seria capaz de faze-lo. A preferência pelo uso do pacote foi para reduzir tempo de desenvolvimento e facilitar a integração.

Existe pacotes para diversas linguagens e eles podem ser encontrados aqui.

Conforme explicado anteriormente, o sistema verifica a sessão do contato e caso a sessão esteja como chat_ai = true, então todas as próximas mensagens são enviadas para o ChatGPT e a resposta retornada ao contato. O fluxo (citado anteriormente também) é quem controla quando um contato deve conversar com o sistema de regras, com o ChatGPT ou com um atendente humano.

Indo para o código, exemplificando em PHP:

$openAi = new OpenAi($chatAi->api_key);

$messages = [];

$chat = $openAi->chat([
    'model' => $chatAi->model,
    'max_tokens' => $chatAi->max_tokens,
    'messages' => $messages,
]);

$received = $chat->choices[0]->message->content;

Bastante simples, certo? O valor de $received armazena a resposta do ChatGPT, a função $openAi->chat() envia a requisição para o ChatGPT enviando model com o modelo que deve ser utilizado (gpt-3.5-turbo), o valor de max_tokens com o máximo de tokens que aquela requisição deve gastar para obter uma resposta e messages com um array contendo todas as mensagens que devem ser analisadas pelo ChatGPT. Obtendo a resposta, o código envia pelo WhatsApp ao contato que realizou a pergunta.

Mas, como o array $messages deve ser populado? Basicamente com todas as mensagens que você deseja que o ChatGPT leve em consideração, permitindo que exista um contexto geral naquela conversa. Por isso todas as perguntas e respostas são armazenadas no banco de dados do sistema web enquanto o contato estiver falando com o ChatGPT, para que sempre sejam utilizadas para manter o contexto do contato e evitar respostas repetidas.

Para evitar armazenamento de dados desnecessários, assim que a conversa com o ChatGPT é finalizada todas as perguntas e respostas daquela sessão são excluídas também.

Sendo assim, o array $messages seria parecido com isso:

$messages = [
    [
        'role' => 'user',
        'content' => 'Pergunta 01'
    ],
    [
        'role' => 'assistant',
        'content' => 'Resposta 01'
    ],
    [
        'role' => 'user',
        'content' => 'Pergunta 02'
    ],
    [
        'role' => 'assistant',
        'content' => 'Resposta 02'
    ]
];

Também é possível adicionar uma mensagem do sistema, geralmente utilizada no começo da conversa, que será utilizada para configurar como o ChatGPT deve se comportar, por exemplo:

$messages = [
    [
        'role' => 'system',
        'content' => 'Atue como um atendente chamado Gabriel com linguagem formal'
    ],
    // ...
];

Uma informação útil, o valor de role deve ser system, assistant ou user (também existe o valor function mas ainda não está 100% disponível) e eles significam respectivamente uma mensagem enviada pelo Sistema, uma mensagem enviada pelo ChatGPT e uma mensagem enviada pelo Usuário.

Com isso, ao perguntar "Qual o seu nome", o ChatGPT irá responder "Meu nome é Gabriel".

Também adicionei algumas formas de verificação para evitar respostas que já foram obtidas antes com a exata mesma mensagem, já que são armazenadas durante a sessão, o sistema a identifica e responde diretamente pela resposta anterior, evitando que seja realizada uma nova requisição ao ChatGPT, além de também criar uma fila para que caso o contato envie múltiplas mensagens em sequência, elas serão ignoradas até que a primeira mensagem seja respondida.

Treinando o ChatGPT

Se você já conversou com o ChatGPT, sabe o quanto ele é estranho em algumas respostas, e isso faria com que parte dos clientes estranhassem esse contato com uma inteligência artificial, por isso foi necessário criar um modelo próprio e voltado exclusivamente para a empresa contratante, uma vez que o ChatGPT talvez não teria as devidas respostas para perguntas especificas de produtos da empresa. O modelo personalizado pode ser criado a partir da função chamada Fine-Tuning explicada aqui.

Ainda estamos realizando esse treinamento, por isso não tenho muito o que comentar sobre, em breve retorno com mais informações.

Respondendo o contato

Agora que o ChatGPT está configurado e funcionando, o fluxo determina quando o contato deve se conectar com a inteligência artificial e realiza o envio das perguntas do WhatsApp para o ChatGPT e a resposta novamente para o WhatsApp.

A integração permite que o atendimento funcione 24 horas por dia por todos os dias da semana mesmo que um atendente humano não esteja disponível, além de reduzir a quantidade de contatos que chegarão a falar com um atendente humano, uma vez que o ChatGPT pode tirar todas as dúvidas do contato sozinho.

Considerações finais

Desenvolver todos esses sistemas, integrar com o WhatsApp utilizando um "bot", desenvolver o sistema web, se conectar com a API do bot criado para o WhatsApp e também com a API do ChatGPT além de todas as outras funções do sistema foi bastante complicado, mas como programar (ainda) é minha paixão, foi tão prazeroso quanto. O custo da empresa com certeza (segundo estudos) será reduzido, embora seja alto nesse começo, e isso irá permitir maiores lucros.

Existe sim uma chance que o ChatGPT aprenda o suficiente com as conversas dos contatos e atendentes e futuramente os atendentes se tornem obsoletos para a inteligência artificial e sejam em sua maioria demitidos, mas prefiro pensar que eles terão mais tempo livres para alguma coisa...

Carregando publicação patrocinada...
6

Fiz um projeto parecido envolvendo o GPT, eu entendo bastante dessa parte de usar modelos proprios sem ter que pagar pelo uso, acredito que a maior dificuldade que vai enfrentar é aceitarem os custos na empresa, o servidor precisa ter memória de vídeo cuda ou muitos processadores para você poder carregar o modelo para utilizacao em uma velocidade de resposta viável, principalmente nesses casos onde pode ter muitas requisições. Entao você tem dois caminhos ou faz via processamento CPU e vai ter que colocar praticamente o dobro de memoria Ram em relação ao tamanho do modelo. Um exemplo um gpt3 precisaria de uns 120GB de ram para o modelo mais treinado. Isso varia muito de acordo com o modelo de IA usado, mas tenha em mente que quanto menor menos inteligente ele é (menos dados de treinamento). Ou entao para ter uma performance excelente precisa combinar placas de vídeo cuda ate ter a memoria de video do tamanho necessario. Ambos se tornam caros, claro estamos falando de modelos tao capazes quando gpt3.5 ou superior.

Além disso recomendo que avalie muito bem o seu custo, pois terá que aprender muito, e o dobro desse muito se eles quiserem treinar o modelo próprio com os dados deles o que ja seria realmente substituir os funcionários o que ja é perfeitamente possível, mas ainda nao é para empresas pequenas $$$. A carga de aprendizado é enorme e vai de hardware a software alem de aprendizado profundo de máquina algo desafiador, mas maravilhoso. Não se pode cobrar pouco por isso, nao porque é novidade, mas porque realmente o custo de tempo e dedicação será alto. Nao consigo ver um projeto desses com menos de 8 meses de implantacao.

Sobre o Fine-Tuning: Eu desisti de implantar via essa forma por um detalhe que observei, Obs.: Eu sou pesquisador oficial da OpenAi desde 2018, eu trabalho muito com projetos que precisam converter as respostas de IAS de texto para variáveis, por exemplo você receber uma resposta da IA que pode ser integrada a um sistema sem IA e ser processada em variáveis que o sistema entende, o famoso serviço de engenharia de prompt, e eles tem a péssima rotina de encerrar modelos de fine-tuning e apenas te dizer: Vamos encerrar o modelo X, você tem até tal data para mudar para outro e ai você precisa retreinar outro e assim vai indo, no meu caso específico a cada mudança de modelo também muda a forma do prompt para receber as mesmas variáveis e sempre aumenta o custo das requisições o que provoca um custo enorme de reformulação a cada vez que isso ocorre, o que tem acontecido entre uma ou duas vezes ao ano.

Sobre a capacidade dos modelos: Infelizmente modelos GPT decaem com o tempo se forem treinados com dados vindos de usuários pouco inteligentes, ou dados vindos de outras IAs, isso na verdade é um processo de adaptação da IA (eu diria de qualquer inteligência, artificial ou não), ela vai tentar assumir o mesmo nível de linguagem e formato de tomada de decisão do grupo ao qual está pertencendo, é uma capacidade de adaptação da inteligencia para ser aceita em grupos, por isso se formam as bolhas por ai :D, então quanto mas dados porcaria ela recebe, mais burra fica, é necessário muito cuidado ao treinar modelos, principalmente com informações colhidas de chats com clientes ou documentos da empresa, pois se esses dados não forem de alta qualidade já viu oque pode acontecer né? Eu recomendaria um modelo próprio pré treinado generalista e uma base de dados própria para adicionar ao treinamento baseado em um banco de dados vetorial para alimentação desses dados, antecipe o tamanho dos dados pois quanto mais treinamento maior o modelo fica e assim, mais processamento e mais memória Ram. E muito cuidado com o que entra, pois é que nem criança, aprende tudo que não presta :D

Seu projeto é muito legal, eu acho que tem potencial inclusive para virar um serviço, Boa sorte.

2

Eu estou com um projeto (parado) que envolve fine tuning, e quando me deparei com os custos de treinamento fiquei preocupado, porque a organização dona do projeto não tem verba para este ponto. Lendo seu post, de certa forma fico aliviado em não ter executado esta etapa ainda sem pensar num orçamento anual (seria um contrato de empreitada, digamos assim). Obrigado por isso.

3

Fico a disposição, nesse seu contrato acho que deveria especificar um suporte por chamado e tambem uma revisão 2 vezes ao ano para lidar com trocas de pontos de extremidade e conferencia se os modelos nao vao ser tornados obsoletos.

A OpenAi ainda é uma empresa muito jovem, eles alteram muita coisa e muito rápido ainda o que trás um nivel de insegurança.

1

Obrigado pelo feedback! Entendi seu ponto sobre o uso de CPU para uma inteligencia local e concordo totalmente. Ainda iremos avaliar se realmente vale a pena.

Sobre o Fine-Tuning, não sabia sobre o problema que citou, irei verificar com mais cautela sobre e tentar encontrar uma forma de prosseguir com isso. Agradeço pelas informações e parabéns pelo conhecimento!

Quem sabe um dia se torne um serviço :D

3

Show deveria mesmo.

Aqui encontra a documentação sobre o Fine e essas informações de alterações, o modelo curie deles acabou de sair de uso e o próximo será o davinci, além de que vai haver uma alteração de ponto de extremidade deles em 4 de janeiro de 2024 ou seja se não cuidar isso pode perder o acesso por quebra do link:
https://platform.openai.com/docs/guides/legacy-fine-tuning

Acredito fielmente que o caminho no futuro é implantações próprias de IA nas empresas, porque a maioria tem medo dos seus dados estar nas mãos de outras empresas gigantes, o medo é de vazamento mas também de roubo de propriedade intelectual ou segredo comercial, acredito que empresas grandes não vão usar IAs de empresas tipo Openai, olhe o caso da microsoft que preferiu implantar a sua própria baseado no modelo gpt. Amazon e Apple que proibiram os funcionários de usar, por que será? Entendeu por onde esse caminho está indo? As pequenas empresas vão ficar refem desses serviços, mas as grandes não.

1
4

Cara, muito obrigado pela sua contribuição!!! Um dos melhores posts que já vi por aqui.

Gostaria de fazer algumas perguntas mas se não puder respondê-las, Ok, sem problemas:

  1. Você já tinha alguma experiência prévia em integração com whastapp? E com charGPT (incluindo aeu treinamento)? Se não, poderia dizer como foi seu mindset para encarar esse projeto?
  2. O projeto foi por horas ou fechado? Como você estimou valores/horas?
  3. Desconsiderando a integração com chatgpt, quanto tempo durou?
1

Obrigado pelo feedback! Sobre suas dúvidas:

  1. Já trabalhei anteriormente com integração com o WhatsApp mas utilizando uma API de terceiros, porém já desenvolvi alguns Bots para Discord (inclusive já publiquei sobre aqui no TabNews) e a lib utilizada no projeto para integrar com o WhatsApp é bastante similar nas funções, então facilitou bastante. Com isso, quando peguei o projeto já tinha em mente que seria complicado mas com as noções anteriores tinha ciência que seria possível finalizar.
  2. Foi fechado, um valor X para o desenvolvimento completo, a ideia inicial era de finalizar em 3 meses mas acabou prolongando para 4 meses.
  3. Foi 1 mes para desenvolver a base do WhatsAppWebJs, 2 meses para o sistema Web e mais um mês para fluxos de chat e IA, mas parte desse tempo não envolve desenvolvimento e sim organização e definição de como tudo deve funcionar.
1

Uma pergunta
uso se memoria pelo sistema de bot?
usa muito?

Pq o bot usa um navegador neh!
Se tiver muitas conversas ao mesmo tempo
como fica isso?

1
3

É uma equipe grande, totalizando uma pessoa (eu) hahaha.

O desenvolvimento é todo realizado por minha pessoa, a única parte que fica responsável pela empresa e os desenvolvedores dela é a hospedagem, que seria a gestão do servidor local onde as instâncias funcionam. Eles desenvolveram essa parte uma vez e agora todo Push na main do GitHub automaticamente atualiza a hospedagem, então meio que me viro sozinho após a primeira configuração do servidor deles.

1
2

Muito obrigado pelo post! Li todo e achei super interessante.

Não sei bem o contexto e qual o nível de complexidade a IA está tendo que lidar no seu caso, cada caso é um caso, mas a ideia de rodar uma instancia própria do modelo de IA é bastante válida. Os modelos de IA generativas de textos hoje estão bastante otimizadas e tem modelos excelentes que podem rodar com pouquíssima exigência de máquina.

Mas novamente, cada caso é um caso, pode ser que pela demanda, complexidade de mensagens, tempo de desenvolvimento e diversos outros fatores seja mais vantajoso usar a API da OpenIA mesmo.

Conforme explicado anteriormente, o sistema verifica a sessão do contato e caso a sessão esteja como chat_ai = true, então todas as próximas mensagens são enviadas para o ChatGPT e a resposta retornada ao contato. O fluxo (citado anteriormente também) é quem controla quando um contato deve conversar com o sistema de regras, com o ChatGPT ou com um atendente humano.

Isso é automatizado ou manual? Vocês implementaram algum fluxo automatizado para identificar se a API de integração ta funcionando normalmente?

1

Obrigado pelo feedback! Sobre o uso de uma inteligencia local ou via API da OpenAi, ainda estamos analisando, vamos levar bastante coisas em consideração para tomar essa decisão, agradeço pelas informações sobre.

Sobre sua dúvida, ela é alterada no fluxo de regras citadas no artigo, na parte do Chatbot, existe basicamente no exemplo criado ao selecionar a opção "3" durante uma conversa com o bot o sistema verifica se está dentro de um horário comercial (definido também no fluxo) e caso esteja, ele ativa a função "Ativar inteligência artificial", e para desativar basta finalizar o atendimento ou enviar uma mensagem manual que o faz também, então no geral funciona de forma automático configurada previamente.

1

Conhece alguma forma de adicionar contexto na conversa sem consumir meus tokens? Porque aparentimente cada mensagem que adiciono no array mesmo sendo do system consome meus tokens. Isso eleva muito os custos para ter uma conversa fluida e com contexto semantico

1

Cara que trabalho massa! Muito legal ver como você lidou essencialmente com as integrações, e principalmente ver as soluções que você achou para cada problema. Seria muito massa ver uma publicação especialmente para falar sobre fluxos de atendimentos em chatbots, quis fazer um projeto parecido, também utilizando a whatsapp-web.js, porém fiquei travado nessa etapa dos fluxos utilizando intents e entities, vejo que possui pouco conteúdo sobre. No mais, agradeço pela contribuição! Conteúdo muito enriquecedor.

1

Obrigado pelo feedback! Sobre o chatbot realmente foi dificil encontrar ideias e soluções pois existe poucos conteúdos na internet e a maioria explica como usar alguma plataforma de terceiros e não como desenvolver isso, em breve trarei um artigo aqui sobre isso detalhadamente para explicar como desenvolvi. Um abraço!

1

Que trabalho fantastico, muito legal voce compartilhar seu trabalho conosco, imagino que nao foi um processo simples, muito menos rapido.... Meus parabens pelo relatorio e mais uma vez pelo seu trabalho!!

1
1

Parabénss pelo trabalho, fiz algo semelhante essa semana utilizando a bibliote venom-bot e foi um baita desafio, novamente parabéns pelo trabalho e pela excelente documentação, foi uma ótima leitura.

Abs

2
1

Obrigado pelo feeback! No começo do projeto a venom-bot era uma alternativa, mas decidimos por utilizar a WhatsAppWebJs por ter uma comunidade mais ativa e principalmente por ser mais intuitivo.

1

Showw, tentei utilizar da WhatsAppWebJs também, mas enfrentei alguns problemas na autenticação da sessão, após ler o qr code no terminal o processo não era ser concluido e não era possivel o uso do client, enfrentou dificuldades quanto a isso? se sim, como solucionou amigo?

Me interesso pois de fato é uma biblioteca mais atrativa.

2
0
1

Esse problema ocorre devido ao método utilizado para confirmar que a autenticação foi realizada, quando o WhatsApp atualiza alguma classe ou elemento do Html essa verificação pode quebrar, mas a comunidade arruma em minutos e já disponibiliza uma Pull Request para corrigir no geral. Por isso é importante participar do Discord deles, atualmente por exemplo a Release mais recente não recebe a autenticação devido a esses problemas, então precisa utilizar o último commit para que funcione corretamente:

npm i github:pedroslopez/whatsapp-web.js#152f0a64cdffdfb4d638043f537f87b2a6ebc492

0
1

Estou em um projeto que possui uma ideia parecida (multi atendimento/setores).

Qual banco de dados você optou por utilizar?
E foi atras pra ver sobre a questão de banimento do número? Se sim, oque você conseguiu de informação (por exemplo: banimento só ocorre se tiver spammado e com muitas denúncias)?

1

O NodeJs armazena as instâncias e algumas informações em MongoDB e o sistema web armazena em MySQL normal.

Sobre o banimento, realmente existe a chance mas são baixas se souber como controlar, evitar o envio de mensagens iguais para todos os contatos por exemplo sem uma lista de transmissão é problemático, basicamente evitar spams e não receber denúncias. O mais recomendado é utilizar automações exclusivamente com contatos que possuem seu número adicionado, assim evita ou reduz drasticamente as chances de banimento.

Uma explicação boa pode ser encontrada aqui

1

Então você utiliza 2 bancos simultaneos, isso?
E voce salva cada conversa no mongoDB?

Agradeço a explicação sobre banimentos!

1

As conversas são armazenadas apenas no serviço Web (MySql), o Mongo serve exclusivamente para armazenar dados das instâncias, como id personalizado, Id do criador, Url de webhook e outros

1

Parabéns pelo trabalho, pelo que explicou ficou excelente mesmo!
Também estou desenvolvendo um chatbot com o whatsapp-web.js (porém sem a integração com o GPT) inclusive estou usando uma lógica parecida com a sua, de sessões e cada sessão processa um tipo de informação. Porém tenho uma dúvida sobre como você tratou as mensagens do usuário, toda mensagem vc faz um request na API salvando a mensagem do usuário ou você trata diretamente? (a ação client.on('message'...)), pois estou enfrentando um problema que ao deixar o whatsapp fechado por algum tempo e abrir novamente, chega muitas mensagens de uma só vez, causando problema no fluxo.

1

Não me recordo se isso chegou a ser um problema, uma vez que as instâncias ficam ligadas 24/7, mas o sistema quando receba múltiplas mensagens (através da sincronização do WhatsApp) ele armazena utilizando a data de recebimento no aparelho como data da mensagem no banco de dados, assim uma mensagem recebida às 10:00 caso seja enviada ao servidor apenas às 14:00 ainda será salva como 10:00, então os fluxos levam essa data em consideração para realizar as ações.

Limitei o WhatsAppWebJs (em NodeJs) para fazer exclusivamente o trabalho com o WhatsApp, ele não leva nenhuma configuração de regra de negócio ou algo assim, as regras de negócio ficam exclusivamentes no sistema web, assim consigo por exemplo, utilizar o WhatsAppWebJs que criei para outros projetos distintos.

1
1

Tenho uma ideia pra usar o whatsApp aqui, para conseguir informações. Nada grande.
Tenho que testar pelo menos kkkk

Muito bom o seu projeto! Gigante!

Abraços

1

Cara, muito obrigado por este post. Foi muito bom ler sua experiência e é bom que ja enche a gente de ideias!

Sobre a decisão de manter uma máquina no escritório, isso já se provou ter sido uma boa escolha ou vc faria diferente?

Essa máquina precisou ser muito potente? Vc poderia compartilhar os requisitos?

Considerando todos os perigos envolvidos como queda de energia, conexão com a Internet ou acidentes físicos, uma ou algumas instâncias EC2 não seriam mais baratas até pela questão da tranquilidade?

1

Obrigado pelo feedback! As especificações da máquina são:

  • Processador Intel i7 12700k
  • 128GB de ram DDR4 3200mhz
  • 1TB SSD NVME

As máquinas virtuais que chegassem a essa configuração eram extremamente caras e conseguiram encontrar uma em um bom valor.

A empresa fica em um centro empresarial com gerador de emergencia (se não me engano) e também possui um nobreak para o computador e rede, então a rede cairia em situações muito especificas e ainda se acontesse seria curto o período.

Acredito que a máquina local tenha sido a melhor opção, uma vez que a empresa contratante precisava de mais de 50 instâncias e isso seria caro para manter em nuvem, em uma empresa que utilizasse poucas (ou até só uma) instâncias, uma máquina em nuvem com alguns poucos GBs já seriam o suficiente.

1
1

Excelente post, eu atualmente estou desenvolvendo uma POC para centralizar os chats do whatsapp, insta e facebook (Isso ja existe hoje em dia) mas to vendo por mim mesmo.

1

Opa, cara... Eu comecei a implementar um projeto parecido e em menor versão, mas usei o baileys-js, que faz o trabalho do whatsappwebjs porém com muito menos recursos por usar conexão direta com socket e não simulação de browser (puppeteer).

Cara, esse tipo de projeto daria pra vender muito caro, inclusive tenho uns contatos bacanas que talvez vc poderia conversar, pessoas de clínicas e estabelecimento que pagariam (caro) pra ter uma solução como essa em formato de whitelabel.

Se quiser bater um papo, quem sabe n dá pra criar uma renda extra aí pra tu

1

Muito interessante, como podemos conversar? Sobre a lib, vi sobre algumas que realizavam o que a que você citou faz, mas segundo alguns comentários, a possibilidade de banimento do número se for feito assim é maior, por isso optei pela WhatsAppWebJs.

1
1

Caraca solução bacana, um tempo atrás vi uma empresa usando algo nesse estilo, porém é algo menos específico, se chama ezchat, meio que aqueles chat bot padrão de sempre, porém a solução deles é até que interessante, eles criam um fluxo usando árvore, e criando c
variáveis e ações e cada node, podendo até escrever código em javrascript, só que no caso deles se tu quiser uma solução de resposta mais humanizada tem como integrar com uma IA só que com o Watson da IBM. Mas essa solução é basicamente tipo aqueles chat que centralizam meio que o chat de suporte do site, caso chame direto no whatsapp, ou alguns outros tudo em um lugar, não explorei muito, mas pelo o que eu vi é uma solução bem parruda para alguma coisa, no caso dessa empresa eles queriam que nós fizéssemos algo parecido, porque o suporte da empresa dessa ferramenta é meio precário e vive dando bugs, mas a essência da ideia é bem estruturada, uma coisa que eu achei interessante foi a abstração que eles fizeram em muita coisa pra suporta integração, tipo como é diversos canais de atendimento, acredito que na parte do código tenha sido pelo menos bem escrito para dar tudo certo, gostaria de ver como implementaram mas vendo a ferramenta já da pra ter uma noção, além das integrações de canais de atendimento, possuí com diversos meio de facilitar o atendimento e rotinas como cobrança de se conecta na api da empresa e usando o próprio fluxo que eles fizeram da pra cobrar contatos automaticamente quando está em estado de inadimplência por exemplo.