Pode escrever um número de telefone praticamente como quiser — com espaços, hífenes, parênteses, com `+`, com `00` ou sem indicativo nenhum. Mas, antes de uma mensagem sair, tem de ficar claro a que rede móvel se destina. Por isso, o portal é **tolerante quando introduz um número** e **rigoroso quando envia**: tudo o que não conseguimos associar a um operador concreto nunca sai.

## Como lemos um número

Todos os números passam pelo mesmo tratamento quando são introduzidos:

1. **Eliminamos tudo o que não é um dígito** — espaços, hífenes, pontos, parênteses e o sinal `+`.
2. **Removemos um `00` inicial** — para nós, a forma internacional `00420…` é igual a `+420…`.

A forma de escrita não faz, portanto, qualquer diferença — estas quatro variantes resultam todas num único e mesmo número:

| o que introduz | resultado |
|:--|:--|
| `+420 777 888 555` | `420777888555` |
| `00420777888555` | `420777888555` |
| `(420) 777-888-555` | `420777888555` |
| `420.777.888.555` | `420777888555` |

> [!NOTE]
> O sinal `+` é eliminado como qualquer outro carácter que não seja um dígito. Por isso, é indiferente escrever o número como `+420`, `00420` ou simplesmente `420`.

## Números locais e o indicativo do país

Um número local — por exemplo `777 888 555` — não diz a que país pertence. Por isso, procuramos passo a passo o país cujo indicativo devemos acrescentar:

1. **O número já tem um indicativo internacional** — deixamo-lo como está.
2. **O país do contacto** — se o contacto em causa tiver um país atribuído, usamo-lo.
3. **O país indicado no envio** — caso contrário, usamos o país que selecionou no formulário ou que transmitiu na API.
4. **O país da sua conta** — se também aí não houver nenhum, usamos o país definido na sua conta BulkGate. O mais provável é estar a enviar para o seu próprio país.

Com base no país encontrado, acrescentamos o indicativo e removemos um eventual zero inicial:

| o que introduz | país encontrado | resultado |
|:--|:--|:--|
| `777 888 555` | Chéquia | `420777888555` |
| `0777 888 555` | Chéquia | `420777888555` |
| `+48 600 700 800` | Chéquia | `48600700800` — mantém o seu próprio indicativo |

