Mostrando entradas con la etiqueta PBX. Mostrar todas las entradas
Mostrando entradas con la etiqueta PBX. Mostrar todas las entradas

miércoles, 11 de julio de 2018

FreePBX y downgrade (accidental)

Llevaba mucho tiempo sin escribir y quiero aprovechar que hace unos días metí la gamba a la hora de gestionar los módulos del FreePBX que muchos ya sabéis tengo instalada, quería escribir cómo lo he arreglado para acordarme la siguiente vez que vuelva a tropezar sobre esa piedra.

Lo que hice fue lanzar un downgrade del FreePBX Framework de la versión 14 a la 13. El resumen es que me arrepentí cuando vi lo que había hecho y cuando lo paré, ya era demasiado tarde.

Modulo FreePBX Framework - Upgrade
Modulo FreePBX Framework - Upgrade

En el botón que me indica "upgrade" me ponía "downgrade". ¡Y lo seleccioné!

¿Cómo conseguí solucionarlo?

Buscando primero el módulo en la imagen .img o .iso desde donde se volcó el sistema que instalamos en la tarjeta SD de la raspberry.

FTK para extraer el módulo framework para FreePBX.
FTK para extraer el módulo framework para FreePBX.

Una vez extraído, lo vamos a subir por SFTP a nuestra carpeta /home del sistema que vamos a reparar. Recordemos dónde se guardan los módulos:

/var/www/html/admin/modules/framework/

Lo primero: crearemos una carpeta de seguridad para copiar los ficheros que se encuentran en la ruta del módulo:

