Puede escribir un número de teléfono casi como quiera: con espacios, guiones, paréntesis, con `+`, con `00` o sin prefijo internacional. Pero antes de que salga un mensaje, debe quedar claro a qué red móvil va dirigido. Por eso el portal es **tolerante al introducir un número** y **estricto al enviar**: nada que no podamos asignar a un operador concreto llega a enviarse.

## Cómo leemos un número

Al introducirlo, cada número pasa por el mismo tratamiento:

1. **Eliminamos todo lo que no sea un dígito**: espacios, guiones, puntos, paréntesis y el signo `+`.
2. **Quitamos el `00` inicial**: para nosotros, la forma internacional `00420…` es lo mismo que `+420…`.

Por tanto, la forma de escribirlo no importa: estas cuatro variantes acaban siendo un mismo número:

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

> [!NOTE]
> El signo `+` se elimina como cualquier otro carácter que no sea un dígito. Por tanto, da igual que escriba el número como `+420`, `00420` o simplemente `420`.

## Números locales y prefijo del país

Un número local, por ejemplo `777 888 555`, no indica a qué país pertenece. Por eso buscamos paso a paso el país cuyo prefijo internacional debemos añadir:

1. **El número ya lleva un prefijo internacional**: lo dejamos tal cual.
2. **El país del contacto**: si el contacto en cuestión tiene un país asignado, lo usamos.
3. **El país indicado al enviar**: en caso contrario, tomamos el país que haya seleccionado en el formulario o enviado en la API.
4. **El país de su cuenta**: si tampoco se indica allí, usamos el país configurado en su cuenta de BulkGate. Lo más probable es que envíe a su propio país.

Según el país encontrado, añadimos el prefijo internacional y eliminamos el posible cero inicial:

| lo que introduce | país encontrado | resultado |
|:--|:--|:--|
| `777 888 555` | Chequia | `420777888555` |
| `0777 888 555` | Chequia | `420777888555` |
| `+48 600 700 800` | Chequia | `48600700800`: se conserva su propio prefijo internacional |