Os números que já têm um indicativo internacional ficam intactos. Por isso, não é preciso limpar previamente um ficheiro que mistura números locais e internacionais. Onde se seleciona o país e como introduzir contactos de vários países de uma só vez é explicado em [Atribuir país aos contactos](https://www.bulkgate.com/pt/centro-de-ajuda/agenda-de-contactos/atribuir-pais-aos-contactos/).

> [!IMPORTANT]
> Se enviar para um país diferente do da sua conta, não confie no último passo. Um número local receberia o indicativo do seu país e ficaria inválido. Selecione, por isso, o país no contacto ou no envio, ou escreva os números em formato internacional desde o início.

Alguns países têm um prefixo nacional mais longo do que um único zero, ou não têm nenhum. Para esses temos regras próprias, pelo que também aí a escrita local funciona — ainda assim, reescrevê-la em formato internacional continua a ser a opção mais segura.

## Validação do número e associação à rede

Para que uma mensagem saia, não basta que o número pareça um número. Temos de o associar a uma **rede móvel concreta**. Por isso, validamos sempre o número como um todo:

1. **Acrescentamos o indicativo internacional**, se faltar — conforme descrito em [Números locais e o indicativo do país](#numeros-locais-e-o-indicativo-do-pais).
2. **Encontramos o prefixo da rede** — a partir dos dígitos a seguir ao indicativo internacional, determinamos a que rede móvel pertence o número.
3. **Verificamos o comprimento** — o resto do número tem de ter o comprimento atribuído a esse prefixo de rede.

Só a rede encontrada determina o percurso que a mensagem segue e o seu preço.

Um número não reconhecido é marcado como `Número inválido` e não segue adiante:

- **Não é criada nenhuma mensagem.** Também não a encontrará no histórico — consulte [A mensagem não foi entregue](https://www.bulkgate.com/pt/centro-de-ajuda/informacoes-gerais/mensagem-nao-entregue/).
- **Nada é cobrado.** Estes números não entram no resumo da campanha nem no cálculo do preço.
- **A campanha continua.** Os restantes destinatários recebem o envio normalmente e pode acompanhar o número de números inválidos durante o envio.

> [!NOTE]
> Um número reconhecido ainda não significa que a mensagem vai sair. Pode ser travada pela [blacklist ou pelo cancelamento da subscrição (opt-out)](https://www.bulkgate.com/pt/centro-de-ajuda/ferramentas/blacklist-e-opt-out/) e pela definição `Restrições de envio` da sua conta, que contém a lista de países para os quais pode enviar.

### Números portados para outro operador

Um número que o destinatário portou para outro operador mantém o prefixo de rede original. Na validação, associamo-lo por isso primeiro ao **operador original**. No momento do envio, usamos então o [registo HLR](https://en.wikipedia.org/wiki/Network_switching_subsystem#Home_location_register_.28HLR.29) para saber em que rede o número está **realmente** e cobramos a mensagem ao preço desse operador.

## Onde se faz a verificação

| onde | o que significa |
|:--|:--|
| [Importação para a agenda de contactos](https://www.bulkgate.com/pt/centro-de-ajuda/agenda-de-contactos/importar-contactos-para-a-agenda/) | só são guardados os contactos com um número reconhecido; as restantes linhas são ignoradas; o número é guardado em formato internacional juntamente com o país, o indicativo e a rede |
| Importação para uma campanha | a mesma verificação que na agenda de contactos — quer adicione números a partir de um ficheiro, de um vCard ou manualmente |
| Mensagem de teste | o número tem de passar a verificação; caso contrário, o teste não é enviado |
| [Blacklist](https://www.bulkgate.com/pt/centro-de-ajuda/ferramentas/blacklist-e-opt-out/) | só é possível adicionar um número reconhecido |
| API e módulos | os números passam pela mesma verificação que no portal |

## Como verificar os números antecipadamente

Para ter a certeza antes de um envio, passe os números pela [verificação de números de telefone](https://www.bulkgate.com/pt/documentacao/integration-api/integration-verificacao-numeros-telefone/). Para cada número, recebe a indicação de se é válido, a que país pertence, o seu indicativo e a rede em que se encontra. Um número não reconhecido é devolvido com `valid: false` e a rede `unknown`.

Em PHP, pode chamar a mesma verificação através do [NumberChecker](https://www.bulkgate.com/pt/documentacao/php-sdk/php-sdk-verificador-de-numeros/2.0/) do nosso SDK.

> [!TIP]
> A verificação é gratuita e é útil para a limpeza regular da sua base de contactos: trate dos números assinalados como `unknown` antes que uma campanha dependa deles.

## Quando um número é válido, mas nós não o conhecemos

Os planos de numeração mudam: os operadores recebem novas gamas e surgem redes virtuais. Por isso, um número que funciona pode acabar marcado do nosso lado como `Número inválido` — e esse é um caso para o apoio ao cliente. Acrescentamos a gama à nossa base de dados de redes e o número passa a ser aceite.

1. No menu do portal, clique em `Apoio, suporte` e depois em `Contate-Nos`
2. No campo `Sujeito`, escolha `Entre em contato com o suporte`
3. Selecione o `País` a que o número pertence
4. No segundo campo `Sujeito`, escreva o assunto do pedido — por exemplo `Número de telefone não reconhecido`
5. Em `Descrição do problema`, indique o número completo em formato internacional, o operador, se o souber, e onde se deparou com o problema
6. Clique em `Mandar`

> [!TIP]
> Uma amostra também ajuda: se toda uma gama de números se comportar da mesma forma, envie vários. A partir de um único número não conseguimos perceber se se trata de um erro de digitação ou de uma gama que nos falta.

Se não tiver sessão iniciada no portal, utilize o [formulário de contacto](https://www.bulkgate.com/pt/contacto/) — escolha o mesmo `Sujeito` e acrescente o `Email` com que a sua conta está registada.
