Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/chatwoot validate 9 digit #393

Merged
merged 2 commits into from
Feb 2, 2024
Merged

Fix/chatwoot validate 9 digit #393

merged 2 commits into from
Feb 2, 2024

Conversation

deivisonrpg
Copy link
Contributor

@deivisonrpg deivisonrpg commented Feb 2, 2024

Changed the search fields to only consider the phone_number, there is no need to search in all fields.
Changed payload format for the filter, each phone number must have its own payload, if you place it within the values array, chatwoot only searches for the first number disregarding the second, occasionally causing duplication of the contact.
Changed the filter_operator to equal_to, this will optimize the query as it will no longer use LIKE in the database query.
In the values array you must remove the + from the number as it is not stored in the DB.

PT-BR

Alterado os campos de procura para considerar somente o phone_number não há necessidade de procurar em todos os campos.
Alterado formato do payload para o filtro, cada numero de telefone deve ter seu proprio payload, caso coloque dentro do array values o chatwoot só busca o primeiro numero desconsiderando o segundo, causando duplicação do contato ocasionalmente.
Alterado o filter_operator para equal_to, isso irá otimizar a consulta já que deixará de usar LIKE na query do banco.
No array values deve-se retirar o + do numero já que ele não é armazenado no DB.

Créditos: @yvescleuder

Fix #382

@DavidsonGomes DavidsonGomes merged commit 0547ff7 into EvolutionAPI:develop Feb 2, 2024
@@ -447,27 +447,29 @@ export class ChatwootService {
}