Los números que ya llevan un prefijo internacional no se modifican. Así que no hace falta depurar de antemano un archivo que mezcle números locales e internacionales. Dónde se selecciona el país y cómo introducir a la vez contactos de varios países se explica en [Asignar país a los contactos](https://www.bulkgate.com/es/centro-de-ayuda/agenda-de-contactos/asignar-pais-a-los-contactos/).

> [!IMPORTANT]
> Si envía a un país distinto del de su cuenta, no confíe en el último paso. Un número local recibiría el prefijo de su país y acabaría siendo inválido. Por eso, seleccione el país en el contacto o al enviar, o escriba los números en formato internacional desde el principio.

Algunos países tienen un prefijo nacional más largo que un solo cero, o no tienen ninguno. Para ellos mantenemos reglas propias, de modo que la notación local también funciona allí; aun así, reescribirla en formato internacional sigue siendo la opción más segura.

## Validación del número y asignación a la red

Para que un mensaje se envíe, no basta con que el número parezca un número. Tenemos que asignarlo a una **red móvil concreta**. Por eso siempre validamos el número completo:

1. **Añadimos el prefijo internacional** si falta, tal como se describe en [Números locales y prefijo del país](#numeros-locales-y-prefijo-del-pais).
2. **Buscamos el prefijo de red**: a partir de los dígitos que siguen al prefijo internacional determinamos a qué red móvil pertenece el número.
3. **Comprobamos la longitud**: el resto del número debe tener la longitud asignada a ese prefijo de red.

Solo la red encontrada determina la ruta que sigue el mensaje y su precio.

Un número no reconocido se marca como `Número invalido` y no sigue adelante:

- **No se crea ningún mensaje.** Tampoco lo encontrará en el historial; consulte [El mensaje no se ha entregado](https://www.bulkgate.com/es/centro-de-ayuda/informacion-general/mensaje-no-entregado/).
- **No se cobra nada.** Estos números no cuentan ni en el resumen de la campaña ni en el cálculo del precio.
- **La campaña continúa.** Al resto de destinatarios se les envía con normalidad y durante el envío puede seguir el recuento de números inválidos.

> [!NOTE]
> Que un número se reconozca no significa todavía que el mensaje vaya a enviarse. Puede detenerlo el [blacklist o la baja de suscripción](https://www.bulkgate.com/es/centro-de-ayuda/herramientas/blacklist-y-baja-de-suscripcion/), así como el ajuste `Restricciones de envío` de su cuenta, que contiene la lista de países a los que puede enviar.

### Números portados a otro operador

Un número que el destinatario ha portado a otro operador conserva su prefijo de red original. Por eso, durante la validación lo asignamos primero al **operador original**. En el momento del envío utilizamos el [registro HLR](https://en.wikipedia.org/wiki/Network_switching_subsystem#Home_location_register_.28HLR.29) para averiguar en qué red está **realmente** el número y cobramos el mensaje al precio de ese operador.

## Dónde se realiza la comprobación

| dónde | qué significa |
|:--|:--|
| [Importación a la agenda de contactos](https://www.bulkgate.com/es/centro-de-ayuda/agenda-de-contactos/importar-contactos-a-la-agenda/) | solo se guardan los contactos con un número reconocido; las demás filas se omiten; el número se guarda en formato internacional junto con su país, prefijo internacional y red |
| Importación a una campaña | la misma comprobación que en la agenda de contactos, tanto si añade números desde un archivo, desde una vCard o a mano |
| Mensaje de prueba | el número debe superar la comprobación; de lo contrario, la prueba no se envía |
| [Blacklist](https://www.bulkgate.com/es/centro-de-ayuda/herramientas/blacklist-y-baja-de-suscripcion/) | solo se puede añadir un número reconocido |
| API y módulos | los números pasan por la misma comprobación que en el portal |

## Cómo verificar los números de antemano

Para ir sobre seguro antes de un envío, pase los números a la [comprobación de números de teléfono](https://www.bulkgate.com/es/documentacion/integration-api/integration-check-phone-numbers/). Para cada número obtendrá si es válido, a qué país pertenece, su prefijo internacional y la red en la que está. Un número no reconocido se devuelve con `valid: false` y la red `unknown`.

Desde PHP puede llamar a la misma comprobación mediante el [NumberChecker](https://www.bulkgate.com/es/documentacion/php-sdk/php-sdk-comprobacion-de-numero/2.0/) de nuestro SDK.

> [!TIP]
> La comprobación es gratuita y resulta muy útil para depurar periódicamente su base de contactos: resuelva los números marcados como `unknown` antes de que una campaña dependa de ellos.

## Cuando un número es válido pero no lo conocemos

Los planes de numeración cambian: los operadores obtienen nuevos rangos y aparecen redes virtuales. Por eso puede ocurrir que un número que funciona quede marcado en nuestro sistema como `Número invalido`, y eso es un caso para el soporte. Añadiremos el rango a nuestra base de datos de redes y el número empezará a funcionar.

1. En el menú del portal, haga clic en `Apoyo` y después en `Contáctenos`
2. En el campo `Tema`, elija `Soporte de contacto`
3. Seleccione el `País` al que pertenece el número
4. En el segundo campo `Tema`, escriba de qué trata el aviso, por ejemplo `Número de teléfono no reconocido`
5. En `Descripcion del problema`, indique el número completo en formato internacional, el operador si lo conoce y dónde se encontró con el problema
6. Haga clic en `Enviar`

> [!TIP]
> También ayuda una muestra: si todo un rango de números se comporta igual, envíe varios de ellos. A partir de un solo número no podemos saber si se trata de una errata o de un rango que nos falta.

Si no ha iniciado sesión en el portal, utilice el [formulario de contacto](https://www.bulkgate.com/es/contacto/): elija el mismo `Tema` y añada el `Email` con el que está registrada su cuenta.