mkdir localModuleFramework
cp -fR /var/www/html/admin/modules/framework/*.* ./

Habrá que elevar privilegios.  Y ahora toca machacar los datos de la carpeta (creo recordar que lo copie así, ojo, que podría dejarme algún parámetro):

cp -fR./carpetaConFramework/*.* /var/www/html/admin/modules/framework/


Y ahora hay que hacer la reinstalación. Como con el desaguisado que hemos montado no podremos usar la interfaz web tocará solucionarlo con la consola. Para ello usaremos la herramienta fwconsole.

fwconsole ma install framework

Una vez ha terminado de instalarlo, lo mejor será hacer el reload desde la misma consola:

fwconsole reload

Así es como he conseguido reinstalar el framework que, dicho sea de paso, no encontré otra forma de reinstalarlo.


lunes, 23 de mayo de 2016

SPA3102 y los códigos telefónicos I: rsyslog

Este post llevaba en la recámara mucho tiempo. De hecho, me lo he encontrado cuando estaba buscando cómo hacer los logs del SPA3102: tenía que repetir los pasos y no lo encontraba con Google, sabiendo que ya lo había hecho antes. Intentaré completarlo, porque esto lo dejé a medias hace mucho tiempo y ya no me urge la necesidad que tenía.

--

Esta es otra entrada más sobre el sistema PBX y los códigos telefónicos.

Por poner un ejemplo, cuando estás creando unos feature codes habrá que probarlos de alguna forma. En mi caso solía ser tirando del teléfono que tengo puesto en el SPA3102, que para eso lo compré. El problema que me he encontrado es que a veces me funciona, después me encuentro con que no... Sigue sin funcionar... Más adelante sí... Y eso no puede ser. Por lo tanto, como el trasto tiene la posibilidad de conectarse a un servidor de logs, voy a configurar mi RasPBX para que haga el log y después, si no se entiende muy bien (ya lo digo yo, que lo acabo de probar: es un poco críptico), se busca qué significa.  

Si buscamos manuales, nos encontraremos con que te hablan del sistema syslogd. Pero resulta que el que viene instalado es rsyslog. Si por algún casual tuvieses syslogd, este manual parece que tiene buena pinta. Al menos en lo que a este tema se refiere. En nuestro caso, tocará buscar el específico para rsyslog. Aquí he encontrado uno, que nos dice que hagamos más o menos lo siguiente:

En /etc/rsyslog.conf:
  • Descomentar:
    • $ModLoad imudp
    • $UDPServerRun 514
  • Además, vamos a permitir o tener descomentada (más abajo te lo ofrece) la linea que dice $IncludeConfig /etc /rsyslog.d/*.conf
En /etc/rsyslog.d/spa3102.conf vamos a poner lo siguiente:

:FROMHOST-IP, isequal, "_direccion_ip_SPA3102_" /var/log/spa3102.log

Las comillas son obligatorias. 

Vamos a reiniciar el servicio con

/etc/init.d/rsyslog restart

Y esta parte ya estaría. Si no se crease el fichero indicado, lo mejor es buscar qué indica el sistema en /var/log/syslog.

Ahora hay que configurar el trasto de Cisco/Linsys. 

Iremos al menú Voice, submenú System. En los campos Syslog Server y Debug Server pondremos la dirección ip de nuestra PBX. El combo Debug Level lo pondremos a 3 (aunque en alguno de los manuales dicen 2, yo quiero la máxima información):

SPA3102 - Configurando el syslog y el debug level
SPA3102 - Configurando el syslog y el debug level
Guardamos y haremos una prueba con algo que sabemos que funciona desde el teléfono. Como por ejemplo, una llamada a la extensión de un softphone que tengas instalado en un ordenador. O, un código que debería de funcionar. Por ejemplo, en mi caso, el feature code *69 funciona desde el teléfono. Te indica la última llamada entrante y te ofrece devolverla. Pero, si quieres que te diga la hora, que por defecto lo hace con el código *60, nos comunica. Pero, desde nuestro softphone sí que funciona. O si queremos probar el que configuramos el otro día, podremos ver que nos sucede lo mismo. 

Está claro que hay algo que no consigo que este aparato (el Linksys SPA3102) se le está diciendo que no va a poder enviarlos (y que a estas alturas sigo sin controlar del todo). Esto es lo que vamos a descubrir. Tal y como hemos configurado más arriba, miraremos los datos en el fichero /var/log/spa3102.log

Una vez que he estado probando un poco con los los códigos que funcionan y los que no, he podido ver que:
  • [0]Off hook: terminal "descolgado"
  • [0]On hook: terminal "colgado"
Es decir, el primero es el aviso de "se ha descolgado el teléfono" y el segundo "han colgado el teléfono". Volviendo a lanzar el comando, sólo aparecen estas dos líneas. ¿Me dejaría algo el otro día al quitar los códigos que pudieran interferir? No sé, porque si los hubiese eliminado por completo no me dejaría hacer nada, y algunos sí que me los envía. 

Viendo que esto no tira, me he encontrado con que la pestaña Line 1 tiene una sección con el combo "SIP Debug Option". Lo voy a activar a full y reiniciaré el aparato.

--

La selección de SIP Debug Option permite visualizar en el log, además de los demás valores que ya se muestran de por sí, algunos mensajes SIP con los que estaba trabajando el terminal 3102 en cuestión.

En el día de hoy: el error que me daba de no funcionar el código *60 ya no se produce. Al menos hemos podido recuperar la forma de registrar los resultados internos del aparato. Si más adelante tengo que seguir trabajando con estos códigos, seguro que os lo cuento por aquí. 

lunes, 18 de enero de 2016

Asterisk: Estaba en inglés, ahora en español

En todo el tiempo que llevo con la centralita de Asterisk instalado no le he cambiado los mensajes de sonido del inglés al español de manera definitiva. Lo intenté en una ocasión pero no funcionaba: el sistema dejaba de funcionar. Por lo que volvía otra vez a la configuración inicial.

Voy a volver a probar. Lo primero, es buscar los ficheros de audio. He encontrado varias fuentes:

  • http://www.voipnovatos.es
  • http://www.asterisksounds.org
De hecho, voy a usar la segunda fuente. De esta usaremos los dos ficheros que nos ofrecen: http://www.asterisksounds.org/es-es/download.

Lo primero es saber dónde lo vamos a guardar. Será en una carpeta con el nombre es dentro de /var/lib/asterisk/sounds

mkdir /var/lib/asterisk/sounds/es

Ahí es donde lo vamos a descargar. Como estas descargas son en formato .zip, hay que acordarse de tenerlo instalado. Además, al bajarlo en un Linux, hay que pasarle el parámetro -a que permita al unzip extraerlo acorde al sistema:

unzip -a core.zip
unzip -a extra.zip

Una vez extraído, hay que cambiarle los dueños (tanto el usuario como el grupo) y los permisos de los subdirectorios:

chown -R asterisk.asterisk /var/lib/asterisk/sounds/es
find /var/lib/asterisk/sounds/es -type d -exec chmod 0775 {} \;

En teoría, sólo con esto debería de ser suficiente. Pero como los audios están en formato sln16, y nosotros trabajamos con gsm729ulaw y alaw, hay que reconvertirlos. Según las instrucciones, se puede usar este script, que habrá que guardar en un fichero y asignarle permisos de ejecución:

#!/bin/bash
for a in $(find . -name '*.sln16'); do
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t gsm -r 8k `echo $a|sed "s/.sln16/.gsm/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e a-law `echo $a|sed "s/.sln16/.alaw/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e mu-law `echo $a|sed "s/.sln16/.ulaw/"`;\
done

Ojo, que le costará hacerlo un tiempecillo. Además, os habréis fijado que falta la conversión de uno de los formatos indicados: g729. Al ser un formato propietario, hay que hacerlo de otra forma. Aunque lo he intentado hacer, no lo he conseguido. Y aún así no lo estaba usando. De todas formas, si quieres probar, el comando sería:

asterisk -rx "file convert fichero.wav fichero.g729"

La siguiente acción es indicarle al sistema que utilice estos audios. Si se busca en Internet encontraremos que nos indican que se configura en el menú Settings --> Asterisk Sip Settings. Pero ya no está ahí. Al menos, en la versión 13. Tendremos que utilizar el módulo Sound Languages

Módulo Sound languages en FreePBX - Sección global
Módulo Sound languages en FreePBX - Sección global
Hay dos opciones: indicarle que se descargue distintos paquetes de idiomas. Si os preguntáis por qué descargarlos... No lo sé. Cogí los de español también porque no conseguí que sonasen los descargados antes:

Módulo Sound languages en FreePBX - Language packs
Módulo Sound languages en FreePBX - Language packs
Nos descargaremos los idiomas que nos hagan falta y para os codecs que tengamos configurados. Aún así, en español no tenemos el paquete extras. 

Y, por último, la sección custom languages, que es la que nos permite indicarle los paquetes con los que empezamos este post

Módulo Sound languages en FreePBX - Custom languages
Módulo Sound languages en FreePBX - Custom languages
Como se puede apreciar esta es la última configuración que he utilizado. Como he encontrado en alguna documentación que alguien tuInstavo ejecutar el comando 

amportal restart

Aunque es el que he ejecutado, recordemos que está deprecated. Habría que usar fwconsole

Espero que os sirva y sea de utilidad. Si tenéis alguna otra forma de hacer esta configuración, bienvenida sea.

De todas formas, si tenéis dudas, también podéis ver los enlaces de donde he conseguido los audios y parte de las instrucciones que he intentado seguir:


lunes, 11 de enero de 2016

RasPBX: De Asterisk 11 a Asterisk 13

Hoy voy a escribir un post muy rápido. Como voy a hacer una serie de ajustes a mi centralita a la que la versión de Asterisk podría afectar, he decidido actualizarla. Eso sí, no sin antes hacer los backups que creí necesarios: si sigues estas instrucciones, hazlo bajo tu responsabilidad.

Lo primero de todo: por defecto al instalar RasPBX viene con Asterisk 11. Pero existe la posibilidad de actualizar a Asterisk 13. Lo primero que se hace es buscar en la documentación de FreePBX. Y dicen que se lance el script:

asterisk-version-switch

Pero no hay forma de detectarlo. Según explican, si la distribución instalada fuera 100 % FreePBX debería de existir. Pero, parece ser que al ser un port para ARM éste no se encuentra. Por lo que toca buscar en la documentación, que, por cierto, está algo desactualizada. Indican que hay que ejecutar una serie de comandos, que serían los siguientes:

raspbx-upgrade
apt-get update
amportal stop
apt-get purge asterisk11
apt-get install asterisk13
amportal start
Pero, amportal ya no "existe". Ahora, hay que usar fwconsole, que, fundamentalmente es cambiar el nombre del comando y alguna detalle más.

raspbx-upgrade
apt-get update
fwconsole stop
apt-get purge asterisk11
apt-get install asterisk13
fwconsole start
Y así ya lo tendríamos actualizado. Los siguientes pasos ya son las configuraciones que nos mejoren la nueva versión.


viernes, 30 de octubre de 2015

Comando System en Asterisk: Systemstatus devuelve APPERROR

Llevaba tiempo sin publicar. Además, como donde estoy ahora no tengo disponible mi centralita, voy a intentar contarlo lo mejor posible. estaba no tenía disponible la centralita. Después de terminar de escribirlo, he llegado a ella y todo lo que tenía aquí expuesto estaba bien, excepto alguna sintáxis. Sobretodo el poner (o no) comillas, como si de cadenas se trataran, en las llamadas a las funciones de Asterisk

Ahora, tenemos en nuestro home: /home/myUser/ un script, dateFile.sh que hace:

date >> fileDate.log

Con unos permisos:

-rwxr--r-- myUser asterisk

A la hora de trabajar en los contextos en Asterisk, además de usar sus propios comandos, se pueden hacer llamadas al sistema o a scripts que tengamos en él. Por lo que, podríamos tener algo similar a lo siguiente:

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Después, resulta, que miras en los logs y te dice que se ha ejecutado (o, a veces, ni eso), pero mirando en la misma carpeta donde se encuentra el script te encuentras con que no se ha obtenido ningún resultado. Por lo tanto, buscando, te encuentras que el resultado de la operación se guarda en la variable SYSTEMSTATUS.

Por lo tanto, volviendo al contexto (siempre me sale el nombre de ámbito [scope]):

[mi_contexto]
exten => s,1,Playback(hello-world)
exten => s,n,System(/home/myUser/dateFile.sh)
exten => s,n,NoOp("Systemstatus is: " ${SYSTEMSTATUS})
exten => s,n,Playback(thank-you-for-calling)
exten => s,n,Hangup

Y volvemos a pasar el mismo. Ahora, después de lanzarlo, nos devuelve que el resultado es: APPERROR. No es SUCCESS. No es FAILURE.

Resulta, que al buscar qué significa ese error, todos terminan diciendo, más o menos que está indocumentado y que devuelve un resultado distinto de 0 (cero).

¿Y qué hago? No he visto resultados cuando Asterisk ha llamado al script. ¿Y si lo lanzo desde consola? Es importante saber que va a funcionar. Y en efecto, así es. Desde la misma consola funciona.

Bien: para resumir dónde puede estar el problema, volvamos a los permisos asignados. Porque ahí es donde radica el quid de la cuestión.

Nuestro usuario tiene permisos para ejecutar ese script. Asterisk no puede hacerlo. No sólo es cuestión de mirar a qué usuario pertenece dicho fichero, o el grupo al que quieres asignarlo, sino también los permisos de lectura, ejecución, ¿escritura? que quieras asignarle.

Si en vez de tener los permisos de arriba, tuviese:

-rwxr-xr-- myUser asterisk

Y volviésemos a ejecutarlo, ahora ya no nos devolvería ese error tan raro que no da ninguna información. La única pega que alguien podría poner es que lo asigne al grupo de asterisk, en vez de permitir que sean otros. A parte de eso, creo que esto es algo seguro, y, lo más importante de todo: ya hemos obtenido la respuesta de una de las posibles causas de este error.

viernes, 23 de mayo de 2014

FreePBX y los feature codes: custom destinations y misc applications

He estado jugando un poco más con mi centralita VoIP FreePBX (Bueno, en realidad, RasPBX, pero lo mismo da). Y, me he puesto a crear códigos de función, o, más conocidos como feature codes.

He querido hacerlo cambiando sólo los ficheros, pero, como no he sido del todo capaz, al final he terminado tirando por el camino fácil y he instalado los módulos que me harían falta para llegar al objetivo.

Lo primero de todo, nos hará falta, como mínimo, instalar los siguientes módulos:
  • Custom destinations
  • Misc applications
Para crear un destino customizado (el custom destination) tendremos que ir al menú Admin y allí encontraremos el enlace:

FreePBX: Custom destination
FreePBX: Custom destination
Los dos valores que me sé serían:

  • El destino que tendrá internamente. Tiene que tener una estructura que sería
    • El contexto deseado (y siempre lo nombro como ámbito [scope]. A ver si se me queda el nombre bueno).
    • La extensión que buscará dentro de ese contexto.
    • La prioridad por la que debería empezar. 
Ahora, como de costumbre en estos casos, te saldrá el botón rojo de aplicar. Hazle click.

Ahora, vamos a crear lo que se podría traducir por una aplicación propia (una misc application). Nos permitirá enlazar un código determinado con el destino customizado que acabamos de probar. Para poderlo hacer tendremos que acceder a este módulo desde el menú Application.

FreePBX: Misc Application
FreePBX: Misc Application
Tendremos que definirle:
  • La descripción por la que lo podrás reconocer
  • Qué código tendrás que marcar en el teléfono para "llamar" a esta aplicación.
  • Si está activada o no.
  • En nuestro caso, el destino que tendrá será el custom app que acabamos de crear.
Lo mismo de antes: guardamos y aplicamos el cambio.

Ahora vamos a crear un contexto en el fichero /etc/asterisk/extensions_custom.conf. Vamos a modificarlo desde el putty. Escribimos:

nano /etc/asterisk/extensions_custom.conf

Y, en el fichero:

[mi-contexto]
exten => s,1,Playback(tt-monkeys)

Donde, si el navegador no es capaz de interpretar &gt (ampersand + gt) es el símbolo mayor que (>). [Inciso: está claro que tengo que buscarme otra forma de mostrar los códigos fuentes. Fin de inciso]

Y, al guardar, reiniciamos el servicio (ojo con las llamadas que estén en curso, que te las va a tumbar):

asterisk -rx "core restart now"

Y, si llamamos a la extensión que hemos definido desde alguno de los teléfonos, debería de oirse una jauría de monos gritando.

Y... esto no es todo. Porque todo este lío, además de enseñar a montar una cosa de estas, viene por dos razones.

Una, es que, de momento, sólo lo he conseguido hacer funcionar como si de una llamada se tratara. Ya veré si lo consigo cuando esté una llamada en curso.

La otra es por un error que te puedes encontrar. Porque, si no enlazas bien las cosas, no te funcionará. Un error que te podrá salir en los logs es el siguiente:

[...] sent to invalid extension but no invalid handler: context,exten,priority=mi-contexto,s,1

Esto significa que si has puesto un contexto correcto, pero en el fichero .conf has indicado una extensión fija (por ejemplo, directamente *007) y en la configuración has puesto la s, te va a saltar este error en los logs. Al menos, esa es una de las razones. Si hay más razones, ahora mismo lo desconozco.

Y... de momento esto. Si se me ocurren más cosas, os lo haré saber. 

viernes, 25 de abril de 2014

FreePBX: Cambiar la shell de administración

Desde que instalé el sistema de mi PBX en la rasp llevo queriendo hacer un cambio que, si bien podía dejarlo tal cual, era una lata. Resulta que la consola de administración desde ssh para todos los usuarios mortales creados tiraban de la shell /bin/sh. En efecto: posiblemente a la hora de crearlo no lo pondría (bien) y me quedé con esa shell tan pesada. Y digo pesada porque todas las funcionalidades que nos da bash para poder utilizar el histórico con el teclado, utilizar la tecla tab para autocompletar, etc no tiraba. Por lo que me dispuse a buscar. 

Lo primero de todo saber que el sistema operativo es CentOS. Por lo que una búsqueda para poder hacer este cambio en esta ¿versión? de Linux es lo más adecuado. Y ahí nos encontramos con el comando chsh. Si bien en el ejemplo que he utilizado nos da la opción de hacer un listado de las shells disponibles, en mi caso no es posible. Aún así, el proceso es muy sencillo. Pero, antes, vamos a comprobar qué dicen nuestras variables de entorno:

Variables de entorno
Variables de entorno
Si bien seguro que es sencillo saber los valores de los nombres de usuario que he tapado, también. como podréis comprobar, he machacado las dos direcciones IP origen y destino.

Solicitaremos el cambio de shell al comando antes indicado, pasándole el parámetro -s y el valor deseado, en mi caso /bin/bash.

chsh -s /bin/bash

Tras lo cual nos pedirá la contraseña de nuestro usuario (el que estamos usando ahora mismo).

Cambiar la shell de sh a bash: chsh -s /bin/bash
Cambiar la shell de sh a bash: chsh -s /bin/bash

Ahora, cierra la sesión y vuelve a entrar. ¡¡Ya lo tienes!!
Usando la shell bash, después de cambiarla con chsh.
Usando la shell bash.
La verdad es que se me hace más cómo así.

viernes, 28 de febrero de 2014

PBX: Music On Hold en extensiones virtuales

Como los asiduos a este blog ya sabréis, estoy embarcado en temas de VoIP. Y, resulta, que había algo que quería hacer y me estaba costando un rato conseguirlo. No está del todo terminado, pero puedo adelantar las bases de lo que he tenido que hacer por si alguien lo necesitaba. Además, he tenido que hacer unos cambios con respecto a las fuentes, dado que cuando éstas se escribieron se hacía de otra manera.

Lo primero de todo: quiero que al llamar desde una extensión de mi centralita a otra extensión, ésta se comporte de una manera determinada. En mi caso, quería que sonase una música en espera y si después se desea, que suene alguna locución.

Lo primero que vamos a necesitar es crear una nueva extensión. En mi caso he querido que fuese virtual, porque no quiero que ningún terminal la utilice. Seguro que hay otras maneras de hacerlo. A lo mejor una de estas no es la más idónea. La monté en su momento pensando que podría hacerlo en 3 minutos y no fue así. Por lo tanto: crear una nueva extensión. En este caso tendrá que ser virtual. A la hora de rellenar los datos, pondremos:

  • El número de extensión
  • Display name: Será la descripción o nombre. 
  • Aunque posiblemente no haga falta, también le he rellenado el outbound cid con el mismo dato que el display name.
  • En recording options, las inboud [internal|external] calls también las vamos a activar siempre. Sin embargo, tengo que jugar con esto. José Luis (Verdeguer, aka Pepeluxx [@pepeluxx]), me pasó un script y tengo que jugar con él. 
  • El voicemail lo activas y se pone una contraseña. 

Ahora sí: tal y como lo tengo, creo que sólo va a servir el número de extensión asignado. Todo se andará.

Muy bien. Ahora quiero que haga ciertas cosas. Y si intentas configurar la música en espera (music on hold, o también conocido como MOH), y llamas directamente, te saldrá alguno de los contestadores diciéndote que no está disponible en esos instantes. Pues, dio la casualidad que atiné en una de las búsquedas que hice y encontré una solución:

[from-internal-custom]
exten=>383,1,Answer
exten=>383,2,Wait(1)
exten=>383,3,Background(tt-allbusy)
exten=>383,4,SetMusicOnHold,default
exten=>383,5,WaitMusicOnHold,30
exten=>383,6,Background(thank-you-for-calling)
exten=>383,7,Background(goodbye)
exten=>383,8,Congestion
exten=>383,9,Hangup


Fundamentalmente: abres el fichero que se encuentra en /etc/asterisk/extensions_custom.conf y, si no existe la primera línea se añade, si exite, se ponen el resto de líneas debajo de ésta.


Estupendo. Ahora que ya lo he guardado, cojo y ejecuto:


#asterisk -r
#core restart now


Por lo que he reiniciado el servicio de la centralita. Al menos, como es mía y sólo estoy yo, me puedo permitir hacerlo. Además, podría caber la posibilidad de que hubiese otra forma, pero a mí, ahora mismo, me vale. ¡Ojo! Que si tienes gente conectada a la tuya, podrías finalizar sus llamadas. 

Ahora, haces una prueba y... Sólo oyes la primera locución. Las demás... Nada. Si vas a los logs de las llamadas, podrás ver algo como esto:

No application 'SetMusicOnHold,default' for extension (from-internal, 383, 4)

Esto viene a decir: No entiendo qué significa "SetMusicOnHold,default" para la extensión que se encuentra en "from-internal, número_de_extensión, comando_número_4".


Si se busca esto, no lo va a ser capaz de ejecutarlo. De hecho, la llamada terminará abruptamente. ¿Cómo lo solucionamos? Pues  buscando un poco nos encontramos con que está deprecado (deprecated). 

Tendremos que ejecutarlo así:

[from-internal-custom]
exten=>50000,1,Answer
exten=>50000,2,Wait(1)
exten=>50000,3,Background(tt-allbusy)
exten=>50000,4,MusicOnHold(default,30)
exten=>50000,5,Background(thank-you-for-calling)
exten=>50000,6,Background(goodbye)
exten=>50000,7,Congestion
exten=>50000,8,Hangup

Ahora sí que conseguiremos que funcione todo el proceso. Pero sigue habiendo algunos puntos que tenemos que corregir. Por ejemplo: El comando (internamente me ha parecido ver que lo llaman aplicación), background. Éste se va a encargar de mostrar una locución y, a la vez, será capaz de entender los códigos que se introduzcan por teclado. Pero a mí no me interesa eso. Yo quiero que suene el audio que toque (por ejemplo, una voz pidiendo que esperes) y ya. Para eso está la opción de playback. Por eso, vamos a cambiar el primero por este segundo. Aquí dejo un enlace sobre las diferencias. Aunque, a decir la verdad, me gustaba más el anterior que encontré (y no sé dónde está).

Cuidado con no poner alguno de los pasos, o repetir el número en alguno de ellos. El comportamiento será algo curioso (tendría que haberlo apuntado!!). 

Podemos ver que ahora la opción de la música en espera es un sólo comando, al cual, se le pasará el nombre de la sección de la música en espera que deseas que suene y qué tiempo quieres que dure. Está en segundos. Si no lo he entendido mal, si no se pone el tiempo, esto sonará hasta que se termine el audio (una canción, por ejemplo). Lo que he llamado sección se encuentra en la interfaz web, en el menú de Settings, Music On Hold. Como puedes ver tenemos uno que se llama default. Este es el que nos sonará. Pero si quieres subir otra, mi recomendación a día de hoy, que no se cómo elegir alguna de las que están agrupadas, es crearse una por cada canción. El día que sepa cómo se puede escoger, aviso. 

Por lo tanto, y para resumir:
- El sistema descuelga la llamada
- Espera un segundo (no se si habrá algo más entre medias)
- Suena un audio solicitando que esperes, que todos están atendiendo otras llamadas de telemárketing.
- Música en espera para que te acomodes (o cuelgues si te cansas).
- Dos locuciones más.
- Unos pitidos como que la línea está ocupada
- Te cuelgan.

Poco a poco intentaré ir afinando el sistema. Además, como habéis podido observar, parte de la configuración la he hecho tirando de interfaz gráfica y otra parte ya me he animado a hacerlo editando ficheros (que no se verán modificados automáticamente en cuanto menos me lo espere).

miércoles, 12 de febrero de 2014

Perl: Averiguar si FreePBX está actualizado

Hacía tiempo que no volvía con los temas de FreePBX. Como habréis podrido observar, le he dado un descanso.

Si recodáis, uno de los posts que escribí fue sobre el script que montó Pepelux (Jose Luís Verdeguer), en el que analizaba la configuración de la instalación que se tenía. Así, se podía saber si había algunos valores por defecto o alguna cosa que era recomendable cambiar.

Una de las cosas que se me quedó a medias fue el averiguar si teníamos instalada la última versión. Se me quedó en el tintero porque no fui capaz de dar con la clave adecuada para sacar el dato utilizando perl. Pues bien, hace poco lo conseguí. Y este es el resultado. ¡Ojo! Que en mi caso lo tengo montado en el script original. Recordemos que tocó ajustarlo porque esta instalación es una RasPBX (el cual se sustenta de FreePBX) y en vez de tirar del gestor de paquetes Yum tira de APT.

#!/usr/bin/perl
# -=-=-=-=-=-=-=-=-=-=-=
# FreePBX Security check
# -=-=-=-=-=-=-=-=-=-=-=
# Original author:
# Jose Luis Verdeguer (aka Pepelux)
#
# 
#
# Author:
# Agustín Campos (aka Agux)

sub init() {
    die("You must be root to run this script!\n\n") if (getpwuid($<) ne "root");

    my $ver = version();
    my $last_ver = '2.11';
    print "Warning! Your FreePBX version is too old ($ver). Consider upgrading your system\n" if ($ver < $last_ver);
    print "Your FreePBX instalation is up to date" if ($ver = $last_ver);

    print "\n";
    unlink "/tmp/fpbx.version";
}

sub version {
        system("dpkg -s freepbx | grep 'Version' > ./fpbx.version");
        my $version_file = "./fpbx.version";

        open (FILE_VER, $version_file);

        while () {
                #'chomp' clears the newlines characters
                chomp;
                my $aux = $_;
                $aux =~ /Version\:\ \s+\t+([\-|0-9|\.]*)\s+\t+/;
                $aux =~ s/Version\:\ //;
                close (FILE_VER);
                return $aux;
        }
        return "";
}

init();

Se que debería de buscar algún tipo de else para el caso en el que la versión sí que esté actualizada, pero como ya he comentado, realmente el cambio que habría que hacerle al script original es:


  1. El método version ponerlo tal cual está está aquí.
  2. Si no recuerdo mal, en el original se hacía la comparación de la llamada al método directamente con la cadena de la versión que tenemos instalada. En mi caso, he asignado a dos variables los valores correspondientes y he comparado dichas variables.
Esos serían los cambios que habría que hacer con el original para esta distribución.

sábado, 4 de enero de 2014

Pepelux's perl script

Como ya sabéis, he estado montando una FreePBX en una raspberry pi. Una de las cosas que tenía pendientes era pasar un script que Pepelux (Jose Luis Verdeguer, @pepeluxx) montó para la última Rooted (2013) y que analizaba la configuración del sistema. De esta forma, se podía saber si alguna de esas configuraciones era deseable que estuviese por defecto o no. En mi caso, he tenido que comentar dos líneas que son las que hacen referencia al netstat, porque, posiblemente, no existe esa librería para la arquitectura de la rasp.

Este es el estado en el que me he encontrado mi sistema:

Perl Pepelux Script: Estado actual del asterisk
Estado actual del asterisk
Por lo tanto, vamos a ir viendo cómo puedo ajustar los valores en la medida de lo posible.

Lo primero que he hecho ha sido crearme un usuario nuevo:

#useradd -G users -m -N paquitoelchocolatero
#passwd paquitoelchocolatero

Ahora, podremos acceder al sistema utilizando este usuario desde el servcio de ssh. Por si las moscas, asegúrate de que es así. Además, prueba que puedas elevar privilegios. ¿Funciona? Muy bien. En el caso de que no sea así... Ahora no se me ocurre la razón. En caso contrario, ahora serás root. Y, estando con este usuario, vas a tener que abrir con el editor nano el fichero /etc/ssh/sshd_conf

#nano /etc/ssh/sshd_conf

Busca la línea PermitRootLogin y cambia el estado de yes a no. Vamos a reiniciar el servicio, por lo que tus sesiones se van a cerrar:

#/etc/init.d/ssh restart

Ahora, podemos comprobar cómo el usuario root no es capaz de acceder al sistema. En cambio, paquitoelchocolatero sí que podrá entrar. Además, será capaz de elevar privilegios, por lo que podremos volver a ejecutar el script y el aviso sobre PermitRootLogin habrá desaparecido.

Ya puestos a manipular el servicio ssh, vamos a autorizar sólo las conexiones internas. Tendremos que descomentar ListenAddress (en mi caso, para IPv4) y ponerle un valor. Yo he puesto la misma IP que tiene la tarjeta de red. ¡Ojo! Si se hace mal podrías perder la conexión con el dispositivo y para solucionarlo acceder de forma local. Si no tienes una pantalla y un teclado conectados... Malo. Yo reiniciaría otra vez el servicio.

Ahora voy a arreglar el aviso que dice que los logs son propiedad de asterisk. Estos logs se buscan en /var/log/. Por lo tanto, visitando esta ruta, nos encontramos con que la carpeta que hace referencia a asterisk tiene tanto el usuario como el grupo pricipal asterisk. Lo que voy a hacer va a ser lanzar un cambio de dueño y de grupo recursivo para root.

#chown -R root asterisk/
#chgrp  -R root asterisk/

Eso sí,  mucho ojo porque, de momento, con esta forma dejará de dar la alerta de los propietarios de estos ficheros mientras que no reinicies el equipo. Después se vuelven a crear algunos con permisos de Asterisk.

Otro cambio que voy a hacer es eliminar la posibilidad de que se conecten "invitados". Por lo que seguiré el consejo del script y pondré el valor allowguest = no en el fichero /etc/asterisk/sip.conf. Pero, ¡ojo! Te dicen que no lo cambies, por lo que tendrás que hacer las modificaciones a través de la interfaz web. Habrá que ir a Settings --: Asterisk SIP Settings, y buscar Allow SIP Guests. Como de costumbre, habrá que guardar los cambios y aplicarlos con el botón rojo que aparecerá después de guardarlos. Por cierto: si estás con la distribución raspbx tendrás que hacer un cambio en el script:
  1. En mi distribución está buscando en un fichero que no es el que se espera. Habría que cambiar la apertura del fichero sip.conf al sip_general_additional.conf.
Si el script no encuentra el valor allowguest=no devolverá que está puesto a yes. Independientemente de si tiene asignado ese valor o si ni siquiera aparece dicha asignación.

Con respecto al useragent que dice que hay que cambiar, he hecho varias pruebas. Por no hacer más caótico todo esto, vamos a ver si puedo explicarlo rápido. Se puede añadir el parámetro desde la misma sección del Asterisk SIP Settings. Abajo del todo, puedes añadir otros valores. Ahí he puesto el parámetro useragent, con el valor que más me ha gustado. Ahora bien, nos encontraremos con que tenemos el parámetro repetido dos veces en el fichero sip_general_additional.conf. Podrías modificarlo, algo desaconsejado, porque cualquier cambio que apliques con el famoso botón rojo puede echarlo para atrás. No sirve quitar el valor que no deseamos, tarde o temprano, volverá.

Ahora voy a cambiar la configuración del AMI. Según he podido leer, las siglas AMI proceden de Asterisk Manager Interface. La entrada de mi búsqueda de la cual me he leído los dos primeros párrafos es esta. Lo que quería ver es si al desactivarlo, un softphone sigue funcionando, ya que esperaba que éste hiciese de cliente. Pero, editando /etc/asterisk/manager.conf:

FreePBX /etc/asterisk/manager.conf
FreePBX /etc/asterisk/manager.conf
...dicen que FreePBX (que es en lo que se sustenta nuestra distribución) tiene que tenerlo activado, por lo que poner el valor enabled = no no será una opción. Pero sí podremos cambiar las contraseñas por defecto. La primera contraseña la tendrás que cambiar desde Settings --> Advanced Settings. Ahí donde pone Asterisk Manager Password. Te recomiendo que hagas un backup de la instalación/configuración. Me ha dado una serie de problemas. Si cuando guardes el cambio (justo a la derecha del textbox donde introducirás la nueva contraseña), y después de darle al típico botón rojo de "apply changes", te diese algún error gordo indicándote de que no se puede hacer el cambio, como podría ser
WARNING[5297] security_events.c: Required IE '50' for security event type '12' not present
NOTICE[5297] manager.c: 127.0.0.1 failed to authenticate as 'admin'
hay una posible solución. A mi, después de varias pruebas, me ha funcionado lo siguiente:

  1. Cambiar a mano los ficheros /etc/amportal.conf y /etc/asterisk/extensions_additional.conf . 
  2. Busca el campo que tiene la contraseña amp111. Le tendrás que poner el mismo valor que se ha puesto en la interfaz web.
  3. Reiniciar el dispositivo.
  4. Para terminar, volver a la interfaz web y aplicar los cambios. 

Con respecto a la alerta de la versión, tengo malas noticias. Tendría que salir un dato entre paréntesis. Pero no sale nada. Eso es porque el error que nos salta sobre yum es que intenta lanzar un comando de un gestor de instalación de paquetes que no tenemos. Hay varias formas:

  • apt-cache showpkg freepbx : Esta es la que encontré por mi mismo. Pero no me servía muy bien porque tenía que hacer mucho scripting del que tengo muchas lagunas. 
  • apt-show-versions freepbx : Nuestra distribución no cuenta con este, por lo que también lo descarto. Los otros mostrados de apt no me gustaban. No me hace falta saber nada sobre los paquetes remotos.
  • aptitude versions freepbx : Casi: pero ese retorno de carro...
  • dpkg -s freepbx | grep Version | sed -e 's/Version: /''/g' : Este creo que sí que me va a servir. 
    • Obviando el sed: Nos devuelve una sóla línea que empezará por "Version: ".
    • El comando sed se encargará de reemplazar esa misma cadena por otra vacía. Aunque con las expresiones regulares se podría obviar esta última pipe.
Tendremos que editar el script, y en el contenido del método version(). Será el contenido de la función system(), con alguna de las opciones que acabo de describir. Después, habrá que acordarse de cambiar las expresiones regulares que hay dentro del while(). Me gustaría poder decir que he tenido suerte y que he conseguido que me guarde el resultado en el fichero, pero sale vacío si se hace desde perl. Por lo que no he podido ajustar este script a nuestra versión. Pero habiendo ejecutado el comando raspbx-upgrade, y apt-get update y apt-get upgrade, ya debería de estar actualizado.

[update]
Para el tema de la versión, tenemos este otro post.
[/update]

Ahora podríamos ponernos con los permisos para que sólo se pueda acceder al sistema desde la red interna. Ya habíamos solucionado el que se refiere al ssh, puesto que ya estábamos de paso en ese fichero De todas formas, tenemos un warning que más adelante veré cómo solucionar. 
  • Para el servidor web: tendremos que editar /etc/apache2/ports.conf y modificar la línea Listen 80 y ponerle Listen IP_DISPOSITIVO:80. Ejecuta /etc/init.d/apache2 restart.
  • Para el servicio de TFTP, tendremos que configurar dnsmasq. Es el servicio que está corriendo el pueto 69, que es el que utiliza TFTP. Si consigo configurarlo, os aviso.
  • Para Asterisk Manager tendremos que cambiar el valor que tiene bindaddr en el fichero /etc/asterisk/manager.conf por la dirección IP de tu dispositivo la dirección de loopback (para que nos entendamos: 127.0.0.1) o por localhost. Si pones la dirección IP, como por ejemplo, 192.168.1.123, la interfaz web te puede indicar que hay algún problema y no poder realizar algunos cambios. Que a lo mejor no pasa nada, pero a mi me ha dado problemas hasta que he puesto localhost.
  • Para Asterisk, tendremos que ir a Settings --> Advanced SIP Settings, y abajo del todo, pondremos un campo nuevo que se va a llamar dindaddr, cuyo valor será, tal y como hemos ido haciendo con los otros campos, la dirección IP de la interfaz de red. Acuérdate de guardar los cambios y aplicarlos con el botón rojo que te aparecerá una vez se han guardado los cambios.
Ahora mismo, el estado de la centralita, está bastante mejor que antes. Sí. Es muy mejorable. Pero bueno. Menos da una piedra. 

viernes, 20 de diciembre de 2013

Ajustes al sistema PBX I

Una vez más, sigo con el tema de mi PBX. Si no has seguido el tema porque acabas de llegar, las etiquetas te llevarán a los posts adecuados. Al estar configurando el tema no he podido hacer otra cosa.

Tengo que hacer varios cambios en el sistema. Creo que lo primero va a ser en el SPA (creo que tendré que darle también el nombre de ATA. Me suena haberlo visto en algún sitio, y como sinónimo me podrá valer).

Lo dicho, nos vamos al ATA. Pestaña: SIP. Sección: RTP Parámeters. Dato: RTP Packet Size. Está a 0.030. Vale, según nos cuentan, parece ser que estos cacharros traen este valor por defecto. Pero puesto de este modo hará que las llamadas salgan entrecortadas y (como dato mío empírico) bajo volumen. Hay que cambiarlo a 0.020. Llevaba tiempo con esta página abierta y lo acabo de cambiar. En cuanto sean horas, pruebo a hacer la llamada desde alguna de las extensiones que no sea el teléfono ordinario. De todas formas, después de hacer alguna llamada, aún hay que solucionar un poco mejor este tema.

Ahora, nos vamos a la sección PSTN Line --> Subscriber Information: En algunos de los artículos que hay en la página de FreePBX (por cierto, si alguna vez veis que hablo de BSD/FreeBSD en vez de PBX, decídmelo en los comentarios) dicen que el campo Display Name le pongamos el valor que deseemos, como por ejemplo 1-pstn o similar. He visto que las llamadas que lleguen a través del aparto a las otras extensiones, incluso para el Asterisk, son con ese nombre. Me acabo de acordar que quería quitarlo, y es el mejor momento. Veré qué sucede, pero por ahora, lo voy a actualizar dejando ese valor vacío.

Ahora, nos vamos al Asterisk (¿os habéis dado cuenta de que seguro que en algún sitio he puesto el nombre del galo?).

Tal y como hemos hecho en otras ocasiones vamos a crear varias extensiones más. Por ejemplo: una para cada uno de los ordenadores. Otra para el móvil. Eso, si no lo habéis hecho ya.

¿Las has creado?¿Seguro? Uno, diez,once, cien, ciento uno... ¿Ya? ¿Estupendo!

Ahora, nos vamos al menú Applications --> Ring Groups.

Vamos a asignarle el número interno. Del mismo modo que las extensiones tienen el número al que se puede llamar, los ringuing roups igual. Puedes ponerles un nombre descriptivo. Tendrás que decidir qué extensiones de las creadas quieres añadir, para lo cual las tendrás que escribir. Yo dejaría el ringuing time tal cual. 20 segundos sonando un teléfono puede ser un infierno para el que esté cerca y no pueda cogerlo. La estrategia. Esto es importante. Hay varias opciones: que vayan sonando secuencialemente los teléfonos cuando el anterior no responde. Que suene el primero, el primero y el segundo, el primero, el segundo y el tercero... Todos a la vez. Esta va a ser mi opción. Que suenen todos a la vez.

Como de costumbre, envía el formulario con el botón que siempre ponen abajo del todo y si te solicita que lo termines de enviar con el botón rojo, hazlo.

Ahora, vamos a modificar el Incoming route, que recuerdo que se accede desde el menú Conecvity. Vamos a seleccionar la ruta que creamos para nuestro SPA3102. Abajo del todo definíamos un destino. En vez de enviarlo a una sola extensión, vamos a seleccionar que es un ringing goup, y seleccionamos el que acabamos de crear. Si ahora tuvieses varias extensiones activas, y te llamasen, podrás comprobar que todas esas extensiones activas sonarán a la vez.

Algo que tendría que haber hecho desde el principio era haber cambiado las contraseñas por defecto.

La primera va a ser la de acceso al sistema desde SSH. Ya sabemos, el comando passwd.

La otra contraseña que hay que cambiar es la del admin del panel de control. Para hacerlo hay que ir al menú Admin --> Admiinstrators y, seleccionando el administrador al que queremos cambiarle la contraseña, podremos poner la nueva en el campo correspondiente. Recuerda que si después de enviar el formulario el sistema te muestra el botón rojo, también tendrás que pulsarlo.

Otra cosa que tendría que haber hecho era lanzar el script de Jose Luis Verdeguer, vamos Pepelux (@pepeluxx). Eso sí, tengo que mirar cómo hacer que las dependencias (los imports en JAVA, #includes en C...) me funcionen. Porque no los encuentra. Claro, en una distro para un dispositivo reducido...

¿Qué más podemos hacer? Tendremos que expandir la partición ráiz al tamaño completo. Recuerdo que por muy grande que sea la tarjeta donde se sustenta el sistema, sólo utilizará 4GB. Al ejecutar sobre un SSH

raspi-config

nos llevará a la siguiente pantalla:

Expandir tamaño utilizado en raspberri: raspi-config --> expand_rootfs
Expandir tamaño utilizado en raspberri: raspi-config --> expand_rootfs
También voy a overclockear (vamos, a hacer overclocking) el dispositivo. Como viene en garantía que se puede hacer hasta 1 GHz... En mi caso, de momento, voy a ponerlo a 900MHz. ¡Ojo! Que tal y como advierten, puede reducir la vida útil del dispositivo.

Overclocking la raspberri: raspi-config --> overclock
Overclocking la raspberri: raspi-config --> overclock
Y... de momento aquí lo dejo. Iré mirando los posts que tenía pendientes por continuar escribiendo y más adelante publicaré más sobre el tema. Pero quiero daros un descanso sobre esto, que ya viene siendo muy cansino.





miércoles, 18 de diciembre de 2013

Configurando FreePBX en la Raspberri PI II

Si has llegado aquí sin haber leído los otros posts, os recomiendo que lo hagáis porque todo esto se basa en cosas que se espera que se hayan hecho ya. 

Vamos a continuar ajustando el sistema. Ahora mismo, para resumir: 
- Tenemos una extensión que nos han dicho que hay que definir. Y, la verdad, de momento no la he usado.
- Tenemos dos rutas: Una incoming y otra outgoing. Aunque están creadas, de momento no se están utilizando.
- El trunk. Para que se pueda conectar el Linsys SPA3102 (si os preguntáis por qué estoy poniendo tantas veces el nombre, al menos una por post, es para que salgan relacionados en caso de que alguien lo busque). 

¿Qué voy a hacer ahora? Ahora va a tocar crear dos extensiones más. Recuerdo que se hace desde Applications --> Extensions. Y seleccionamos la de tipo SIP (que debería de ser la que viene por defecto).

No va a tener mucho misterio. Cada una de ellas ha de tener un User Extension, que será el número de extensión deseado, y su Display Name, que será la descripción de la extensión. Además, yo pondría como valor 1 o 2 el campo Outbound currency limit.

¿Os acordáis del Outbound Route que configuramos en Connectivy --> Outbound routes? Pues tendremos que hacer un cambio que obvié en su momento:

Patrones para utilizar este outbound route
Patrones para utilizar este outbound route
Todavía me está costando pillarlo, pero, después de unos cuantos "ensayo y error", conseguí hacer que cualquier número de 6 dígitos o más, con un 0 delante, hiciese uso de esta ruta. Además, como ya le habíamos dicho el trunk que tenía que utilizar (que sería el que, con mis palabras, enlaza al dispositivo de Cisco), ya se podrían hacer llamadas con la línea telefónica desde un teléfono IP tirando del FreePBX/RasPBX/Asterisk.

De todas formas, me temo que me dejo algo más... En efecto, en el trunk también había que poner la configuración:

Patrones para utilizar este trunk
Patrones para utilizar este trunk

Y, para finalizar, instalarse un programa en el ordenador y en el móvil. Alguno para el ordena puede ser el X-lite. Para el móvil.... Creo recordar que SIPDroid. Lo que he hecho para configurarlos ha sido bastante estandar:
  • El número de extensión es el usuerio
  • La contraseña es un chorro que se encuentra en la extensión con la etiqueta secret.
  • Si hablan de servidor o similiar, con el puerto correspondiente, te debería de servir con la dirección IP del servidor y el puerto que se ha indicado en el campo correspondiente de esa extensión.
Ahora deberías de poder hacer llamadas entre extensiones y utilizar al menos una de ella para llamar al exterior. 

Aún me faltan cosas por hacer. Pero de momento os dejo con esto y os iré dando más la brasa a medida que vaya configurando (y seguro que desconfigurando) cosas. 




lunes, 16 de diciembre de 2013

Configurando e integrando Cisco/Linsys SPA3102 con FreePBX II

Ahora ya deberíamos de tener nuestro Linsys SPA3102 configurado para que saque las llamadas al exterior cuando éste está encendido. Por lo que ahora podremos proceder con la interconexión de la rasp con el SPA. Eso sí. Lo primero que recomiendan es resetearlo para mantener la configuración "lo más simple posible" y sobretodo porque asguran que "a parte de los cambios que describen se querrá mantener el resto de datos tal y como están". En mi caso, y tal y como dice un buen compañero mío: "ni jarto vino". Después de lo que me costó configurarlo para que funcionase bien, lo dejaré tal y como está. Si después veo que tengo problemas, ya me plantearé si reseteo o no. ¡Ah! Recuerda que tienes que estar como administrador y mostrando las opciones avanzadas.

Lo primero que vamos a comprobar en la pestaña SIP es el RTP Packet Size. Según afirman, el valor por defecto 0.030 no es correcto para el codec ulaw / G711u. Hay que cambiarlo a 0.020. Así se evitarán ciertos ruidos o chasquidos en llamadas, de una forma muy aleatoria.

Tienes que ir a la pestaña Line 1: Si no me olvido de nada más, que a punto he estado de olvidarme de este dato, tendrás que poner alguno que se corresponda con tus necesidades. Aún no estoy muy ducho en cómo se configuran los DPs (así es como los abrevian). Pero, algo que me ha funcionado más o menos bien es este:

([69]xxxxxxxxS0<: gw0="">|xxxx<: gw0="">|xxxxx)

El gw0 significa que tiene que salir por el lado de la línea telefónica. La S0 no me acuerdo, la verdad. Pero Cisco tiene una página donde pone ejemplos.

Ahora hay que ir a la pestaña PSTN Line.
  • Asegurate de que el puerto (SIP port) que has seleccionado es el mismo que tenías puesto en el PBX. En el ejemplo ponen el mismo que se indicó a la hora de crear el trunk (5061). ¡Ojo! Revisa si la extensión que tenías configurada también tira de este puerto. Ahora mismo la que yo puse tira del 5060, por lo que podría darme problemas. Si es así, haré pruebas para dejar todos los puertos iguales. 
  • Proxy and registration:
    • Proxy: Es la dirección del servidor Asterisk. 
    • Tanto make call without reg y answer call without reg tienen que estar a yes.
    • Register: No me acuerdo si lo llegué a cambiar. Aunque me aparecía a no, lo he puesto a yes.
    • Register expires: Este dato sirve sobretodo si a la hora de crear el trunk dejaste seleccionado el dato host=dynamic. Aconsejan poner el valor de la entrada a 300 si estás en la misma red y a 900 si el PBX está en otra red (por ejemplo, Internet). No indican nada para host=Dirección_IP. Yo pondré... Venga, de momento los 3600 que vienen por defecto. Siempre tendré tiempo para bajarlo.
  • Suscriber information:
    • Display name: Sólo para los dispositivos internos. Si no llega el Caller ID, se mostrará este dato.
    • User ID: Tiene que coincidir con el que se puso en el trunk.
    • Password: Tiene que ser la misma que se puso en la configuración del trunk con el campo secret.
  • Audio Configuration: Copipasteando la configuración:
    • DTMF Process INFO: Yes
    • DTMF Process AVT: Yes
    • DTMF Tx Method: Auto
  • Dial plans: Dicen que sólo y únicamente se ha de cambiar el Dial plan 2. Creo que esta parte va a ser un quebradero de cabeza. Pero bueno. Vamos a ver. Tendrás que poner (S0<:1234567890>). Tendrás que cambiar el número subrayado por el que tenga la línea conectada al dispositivo, que, a su vez, tendrá que se igual al Inbound Route configurado para tal efecto en el PBX.


  • VoIP-To-PSTN gateway:
    • VoIP-To-PSTN enable: Ponerlo a yes.
    • VoIP Caller ID auth method: Recomiendan que al principio se ponga a none y que después se mire si se quiere modificar. 
    • VoIP PIN max retry: Haré lo mismo que hacen en la doc: dejarlo a 3.
    • One stage dialing: Dicen que es muy importante ponerlo a yes.
    • Tanto Line 1 VoIP Caller DP como VoIP Caller Default DP como Line 1 Fallback DP hay que ponerlos a none. Si no me equivoco, son los Dial Plans. Hay que estar ojo avizor no vaya a ser que haga falta configurarlo después. 
    • También sugieren que los usuarios y contraseñas en la sección VoIP users and passwords se haga más adelante.

  • PSTN-To_VoIP gateway:
    • PSTN-To-VoIP Gateway Enable: Se pone a yes
    • PSTN Caller Auth Method: Dejalo en none
    • PSTN Ring Thru Line 1no. Dicen que es porque estamos usando Asterisk. A ver: haciendo pruebas (antes de publicar este artículo): he visto que con este valor, el teléfono fijo no sonará de recibir una llamada. De hecho, ni se entera de que está entrando. Por lo que siempre debería de haber algún terminal o software conectado al Asterisk, y éste configurado adecuadamente para que le lleve la llamada. 
    • PSTN Pin Max Retry3
    • PSTN CID for VoIP CID: Este no lo he acabado de entender del todo bien. Dicen que se ponga a yes si te suscribes a un CallerID desde el servicio PSTN. En caso contrario, ponerlo a no
    • PSTN CID Number Prefix: Dejalo en blanco. 
    • PSTN Caller Default DP: Es muy importante ponerlo a 2, ya que es el que hemos seleccionado arriba. 
    • Off Hook While Calling VoIPNo.
    • Line 1 Signal Hook Flash To PSTNDisabled.
    • Dejar el resto de datos en blanco.
  • FXO timer values:
    • VoIP answer delay: Ponerlo a 0 (cero), porque si se deja a 1, te puedes encontrar con algún que otro problemilla.
    • PSTN answer delay: Si bien de puede poner a 0 (cero), recomiendan ponerlo a 3 para que se de tiempo a identificar la llamada (CallerID). Y que en raros casos, podría hacer falta ponerlo a 5
    • En la documentación no hablan de PSTN Ring Thru: También le hará falta algún valor. Todavía no me queda del todo claro si el que hace que deje de sonar el "ring" del teléfono es este o el anterior. Pero tenlo en cuenta. De hecho, después de varias pruebas, y algún cambio que contaré más adelante, lo he dejado al mismo valor que el anterior. Te puedes encontrar con que el teléfono (sin que esté logueado al Asterisk a través de este cacharro) empiece a sonar y al saltar el trigger del Answer (diría yo) pasarlo al Asterisk. Casos raros: Que el teléfono deje de sonar, pero la llamada continué dando tono. Y poder coger esa llamada. O, que al dejar de sonar para pasar la llamada al Asterisk, sólo de tiempo a un ring en el servidor, y salte el contestador de tu operadora.
  • PSTN Disconnect Detection:
    • Según dicen, se podría dejar tal cual. Pero, en nuestro caso, habrá que hacer como mínimo un cambio, y este es el campo disconnect tone que debería de tener el valor: 425@-10,425@-10;4(.2/.2/1,.2/.2/1,.2/.6/1)
    Muy bien. Pues tal y como lo tenemos ahora, debería de seguir siendo posible enviar y recibir llamadas desde el terminal telefónico (de toda la vida). Si no os lo he dicho, me faltan algunas cosas como saber la forma de acceder al contestador de mi operadora desde el teléfono normal cuando lo dejo descolgado (dando señal). O la forma de enviar parámetros al sistema a través del teclado del terminal (por ejemplo, mi inalámbrico). Cosas que hay que estudiando.

    Si es así, espérate a los siguientes posts para ir incrementando las funcionalidades.

    [update (antes de la publicaicón]
    Resulta que antes de que se publicase este post, he seguido jugando mucho más con el sistema. He cambiado algún valor, como los que he contado arriba del PSTN Answer Delay y PSTN Ring Thru. También he hecho otra cosa: Si te dicen que el Inconming Route tiene que tener, por ejemplo, una extensión... ¿Dónde se pone esa extensión? ¿Quién la recoge? Muy bien: La puedes configurar también en el SPA. ¿Dónde? En el Line 1.

    Sección proxy and registration:

    • Proxy: La dirección IP del servidor Asterisk.
    • Los combos relacionados con register a yes (register, make / ans call without register)

    Suscriber information:

    • User ID: El usuario/extensión. Por ejemplo: 567890.
    • Password: En nuestro caso, es un chorro de caracteres que aparece en los datos de la extensión como secret.
    Con esto debería de servir. Eso sí, acuérdate de guardar los datos.

    [/update]

    viernes, 13 de diciembre de 2013

    Configurando e integrando Cisco/Linsys SPA3102 con FreePBX I

    Si todavía no has configurado tu PBX, te recomiendo que lo hagas ahora. En principio, y si todo va bien la configuración del Cisco/Linsys SPA3102, se debería de dar por finalizado el montaje básico para el funcionamiento de la raspberry pi, utilizando RaspPBX, con el aparato de Cisco.

    Recuerdo que estoy intentando seguir la configuración que aconsejan en la documentación de FreePBX.

    De todas formas, antes de entrar en detalles con respecto a dicha documentación, hay que hacer otras cosas antes.

    Lo primero que vamos a hacer va a ser conectar el cable de la línea telefónica en el puerto que está marcado como line. Y vamos a conectar un terminal telefónico de toda la vida (por ejemplo, el inalambrico), en el puerto que está marcado como telephone. ¡No lo enchufes a la corriente! Marca un número que sepas que van a responder o que puede dar línea: ¿Te funciona? ¡Estupendo! Eso significa que podemos continuar. Si no te funciona, poco te puedo contar. Este trasto está diseñado para que en caso de que no disponga de electricidad, sea capaz de trabajar con la línea telefónica ordinaria como si nada.

    Ahora puedes enchufar el aparto a la corriente. Con el teléfono conectado, tendrás que marcar cuatro asteriscos (****), para acceder al menú por voz (también conocido como IVR) que te indicará que marques la opción deseada. Hay una tabla que muestra los códigos que hacen falta para que te "cante" los datos deseados o para modificar algunos (y sólo algunos) de esos datos.

    Codigos para configurar lo más básico del SPA3102 desde el teléfono
    Codigos para configurar lo más básico del SPA3102 desde el teléfono
    Una de las cosas que tendrás que hacer es configurar el aparatito para que se encuentre en la misma red que tu equipo. Vamos: si la configuración de red no se adapta a la que ya tienes, este es el momento.

    Ahora, te va a tocar entrar con el navegador. En mi caso, estoy accediendo con la dirección IP asignada al WAN, si bien estoy conectado al puerto ethernet. Por cierto: siempre mostrando como adminitrador y en advanced.

    Nos vamos a la pestaña LAN setup y configuramo los datos necesarios. En mi caso, lo tenía como

    • bridge (creo recordar que lo cambié desde el teléfono), e
    • Auto NetService Private IP Ranges: puedes poner, por ejemplo, 192.168.1.0-192.168.1.255. O incluso lo puedes dejar por defecto si quieres. No debería de hacer falta tocarlo si tienes todo por defecto.
    • LAN IP Address: Puedes poner 192.168.1.2, por poner un ejemplo. Acuérdate de la máscara de red.
    • Y ya depende de tí si quieres que sea tu DHCP o no. Pero si lo activas, acuérdate de quitar el de tu router de Internet. 

    Configurando el Linksys/Cisco SPA3102: LAN Setup
    Configurando el Linksys/Cisco SPA3102: LAN Setup

    La pestaña application no la he tocado. No me hacía falta.

    Ahora bien: pestaña WAN Setup:
    • Lo importante es tener una dirección IP acorde a la red donde te encuentras, además de su gateway correspondiente y, como no, los DNSs. Al menos, si lo pones como estático. 
    • Además, para que se ponga bien en hora, he puesto dos pool.ntp.org
    La pestaña Status es un resumen de cómo está esta sección de las redes. No tiene mayor misterio.

    Ahora nos vamos a la siguiente parte, que también es importante: El teléfono. Si esto no funciona, mal vamos porque ahí es donde está la gracia. Y... ¡ay! si no funciona.

    Vamos a ver, porque de un día para otro, des-hibernando el equipo ordenador, empezó a funcionar. Pero bueno. Vamos a ver las configuraciones que hacen falta (o que tengo puestas) para que esto funcione (al menos, a mi así me rula). Lo haré mirando las distintas secciones que manipulé y sólo comentaré las que realmente hagan falta tocar.

    Tenemos que ir a la pestaña de regional:
    Códigos de tono para España en el SPA3102 - Regional tab - 01

    Miscelanea: País y configuración para el identificador de llamadas - Regional tab - 01
    Siento no contar mucho al respecto. Uno de los problemas es que tenía varias fuentes de donde obtuve los códigos. Algunas de ellas diferían un poco. Otras, incluso quitaban en los pantallazos algunos datos, tal y como me ha pasado a mí. En el caso de la primera imagen, lo que hay que tocar es el Call Progress Tones. No toques la otra sección de esa captura. Con respecto a la sección de miscelanea, esta configuración me sirve y funciona. Incluso una vez activado el servicio. Asegúrate de que lo tienes activado, no te vayas a volver loco intentando hacer que funcione y no lo haga porque no pueda. Después, se puede dar el caso de que funcione en una instalación y en otra haya que hacer algún que otro cambio como cambiar la impedancia a 600+2.16uF. O el CallerID method, que no sea ETSI FSK. O el Caller ID FSK Standar. Cuando estuve buscando, vi que también podía depender de la compañía. Por lo que mucho ojo.

    Ahora, toca ir al PSTN Line, directamente a la sección PSTN Disconnect Detection. Sólo toqué el disconnect tone:

    SPA3102 - PSTN Line - PSTN Disconect Detection - Discconect tone
    SPA3102 - PSTN Line - PSTN Disconect Detection - Discconect tone
    Ahora mismo, debería de ser posible hacer llamadas a cualquier número normal. Eso sí: posiblemente el acceso al contestador dejando el teléfono descolgado no funcione. Veré si lo consigo arreglar. De todas formas, me parece muy raro que sea sólo esto. A lo mejor me dejo algo en el tintero. Si lo pruebas y no funciona, por favor, deja un comentario abajo y a ver qué se puede hacer.