private getSearchableFields() {
return ['identifier', 'phone_number', 'name', 'email'];
return ['phone_number'];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creio que não pode somente buscar pelo phone_number, olhei na minha base em produção e temos vários cenários onde os contatos que vem pela EvolutionAPI tem somente o identifier DDD + Numero + @s.whatsapp.net
E não tem o campo phone_number

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eu ainda não vi nenhum caso em que não tenha vindo o numero inteiro do campo phone_number, talvez o @DavidsonGomes consiga nos confirmar.
@DavidsonGomes você acha que tem necessidade de inserirmos para buscar o numero de telefone nos campos identifier e nome? Ai nesse caso teríamos que usar o contains mesmo.

@yvescleuder
Copy link
Contributor

yvescleuder commented Feb 2, 2024

Coloquei uma observação na PR, creio que precisa do identifier.
Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email.
https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951

Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros.
Tenho um contato que tem o número 9 adicional.
Fiz o teste buscando na primeira posição o número sendo com 9
["+5599991277171", "+559991277171"]
Buscou certinho.
Depois fiz a primeira sendo o numero sem o 9.
["+5599991277171", "+559991277171"]
também funcionou.

Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +

Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

@deivisonrpg
Copy link
Contributor Author

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951

Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.

Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +

Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você tem razão, caso use o contains, funciona acrescentar mais de um numero dentro do array, usando equals_to ele apresenta o comportamento que eu descrevi.

@deivisonrpg deivisonrpg deleted the fix/chatwoot-validate-9-digit branch February 2, 2024 18:49
@deivisonrpg
Copy link
Contributor Author

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951

Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.

Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +

Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

@deivisonrpg
Copy link
Contributor Author

deivisonrpg commented Feb 2, 2024

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951
Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.
Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +
Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

Na verdade nem pra grupos não fez diferença, pelos testes continuou funcionando os grupos normalmente sem o campo identifier pode ter algumas situações que eu não encontrei. Vou aguardar mais testes.

@yvescleuder
Copy link
Contributor

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951
Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.
Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +
Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

Na verdade nem pra grupos não fez diferença, pelos testes continuou funcionando os grupos normalmente sem o campo identifier pode ter algumas situações que eu não encontrei. Vou aguardar mais testes.

Os grupos não entram na condição que mexemos, pois tem um if antes desse caso.
Essa alteração seria somente para numeros que não são grupos.

Na minha base de dados do chatwoot, todos os contatos que entraram em contato comigo, não tem o campo "phone_number", somente o "identifier"

@deivisonrpg
Copy link
Contributor Author

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951
Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.
Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +
Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

Na verdade nem pra grupos não fez diferença, pelos testes continuou funcionando os grupos normalmente sem o campo identifier pode ter algumas situações que eu não encontrei. Vou aguardar mais testes.

Os grupos não entram na condição que mexemos, pois tem um if antes desse caso. Essa alteração seria somente para numeros que não são grupos.

Na minha base de dados do chatwoot, todos os contatos que entraram em contato comigo, não tem o campo "phone_number", somente o "identifier"

Eita, doidera em, na minha base mais de 10000 contatos todos tem telefone e nem sempre identifier hehehe, de toda forma to vendo que tem um problema, caso o a pessoa entrar em contato primeiro e não tiver o 9 depois alguém cadastrar o numero com o 9 digito ele vai continuar duplicando da mesma forma. Teríamos que dar um jeito de sempre preferir o contato com telefone com mais dígitos.

@yvescleuder
Copy link
Contributor

yvescleuder commented Feb 2, 2024

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951
Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.
Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +
Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

Na verdade nem pra grupos não fez diferença, pelos testes continuou funcionando os grupos normalmente sem o campo identifier pode ter algumas situações que eu não encontrei. Vou aguardar mais testes.

Os grupos não entram na condição que mexemos, pois tem um if antes desse caso. Essa alteração seria somente para numeros que não são grupos.
Na minha base de dados do chatwoot, todos os contatos que entraram em contato comigo, não tem o campo "phone_number", somente o "identifier"

Eita, doidera em, na minha base mais de 10000 contatos todos tem telefone e nem sempre identifier hehehe, de toda forma to vendo que tem um problema, caso o a pessoa entrar em contato primeiro e não tiver o 9 depois alguém cadastrar o numero com o 9 digito ele vai continuar duplicando da mesma forma. Teríamos que dar um jeito de sempre preferir o contato com telefone com mais dígitos.

Mas aqui creio que o problema seja do chatwoot.. não necessariamente da evolution api..
Se a gente fizer a correção de cadastro duplicado com numero 9 e sem 9, já vai da adiantar bastante.. vou da uma olhada no chatwoot para ver essa situação e subir um PR lá.
Voce usa API Oficial? Eu utilizo e os contatos vem por ele, tem somente phone_number e os que vem pela EvolutionAPI tem somente identifier

@deivisonrpg
Copy link
Contributor Author

Coloquei uma observação na PR, creio que precisa do identifier. Além disso, vi no código da Evolution que ele busca em alguns cenários pelo campo "name", talvez seria interessante ter pelo menos esses tres campos de volta, excluindo do email. https://github.com/EvolutionAPI/evolution-api/pull/393/files#r1476410951
Fiz o teste no cenário que você falou, onde dentro do values ter 2 numeros. Tenho um contato que tem o número 9 adicional. Fiz o teste buscando na primeira posição o número sendo com 9 ["+5599991277171", "+559991277171"] Buscou certinho. Depois fiz a primeira sendo o numero sem o 9. ["+5599991277171", "+559991277171"] também funcionou.
Talvez não tenha achado, pois não removi o + e de fato o campo "identifier" não salva com o +
Se colocar no filter_operator a opção "equals_to" não funciona, teria que ser "contains"

Você também tem razão sobre o campo identifier, pois ele é usado para grupos. vou acrescentar ele e o name conforme sua sugestão.

Na verdade nem pra grupos não fez diferença, pelos testes continuou funcionando os grupos normalmente sem o campo identifier pode ter algumas situações que eu não encontrei. Vou aguardar mais testes.

Os grupos não entram na condição que mexemos, pois tem um if antes desse caso. Essa alteração seria somente para numeros que não são grupos.
Na minha base de dados do chatwoot, todos os contatos que entraram em contato comigo, não tem o campo "phone_number", somente o "identifier"

Eita, doidera em, na minha base mais de 10000 contatos todos tem telefone e nem sempre identifier hehehe, de toda forma to vendo que tem um problema, caso o a pessoa entrar em contato primeiro e não tiver o 9 depois alguém cadastrar o numero com o 9 digito ele vai continuar duplicando da mesma forma. Teríamos que dar um jeito de sempre preferir o contato com telefone com mais dígitos.

Mas aqui creio que o problema seja do chatwoot.. não necessariamente da evolution api.. Se a gente fizer a correção de cadastro duplicado com numero 9 e sem 9, já vai da adiantar bastante.. vou da uma olhada no chatwoot para ver essa situação e subir um PR lá. Voce usa API Oficial? Eu utilizo e os contatos vem por ele, tem somente phone_number e os que vem pela EvolutionAPI tem somente identifier

Não só utilizo a Evolution, quando a pessoa entra em contato comigo e não tenho ela na agenda, ele sempre cadastra o phone_number e o identifier

image

@yvescleuder
Copy link
Contributor

Veja no meu cenário
image

@deivisonrpg
Copy link
Contributor Author

É então sem duvidas vamos ter que incluir o identifier, tenho algumas instalações e nenhuma tenho um caso parecido com o seu.

@deivisonrpg
Copy link
Contributor Author

Fix o pull pra adicionar o identifier #397

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants