Asterisk 12

20 Ene

Hola, como muchos de ustedes ya se habrán dado cuenta desde el pasado Diciembre el grupo de desarrolladores de Asterisk liberó la primer versión  estable de Asterisk 12. A pesar de que no es un Branch LTS, Asterisk 12 será (en mi opinión) un parte-aguas con respecto al modo de trabajar y desarrollar soluciones basadas en Asterisk.

Se preguntarán: ¿Qué es lo que lo hace tan especial? Bueno, técnicamente hablando Asterisk 12 es la fusión del proyecto Asterisk y Asterisk SCF, lo cual da como resultado una nueva arquitectura, los desarrolladores están pensando en dejar de lado el «bugguiento» chan_sip (aún se puede usar en Asterisk 12) por el nuevo core de SIP que usa PJSIP; además de un nuevo modelo de desarrollo usando ARI (no confundir con la interfaz de usuario de FreePBX) y de STATSIS.

Siguiendo la línea técnica habrá mucho que aprender ya sea para desarrollar soluciones basadas en ARI (Asterisk REST Interface), familiarizarse con el bus de mensajes de STASIS, comprender los nuevos registros que generará el CDR, aunque el más importante será la migración a CHAN_PJSIP.

De este último podemos decir que la configuración cambia bastante con respecto al «viejo» CHAN_SIP, y es que ahora no solo basta con crear un peer y las definiciones que generalmente usamos como: secret, host, allow, disallow, qualify, context, etc. No, ahora necesitaremos: definir un tipo de transporte para ser usado por el endpoint, crear el endpoint, crear el AOR (Address Of Record) del endpoint, crear las autenticaciones del endpoint (auths), entre otras. Por ejemplo: si se tratase de una línea SIP o si hay que registrarse o si estamos fuera de la red. Suena complejo, ¿no? Lo cierto es que con el uso diario uno se va acostumbrando. Ejemplifico lo anterior:

Sintaxis para Asterisk 1.X, 10 y 11

[1000]
context=home
secret=mysupersecret
host=dynamic
disallow=all
allow=ulaw
allow=g729
callerid="Casa"<1000>
qualify=yes
....

Sintaxis para Asterisk 12:

;TRANSPORTE
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0

;Dispositivo 1000
[1000]
type=endpoint
context=casa
disallow=all
allow=ulaw
allow=g729
transport=simpletrans
auth=1000
aors=1000

;AUTH
[1000]
type=auth
auth_type=userpass
password=mysupersecret
username=1000

;AOR
[1000]
type=aor
max_contacts=5

Tuve la fortuna de probar las versiones alphas de Asterisk 12 cuando el CHAN_PJSIP se llamaba CHAN_GULP y una de las funciones más atractivas tanto para los desarrolladores como para los usuarios es la posibilidad de registrar más de un dispositivo SIP a la misma cuenta y llamarlas sin necesidad de usar el & en la aplicación Dial. Bueno, la primera vez que lo usas es como comer helado. Para poder hacer esto hay que especificar en la sección AOR cuantos contactos/dispositivos pueden «registrarse» usando la misma información, para el ejemplo anterior serán 5 los dispositivos capaces de usar la información del ENDPOINT 1000, o sea que podemos registrar el télefono IP de la oficina, el teléfono IP de la casa, el softphone del Celular y aún así nos quedan 2 libres para poder conectar un softphone basado en WS por ejemplo o un softphone en cualquier otro sitio de emergencia. Para llamar a todos los contactos registrados basta invocar esta línea en nuestro dialplan:

exten => 1000,1,Dial(${PJSIP_DIAL_CONTACTS(1000)})

Eso sí, tendremos que poner especial atención al CDR cuando llamemos a nuestros contactos porque los demás aparecerán como UNANSWERED.

Hablando de la Interfaz REST de Asterisk(ARI) surgen un sin fin de posibilidades para programar lo que se les ocurra en el lenguaje de programación que deseen, un ejemplo muy vistoso de como usar esta nueva interfaz esta en esta dirección http://ari.asterisk.org/ y usa swagger-ui como ‘core’ para crear la documentación interactiva. Para aquellos que estén muy familiarizados con las APIs REStfull y JSON se les hará pan comido, a su servidor le da dolores de cabeza. Actualmente existen proyectos dedicados a usar ARI para reemplazar las applicaciones Voicemail y APP_QUEUE de Asterisk, lo cual lo hace muy interesante, en el canal de Youtube de  Asterisk está la conferencia de Paul Belanger sobre esto.

Sobre el nuevo bus de mensajes llamado STASIS no tengo mucho que decir ya que aún lo sigo probando y tratando de entender, así que para que doy mala información, lo único que puedo decir es que con la aplicación STASIS podremos generar eventos bajo demanda de un canal para después obtener dichos eventos vía un Websocket. Útil para esas aplicaciones que necesitan estar monitoreando llamadas(y no, no es como AMI de hecho ni ARI ni STASIS están hechas para reemplazar AMI).

Desde la perspectiva del usuario no habrá mucho cambio, salvo que tendrá un sistema mas robusto y si usan PJSIP un canal mas estable con menos BUGS.

Desde la perspectiva del integrador o desarrollador, sólo es cuestión de leer y leer; pero seamos honestos en este mundo de Linux siempre estamos leyendo y leyendo, lo cuál hará  el proceso mas llevadero. Hablando de la instalación surgen nuevas dependencias como PJPROJECT, JANSSON, LibSRTP(esta última la deberías instalar con todos tus asterisk en realidad). Para aquellos que siempre quisieron un Asterisk enfocado a ‘multi-tennant’, Asterisk 12 será su mejor amigo. Y lo mejor de todo es que para aquellos que son FAN FAN de las WEB GUI de Asterisk, la excelente noticia es que FreePBX ha sacado ya una versión beta para usar Asterisk 12, ha sido un gran trabajo en conjunto con los desarrolladores de Digium y sólo como probadita te dejan escoger entre Asterisk 11 o Asterisk 12, si deseas usar sólo CHAN_SIP, o sólo CHAN_PJSIP o ambos.

Viene un camino largo por recorrer con Asterisk 12 y parafraseando a Elio Rojano, «Asterisk 12 es la maduración de un proyecto» que lleva ya 10 años(o más) de vida.

Les dejo estos enlaces para saber más de Asterisk 12:

Instalación y Configuración de Asterisk 12.

Iniciándose con ARI.

Especificaciones del CDR y CEL en Asterisk 12.

Ejemplo de ARI en ASTERISK usando Swagger-UI(necesitas tener un Asterisk12 corriendo y soportando ARI).

¿Quieres saber de Multi-tennant y más información de Asterisk 12? Elio Rojano te regala una presentación I:M:P:R:E:S:I:O:N:A:N:T:E

Desarollo de Paul Belanger para dejar de usar APP_QUEUE basado en ARI.

El github de Payload.

Video acerca de Payload.