Si alguna vez armaste una lista de contactos para una campaña de llamadas en Argentina, sabés lo que es el caos de los formatos telefónicos. El mismo número puede aparecer como 1100000001, 011-0000-0001, +541100000001 o 15-0000-0001 dependiendo de quién lo cargó. Y eso sin contar que cada carrier tiene su propio formato para recibirlos.

ValidadorNumGeo resuelve exactamente ese problema.

Qué hace

Toma un número en cualquier formato de entrada y devuelve:

  • Si es válido o no.
  • Si es fijo o móvil, usando la base oficial del ENACOM (48.903 bloques, 300 códigos de área) en lugar de heurísticas propias.
  • El operador asignado, la localidad y la provincia.
  • Nueve formatos de salida simultáneos: E.164, con 0, con 0+15, con 9, diez dígitos, formato Asterisk, entre otros.

13 carriers y plataformas soportadas: Simvoz, Claro, Personal, Movistar, IPLAN, Twilio, Voxbone, ViciDial, GoAutoDial, AsterVoIP y más.

Cómo se consume

Tres interfaces que conviven en la misma instalación:

CLI para procesar un CSV o Excel con miles de números y generar el archivo listo para importar al carrier:

python3 main.py export lista.csv simvoz --only-valid

FastAGI para que el dialplan de Asterisk valide en tiempo real antes de marcar, en menos de 1ms porque la base ENACOM vive en memoria:

exten => _X.,1,AGI(agi://127.0.0.1:4573/validate,${EXTEN})
 same => n,GotoIf($["${TELVAL_MODALIDAD}" = "CPP"]?movil)
 same => n,Dial(SIP/${TELVAL_CON0}@trunk_fijo)
 same => n(movil),Dial(SIP/${TELVAL_CON015}@trunk_movil)

REST API + Web UI para integraciones externas y para que un operador pueda normalizar una lista sin tocar la terminal: subís el CSV, elegís el carrier y descargás el archivo enriquecido.

curl "http://localhost:8080/validate?number=1100000001&provider=simvoz"

Una decisión de diseño

El core no tiene dependencias externas obligatorias, corre con Python puro. Fue una decisión deliberada: trabajo mucho con servidores Asterisk en producción, donde instalar dependencias no siempre es simple. Si hubiera requerido un stack pesado, nadie lo iba a usar donde más se necesita.

Hoy corre en producción como parte de la infraestructura de AsterVoIP, sobre Docker y Caddy. Para LXC con Asterisk, donde Docker no está disponible, la instalación es directa con systemd.

Código

github.com/sareakar/validadornumgeo

Documentación completa de endpoints, formatos de entrada, variables AGI y guías de instalación para Docker y LXC. PRs bienvenidos.