Verificar nº do telefone whatsapp o mesmo do chat

Antes do meu primeiro Tópico, agradeço à comunidade por ajudar tanto, já tive muitas dúvidas que conseguir resolver a maioria por aqui mesmo. OBRIGADO!
Então…
Estou usando o contact.identity para salvar o nº do whatsapp do cliente.
E estou solicitando que o cliente envie o nº de telefone de cadastro no crm seja o mesmo que esta falando no bot.
Se for o mesmo nº fazemos uma requisição para repassar a informação.
Um dos problema é que o contact.identity salva o nº com o DDI(55) e quando solicitamos pedimos só o DD+Nº(“amigavel” pro cliente). E nem acho que isso seja o grande problema
o Script é simples de comparação! Porem não consigo validar a igualdade.
Segue o script:
function run(fone,telefoneUsuario){
fone = JSON.parse(fone);
telefoneUsuario = JSON.stringify(telefoneUsuario); // recebo do contact.identity
let tel = “55”;
let fin = tel.concat(fone)
if (fin == telefoneUsuario)return “fone ok”
else
return “fone diferente”
}

sempre tenho o retorno “fone diferente”, testando pelo whatsapp com o mesmo nº.

alguém já passou por algo parecido ou pode ajudar?

2 curtidas

Bem vindo à community, @robson_bruno !!

Rapaz, eu não entendi o porque de você estar passando um Stringfy no contact.identity, mas isso é só um detalhe, não sei também se está afetando o comportamento, porém eu nunca usei dessa forma.

O que eu pensei aqui:

  1. O usuário pode digitar traços, pontos, parenteses, espaços… portanto é importante tratar isso.
  2. O contact.identity nem sempre retorna o nono dígito, pelo menos é o meu caso (acho que é porque eu já tinha o whatsapp antes de acrescentar o nono dígito).
  3. Diante dos dois pontos anteriores, comparar o telefone completo pode se tornar um problema.

Mas vamos para o que interessa, certo?

Utilize as variáveis de entrada nessa ordem: input.content & contact.identity
Utilize o seguinte script:

function run (tel, identity) {

    tel = tel.replace(/\D/g, ''); // remover qualquer caracter especial que o cliente pode ter digitado
    tel = tel.slice(4,fone.length); // elimina os 4 primeiros dígitos informado pelo usuário
    identity = identity.split("@")[0];  // com isso, a var passa a ser apenas os números antes do @

    if (identity.includes(tel)) { return true } // se o valor de 'tel' estiver "dentro" do valor do contact.identity, retorna verdadeiro
    else { return false }
}

Com esse exemplo, você terá o seguinte resultado:

Input do usuário Contact.Identity Retorno
031991234567 [email protected] true
31991234567 [email protected] true
991234567 [email protected] true
91234567 [email protected] true
(31) 9 9123-4567 [email protected] true
(31) 9.9123.4567 [email protected] true
88794567 [email protected] true

Note que o último exemplo da tabela passa como true, esse é um dos maiores problemas que você poderá ter, apesar de que a chance de isso acontecer deve ser pequena.

Mas esse é só um modelo, quem sabe já te ajuda ou outra pessoa contribui com outras formas.

Obriado por compartilhar esse seu problema conosco. Espero que eu tenha ajudado de alguma forma.

Abraços.

4 curtidas

Ei @robson_bruno, como você está?

Fiquei feliz demais com esse feedback. Já deu para perceber que o nosso Fórum e a Blip Community é um lugar incrível, né? Então seja super bem-vindo e volte não só sempre que precisar solucionar um problema, mas também quando sentir que pode ajudar, respondendo perguntas ou compartilhando experiências.

Espero que o @GabrielPetrone tenha conseguido te ajudar, viu? Qualquer coisa, estamos por aqui.

2 curtidas

O includes era o que precisava! para comparar os números! Devo solicitar a entrada do usuário de 10 - 11 dígitos para que não coloque só o inicio do telefone.
Grato!

2 curtidas