Você digita o seu número, o formulário recusa, e não há pista nenhuma de qual parte ele não gostou. Você tenta com o zero. Tenta sem. Tenta com sinal de mais, depois com dois zeros. Uma dessas formas acaba passando, ou nenhuma passa, e de qualquer jeito você termina sem a menor ideia do que aconteceu.
TL;DR: Uma recusa, sozinha, não te diz com qual número o serviço ficou, então adivinhar o valor armazenado a partir de uma mensagem de erro não é um método sólido. Olhe o que o formulário está de fato mostrando: o seletor de país, a dica do próprio campo e qualquer confirmação exibida de volta para você. Não existe regra universal para tirar o zero à esquerda nem para trocar o sinal de mais por dois zeros; as duas coisas variam de país para país. E um número que parece bem formatado ainda não é prova de que ele pode ser alcançado nem de que um serviço específico vai aceitá-lo.
Uma recusa não te diz o que o serviço armazenou
Esta é a parte a que vale resistir, porque parece trabalho de detetive e é, na maior parte, adivinhação.
Uma recusa genérica não estabelece como o que você digitou foi interpretado, se algo chegou a ser salvo, nem por que falhou. Alguns formulários conferem o formato no navegador e recusam antes de qualquer coisa ser enviada ou armazenada. Alguns devolvem na tela o que leram. Outros dizem apenas que o número é inválido. A mesma mensagem seca é compatível com um número registrado exatamente como você queria e recusado por um motivo sem relação nenhuma, com um número que perdeu um dígito e com um número lido segundo outro país. Qual desses casos se aplica não é algo que a mensagem resolva sozinha.
O que dá para fazer, em vez disso, é olhar as coisas que o formulário mostra.
Onde olhar em vez disso
O seletor de país. Formulários internacionais costumam dividir o número em dois: um controle de país ou de código de discagem, e um campo para o resto. São entradas separadas, e é perfeitamente possível ter os dígitos certos associados ao país errado. O país que você escolhe muda como os dígitos restantes são lidos, e o FAQ do projeto libphonenumber descreve exatamente essa dependência — a região informada governa como os dígitos iniciais são interpretados, inclusive se eles são tomados como código de país ou não.
A dica do próprio campo. O texto de exemplo e os modelos de formato indicam qual forma aquele formulário espera. Isso é orientação observável, e não prova de que a interface corresponde ao que o serviço armazena, e não estabelece que o exemplo está correto para o seu país. Onde a dica falta ou parece inconsistente, a ajuda do próprio serviço e a forma internacional do número declarada pelo seu provedor são referências melhores do que uma regra lembrada de cabeça.
Qualquer confirmação exibida de volta para você. Alguns serviços mostram o número que estão prestes a usar, muitas vezes parcialmente mascarado. Leia. Exibido por inteiro, é forte evidência do que a interface tem; mascarado, a coincidência dos últimos dígitos é uma pista, não uma identificação única. De todo modo, isso reflete o que o formulário está exibindo, o que não é, por si só, garantia sobre o que está armazenado por trás dele.
As configurações da própria conta, quando você consegue chegar nelas. Se você está entrando ou recuperando acesso, em vez de se cadastrando, uma tela de segurança ou de perfil pode mostrar o número registrado, e essa é uma fonte melhor do que qualquer coisa inferida de um erro. Só está disponível quando a conta existe e você ainda consegue entrar nela.
O zero à esquerda não tem regra que valha em todo lugar
O conselho que as pessoas repetem — tire o zero à esquerda ao acrescentar o código do país — é verdadeiro em muitos países e falso em outros, e aplicá-lo como lei produz números errados.
O projeto libphonenumber mantém uma lista de falsidades em que programadores acreditam a respeito de números de telefone, e uma delas é precisamente a crença de que um zero à esquerda num número doméstico sempre pode ser descartado ao discar do exterior. A Itália fornece o contraexemplo: o documento descreve um número que, desde 1998, carrega o prefixo como parte do próprio número, ilustrado como 012345 no âmbito doméstico e +39012345 no internacional, com o zero preservado. Esses dígitos são uma ilustração daquele documento, e não um número para discar, e o ponto é que números assim existem — não que todo número italiano se comporte desse jeito.
A mesma lista trata da outra metade do folclore. O sinal de mais de um número internacional nem sempre pode ser substituído por 00, porque o prefixo de chamada internacional varia de país para país — o do Japão é 010, não 00.
A consequência prática não é que você precise aprender as regras de todos os países. É que uma regra lembrada de cabeça é um substituto ruim para duas referências melhores: as instruções que o próprio campo dá, e a forma como o seu provedor declara aquele número no formato internacional. Digitar o que o provedor declara, em vez de uma versão que você transformou, evita inventar um número que nunca foi seu.
Para o que o sintoma aponta
| O que você observa | Com o que isso é compatível | O que inspecionar |
|---|---|---|
| O formulário recusa o número na hora | Possivelmente uma forma que este formulário não aceita; isso não estabelece que nada foi enviado | A dica ou o texto de exemplo do campo, e o seletor de país |
| O formulário aceita, mas nenhum código chega | Várias coisas, inclusive um número armazenado que não é o seu | O destino que o serviço exibe, e se aquela linha consegue receber mensagens |
| Recusa só quando você inclui o código do país | O campo pode já estar tratando o país em separado | Se existe um controle de país ao lado do campo |
| Aceito depois de corrigir o seletor | A correção resolveu um problema observável | Se um código chega agora; a correção sozinha não resolve a questão |
| Recusa só quando você tira o zero à esquerda | Pode ser um país em que o zero é preservado | O exemplo do próprio formulário, e não uma regra geral |
| Aceito, o código chega, mas uma tentativa posterior falha | Pode não ser um problema de formato nenhum | O que o serviço diz sobre a validade daquele código |
Duas situações que valem um passo a passo
As duas são hipotéticas, escritas para mostrar o raciocínio, não para relatar um caso.
O país que nunca foi trocado. Alguém em viagem digita o número de celular num formulário cujo seletor de país mostra o país em que a pessoa está no momento, e não o país ao qual o número pertence. Os dígitos estão certos. O formulário pode recusá-los, ou pode aceitá-los e lê-los segundo aquele outro país. Nenhum dos dois desfechos revela, sozinho, como os dígitos foram normalizados. O que é inspecionável é o seletor ao lado do campo e qualquer confirmação exibida antes do envio. Colocar o seletor no país do próprio número e reler a confirmação é a correção a fazer; se isso resolve o problema todo é algo que a próxima tentativa mostra, não algo que a correção garanta.
O zero que foi removido por princípio. Alguém tem um número italiano cujo zero à esquerda é genuinamente parte da forma internacional dele, e tira esse zero ao acrescentar o +39 porque o conselho conhecido manda fazer isso. O que essa pessoa digitou já não é o mesmo número. Se o formulário recusar, ela pode passar um tempo tentando outras transformações dos dígitos alterados. Se o formulário aceitar, a aceitação não revela o que o serviço fez com aquilo, e um código pode ou não chegar até ela. A conferência é a mesma nos dois casos — reler o que o serviço mostra e comparar com o número tal como o próprio provedor dela o declara no formato internacional, em vez de comparar com uma regra de bolso.
Por que um formato correto não é garantia
Duas coisas distintas são lidas num número bem formado, e nenhuma das duas decorre dele.
Formato válido não significa que o número é alcançável. O FAQ do libphonenumber é explícito ao dizer que uma faixa válida é aquela da qual números podem ser atribuídos por operadoras, e afirma com todas as letras que não se deve depender da biblioteca para determinar se um número está atualmente atribuído a uma pessoa específica e alcançável. Um número pode estar perfeitamente bem formado e simplesmente não estar em serviço.
Um número correto não significa que um serviço vai aceitá-lo. As plataformas aplicam regras próprias por cima do formato. Um número que um serviço aceita sem comentar pode ser recusado por outro, e a política da plataforma é um motivo possível entre vários, e não a explicação de toda diferença entre serviços. Quando um serviço devolve uma mensagem específica sobre um número não poder ser usado, o que esse tipo de recusa significa e o que não significa vale ser lido antes de mudar qualquer coisa.
O inverso também vale, o que é pouco intuitivo: a mesma lista de falsidades observa que um número inválido não necessariamente deixa de alcançar um destino, dando casos de discagem em que dígitos a mais são ignorados em algumas jurisdições. Ou seja, o fato de uma ligação se completar não é prova de que o número estava correto. Esse exemplo é sobre discagem, e este guia não o estende a como um serviço específico roteia uma mensagem de texto.
Quando o formato não era o problema
Se o número está digitado corretamente e confirmado, e mesmo assim nenhum código chega, a pergunta mudou.
Pode ser que a linha endereçada não consiga receber mensagens de jeito nenhum, que é o caso de um plano só de dados. Pode ser que o código tenha ido por outro caminho que não SMS, já que uma tela mostrando o seu número não te diz qual é o canal. Pode ser que o código tenha chegado e não entrasse no campo, o que é um problema à parte, com conferências próprias. Ou o código pode ter chegado e expirado, caso em que o que um número temporário pode fazer quanto a um segundo código é a leitura pertinente.
Limitações deste guia
Isto usa o material publicado pelo projeto libphonenumber para mostrar que transformações comuns de números não são universais. Não usa esse projeto como descrição de como um serviço qualquer valida números, e nada aqui implica que nós usemos aquela biblioteca.
Regras de numeração específicas de cada país não estão listadas aqui, e isso é deliberado: este não é um catálogo de planos nacionais de numeração. Onde a forma internacional correta do seu próprio número não estiver clara, o provedor que o emitiu e a ajuda do próprio serviço são os lugares de resolver isso.
Este guia não consegue te dizer o que um serviço específico armazenou. Leia o que o serviço exibe como orientação útil, não como prova do armazenamento interno dele, e não deduza esse armazenamento a partir de uma recusa.
As nossas respostas de ajuda cobrem o lado do pedido, e um chamado de suporte é a rota para qualquer coisa específica de um pedido que você fez com a gente.
FAQ
Dá para descobrir pela mensagem de erro qual número o serviço salvou?
Não a partir de uma recusa genérica, e essa é a principal coisa a levar daqui. Uma mensagem dessas não te diz como o que foi digitado foi lido, se foi salvo, nem o que falhou. Alguns formulários realmente devolvem na tela o que interpretaram, e onde isso acontece é útil. Onde não acontece, leia o destino que o serviço exibe, ou o número na tela de configurações da conta se você conseguir chegar até ela, em vez de deduzi-lo do erro.
Devo tirar o zero à esquerda quando acrescento o código do meu país?
Às vezes, e não existe regra que valha sempre. O projeto libphonenumber lista como falsidade a crença de que um zero à esquerda sempre pode ser descartado, e dá a Itália como contraexemplo, onde o zero é preservado na forma internacional. Siga o exemplo que o próprio formulário mostra em vez de aplicar uma regra lembrada de cabeça.
00 é a mesma coisa que o sinal de mais?
Não em todo lugar. 00 é um prefixo de chamada internacional comum, mas ele varia de país para país — o Japão usa 010. Se um campo pede formato internacional, a forma com o sinal de mais é a mais segura de digitar.
O formulário aceitou o meu número, então ele deve estar correto. É isso mesmo?
A aceitação significa que o número passou pelas conferências daquele formulário. Ela não estabelece que o número é seu, que ele está atribuído no momento, nem que ele consegue receber mensagens. O próprio FAQ do libphonenumber alerta contra tratar validade como evidência de que um número está atribuído e alcançável.
Meu número funciona para ligações, mas um serviço recusa. Por quê?
Os serviços aplicam políticas próprias por cima do formato, e elas são independentes de o número estar bem formado. Política é um motivo possível para um número aceito em outro lugar ser recusado aqui; não é o diagnóstico de toda diferença desse tipo. Leia a mensagem específica que o serviço dá, já que algumas delas distinguem situações bem diferentes.
Digitei o número errado e ele foi aceito. E agora?
Corrija onde o serviço pede por ele — no fluxo em que você está, se ele oferecer isso, ou nas configurações da conta, se você conseguir chegar lá — e então dispare um envio novo. Se o serviço não deixar trocar o número sem passar por uma verificação que você não consegue passar, isso virou um problema de recuperação naquele serviço, e não de formatação.
