Usando tecnologias OpenSource para VoIP (en especifico Asterisk) mostramos como saber el estado de todos los servicios de VoIP e infraestructura mostrando dashboards y enviando notificaciones realizadas a través de monitoreo enriquecido.
Por: Miguel Angel Torres
3. Acerca de mi
Y mi trabajo
Ingeniero en Sistemas Computacionales
Administrador de Sistemas
Lider de VoIP/CTI
PriceTravel Holdings
4. Acerca de mi Trabajo
1800 Empleados / 16 Instalaciones Fisicas Asterisk PBX / 22000 - 44000
Llamadas por Dia / 1000 Max I/O Llamadas Concurrentes
5. Open Source (Caso de Uso):
Infraestructura de ciente de
Telecomunicaciones
6. El gran problema
[root@PBX01 ~]# asterisk -rx 'mfcr2 show channels'
Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS Rx CAS
1 MX 20 4 No No IDLE BLOCK
2 MX 20 4 No No IDLE BLOCK
3 MX 20 4 No No IDLE BLOCK
4 MX 20 4 No No IDLE BLOCK
5 MX 20 4 No No IDLE BLOCK
6 MX 20 4 No No IDLE BLOCK
7 MX 20 4 No No IDLE BLOCK
8 MX 20 4 No No IDLE BLOCK
9 MX 20 4 No No IDLE BLOCK
10 MX 20 4 No No IDLE BLOCK
.....
Ninguna llamada I/O en Fallas de Proveedores
Ninguna alerta o aviso en Degradaciones del Sistema
Falta de conocimiento del estado de infraestructura
7. Monitoreo de Infraestructura
Antes del 2016
=> Con ar en el Servicio del Proveedor
=> Reportes de Usuario y Mesa de Servicio
=> Alertas y scripts muy mal implementadas
=> Uso de la CLI para determinar fallas
=> Ninguna implementacion de Monitoreo a Fallas
8. Manos a la obra, dar
una solucion
Insight (Monitoreo Automatico Activo & Enriquecido)
26. Insight Tercera Fase
Script de Marcado Automatico de Numeros
#!/usr/bin/python -W ignore::DeprecationWarning
import os
import
import csv
with open('/home/test_numbers.csv', 'r') as f:
reader = csv.reader(f)
numbers_list = list(reader)
print(numbers_list)
for number_to_call in numbers_list:
number_to_call = str(number_to_call[0])
print(number_to_call)
f = open('/var/spool/asterisk/outgoing/calltest_'+number_to_call+'.call','w')
f.write('Channel: Local/s@callmenow/nnCallerId: "TestCall<'+number_to_call+':
f.close()
27. IVR-AVP
Que es? Y para que un IVR AVP?
=> Validar Servicios de Proveedores de Telecomunicaciones
32. IVR-AVP
Ejemplo Dejavu Python
#!/usr/bin/python
import warnings
import json
warnings.filterwarnings("ignore")
from dejavu import Dejavu
from dejavu.recognize import FileRecognizer, MicrophoneRecognizer
# load config from a JSON file (or anything outputting a python dictionary)
with open("dejavu.cnf") as f:
config = json.load(f)
if __name__ == '__main__':
# create a Dejavu instance
djv = Dejavu(config)
# Fingerprint all the mp3's in the directory we give it
djv.fingerprint_directory("/opt/dejavu/mp3/", [".mp3"])
# Recognize audio from a file
audio = djv.recognize(FileRecognizer, "/opt/dejavu/mp3/test.mp3")
print "From file we recognized: %sn" % audio
34. IVR-AVP
Creacion de Base de Datos de Huellas Digitales
#!/usr/bin/python
import warnings
import json
warnings.filterwarnings("ignore")
from dejavu import Dejavu
from dejavu.recognize import FileRecognizer, MicrophoneRecognizer
# load config from a JSON file (or anything outputting a python dictionary)
with open("/opt/dejavu/dejavu.cnf") as f:
config = json.load(f)
if __name__ == '__main__':
# create a Dejavu instance
djv = Dejavu(config)
#fingerprint new audios
djv.fingerprint_directory("/var/www/html/dejavu/audios/", [".wav",".mp3"])
40. Conclusions
=> Lidiar con Proveedores de Telecomunicaciones es Di cil
=> Usar / Crear Herramientas de Monitoreo basadas en Open
Source
=> Usar Monitoreo Enriquecido y Automatizar Acciones
=> Automatizar Pequeñas tareas para Resolver Problemas