feat(chatwoot): import history messages to chatwoot on whatsapp connection#395
Conversation
…ction Messages are imported direct to chatwoot database. Media and group messages are ignored. New env.yml variables: CHATWOOT_IMPORT_DATABASE_CONNECTION_URI: URI to connect direct on chatwoot database. CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE: Indicates to use a text placeholder on media messages. New instance setting: sync_full_history: Indicates to request a full history sync to baileys. New chatwoot options: import_contacts: Indicates to import contacts. import_messages: Indicates to import messages. days_limit_import_messages: Number of days to limit history messages to import.
|
Ao conectar a instância as mensagens são importadas. Caso a instância seja desconectada, ao reconectar deveria importar somente as mensagens perdidas enquanto a instância esteve offline. Pelos testes que fiz, com o parâmetro sync_full_history habilitado, a baileys envia até um ano de histórico mas não tenho certeza, pois não consegui testar com muitos números. Se o histórico de mensagens é muito grande, você precisa deixar o aplicativo do whatsapp em primeiro plano por um momento depois de ler o qrcode, caso contrário ele pode parar de enviar o histórico e volta a enviar quando fica em primeiro plano novamente. Pelo menos é o que pareceu aqui para mim. No final do processo é importada as imagens dos contatos. Como esse é um processo realizado através da api do Chatwoot, por uma questão de performance é feito somente nas conversas mais recentes. Se puderem ajudar a testar, seria muito bom. Não consegui testar em muitos números. 👍 |
|
Existe a possibilidade de importar os arquivos de mídia também? |
|
Não vi isso ser possível em quase 99% das plataformas que usam api paralela, inclusive botconversa.
|
|
Eu penso que daria para onde tem a mídia pegar o base64 e depois inserir. |
|
Alguém poderia me explicar como eu poderia fazer, creio que fiz alguma coisa errada aqui, não vieram as mensagens e nem os contatos, eles aparecem na evolution, mas no chatwoot não aparecem, sou leigo, estou aprendendo agora, mas colocando a mão na massa, estou fazendo em VPS no docker. Obrigado |
@alexandrexgoulart, Opa, você chegou a definir a variável de ambiente com a URL de conexão com o postgres do Chatwoot? Chegou a verificar se estes dados de conexão estão corretos? Precisa dos dados desta conexão para podermos enviar as informações para dentro do Chatwoot: Precisa também habilitar no mínimo os seguintes parâmetros do Chatwoot (você pode fazer isso pelo postman ou acessando os endpoints de configuração da evo da sua instância do chatwoot. Em breve o pessoal vai colocar no manager também. Com isso vai ficar mais fácil): Dando tudo certo, vai aparecer estas mensagens no bot que faz a gestão da conexão da instância: Caso não conseguir, por favor envie os logs da evo para tentarmos entender o que pode ter acontecido. |
|
@jaison-x gostaria de confirmar se entendi certo sobre uma das possibilidade com essa feature: imagina que estou usando o chatwoot há algumas semanas e por algum motivo minha conexão cai. Durante o período sem conexão, o aparelho recebeu várias mensagem. Quando eu ler o QRcode novamente, ele vai importar as conversas e mensagens novas? |
Sim, vai importar somente as novas mensagens que não estavam dentro do seu histórico. São utilizadas as mensagens dentro do mongodb para verificar o que tem ou não, então é importante usar com a integração do mongo. A importação vai importar somente as mensagens perdidas neste período que ficou offline. |
Obrigado pelo esclarecimento. Existe alguma forma visual de saber se a conexão caiu? |
|
Eu tava agora testando isso e vou relatar o que está acontecendo aqui @jaison-x Primeiro como está configurada a minha Stack
A Evolution está configurada com o MongoDB com as seguintes variáveis de ambiente na hora de criar a evolution: E o que vem de resposta da minha api depois que eu executo o {{baseUrl}}/instance/fetchInstances é o resultado abaixo: Dito isso para saber como está toda a configuração o que acontece é que ele nem importou os dados antigos, de 30 dias, e eu quando desconecto propositalmente via API e mando uma mensagem quando está desconectado, depois que reconecto ele não traz essa mensagem desse período que ficou desconectado a API. Porém quando eu vou no MongoDB para procurar essa mensagem, enviado quando estava desconectado, eu vejo que assim que eu conecto as mensagens estão lá no mongo, porém não estão indo para o chatwoot. Não sei se falta configurar mais alguma coisa, ou a ordem que eu fiz algo pode ter interferido. Mas não funcionou isso aqui pra mim. |
Você chegou a configurar no env a conexão com banco de dados do Chatwoot pelo parâmetro CHATWOOT_IMPORT_DATABASE_CONNECTION_URI? |
Eu li com mais calma todo esse marge mais calma e entendi que precisava e adicionei depois! Mas também não foi. Eu atualizei o arquivo do Docker adicionando isso e atualizei o Container no portainer, e o arquivo final e ficou assim: Será que está faltando mais algo? Ah e eu em certifiquei também de acessar o postgress usando o o link de conexão para ter certeza que os dados estavam corretos, mas não foi. |
Eu não entendi esta última parte. Qual link você se refere? Para funcionar a evo precisa ter acesso ao banco de dados postgres do chatwoot usando aquela URI. Depois de configurar tudo, você deve ler o qrcode para realizar a conexão com o whats. Somente neste momento a importação é realizada. Dê uma olhada nos logs da evo após ler o qr code para ver se aparece algum erro. Se estiver configurado tudo certo para iniciar a importação, vai aparecer uma mensagem no chat de "Importando mensagens.. aguarde.. " algo neste sentido. |
|
Para quem está usando a aplicação via Docker, encontrei um problema que impedia a importação de mensagens por causa de um erro em um nome de variável de ambiente. Este problema foi corrigido na PR #477. |
Beleza, vou tentar instalar a imagem de develop e testar para ver se funciona agora! Aviso aqui do resultado. Obrigado @jaison-x |
|
Olá meu caro amigo @jaison-x encontrei um erro na importação das mensagens para o chatwoot poderia me ajudar a solucionar esse caso? LOG ANTERIORERRORINSTANCIA CRIADA NO CHATWOOTCURL USADA NA REQUESTMEU .ENV DOCKER |
RESOLVIDO!Resolvido o problema de conexão com o postgres por conta do SSL ! Ponto de correção: ( ignorar o ssl "?sslmode=disable" )
|
Trazendo feedback @jaison-x como comentei que faria após teste. Atualizei a imagem do meu docker para a de homologação. Troquei da "atendai/evolution-api:latest" para "atendai/evolution-api:homolog" agora. Com isso, no primeiro momento, aconteceu o mesmo problema que o @guilhermejansen relatou, e a resposta foi essa:
Mas lendo a resolução dele, com indicação para ignorar o SSL na configuração da URL de conexão, fez funcionar. Ou seja no final da URL só coloquei "?sslmode=disable" e funcionou. Alguns testes que fiz: 1. Teste de puxar 30 dias Testei tanto a parte de puxar X dias de histórico, no meu caso 30 dias, e veio bastante mensagem, acredito que certinho. Não verifiquei exatamente mensagem por mensagem para ver até quando veio, mas veio o suficiente, então para mim foi o suficiente. Aqui está o resultado que mostrou na conversa da Evolution dentro do Chatwoot, assim que fez o primeiro scan do QR Code.
. O único problema que notei foi que não puxou as mensagens que foram editadas, ou seja no histórico todas as mensagens, que tem o edited como no print abaixo, não apareceram no Chatwoot. . 2. Atualizar mensagens enquanto estava desconectado Fiz esse teste também, para ver se ia e foi certinho também. Comecei uma conversa de teste no Chatwoot, desconectei forçado no celular a conexão. Ai com ele desconectado respondi com o outro numero, e até respondi direto do celular para ver se ele puxava esse dado também (ou seja mantive uma conversa entre os dois números direto entre os Apps do Whatspp). Assim que reconectei veio todas a mensagens dessa conversa. Print do chat com a Evolution após conexão:
Exemplo da conversa que importou as mensagens depois:
Sugestão Não sei se aqui é o melhor lugar para sugerir isso, mas penso que para melhorias dessa feature, o melhor seria que a URL de conexão com o Postgress do Chatwoot pudesse ser configurada via API, e não em variável de ambiente, pq dessa forma não é possível conectar Chatwoots diferentes/hospedados em locais diferentes. Manter por exemplo 3 instancias em 3 chatwoots em instalações/hosts separados. Para minha realidade não me afeta, pq eu preciso só de 1 chatwoot e 1 whatsapp conectado, mas fiquei me perguntando que dessa outra forma abriria mais opções de uso e seria mais fácil de configurar/manipular isso depois do evolution instalada. Como não tenho conhecimento técnico avançado, talvez colocar variáveis de conexão com banco de dados para configurar na requisição da API na hora de criar a instância não seja o melhor, ou não possa, ou não seja seguro. Pode ter essa limitação também, que ai foge do meu conhecimento. Mas quis só trazer para discussão. Antes de finalizar queria parabenizar por essa feature que está incrível @jaison-x!! Funcionando e vai ajudar muito por aqui. Eu tinha deixado de usar o Chatwoot, e agora com esses testes vou voltar a usar em operação em breve. 💪🚀 |
|
Pessoal, estou tentando alterar essas variáveis de ambiente através do terminal SH do Contêiner, mudando o nome do arquivo ".env.example" para ".env" e restartando o contêiner. Mas não dá certo. As variáveis voltam ao estado original pois é criado outro contêiner... Alguma luz? Desculpa a ignorância! |
|
@VinCardoso I have a question on the test that you did. I have configured to ignore SSL in the connection URL and it seemed to work. I did the same test as you did, update messages while disconnecting evolution, after connecting the message I got while offline were updated so it works for me. However, the 30-day pull test didn't work for me. In chatwoot, I've set I've reconnect but no messages were imported. Is there any config somewhere that I missed? Thanks! |












Messages are imported direct to chatwoot database. Media and group messages are ignored.
New env.yml variables:
CHATWOOT_IMPORT_DATABASE_CONNECTION_URI: URI to connect direct on chatwoot database. CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE: Indicates to use a text placeholder on media messages.
New instance setting:
sync_full_history: Indicates to request a full history sync to baileys.
New chatwoot options:
import_contacts: Indicates to import contacts.
import_messages: Indicates to import messages.
days_limit_import_messages: Number of days to limit history messages to import.