Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Explique usted cual sera el procedimiento para realizarla instalacion de Dahdi, LibPRI y Asterisk
Instalar LibPRI
Como comentaba antes, la librería libPRI es la encargada de gestionar lo relacionado
a la telefonía digital, es decir los Primarios, PRI, las RDSI (BRI) y a su vez el
protocolo QSIG, estandarizado para la señalización entre PBX que utilicen estos
sistemas de telefonía.
La instalación de LibPRI es bastante sencilla y no suele dar lugar a errores.
Considerar que como ejemplo voy a utilizar la versión aplicable en el momento de la
escritura de este documento, y es muy probable que se mantenga invariable con el
tiempo, ya que estas librerías se encuentran en un nivel de madurez bastante alto y
son poco propensas a sufrir modificaciones con el tiempo.
# cd libpri-1.4.12
# make
Instalar DAHDI
Por otro lado, debemos instalar todo lo referente a DAHDI para el correcto uso de
tarjetas. Al igual que en el caso de LibPRI, todo resulta bastante secuencial y libre de
fallos. Al igual que para el resto de los componentes, esto se aplica a la versión
actual, y muy similar también a LibPRI, DAHDI se encuentra en un nivel de madurez
el cual hace que no sufra modificaciones apenas, excepto para la incorporación de
drivers para tarjetas Digiums nuevas, como ocurrió recientemente con la salida de la
tarjeta de 8 spans como comento en la sección Digium.
Ademas gracias a la instalación de los paquetes DAHDI aun sin tarjetas insertadas,
estamos ofreciendo una fuente de sincronización al sistema por software, vía
dahdi_dummy, útil por ejemplo, para determinadas aplicaciones propias de Asterisk
como MeetMe que lo requieren para funcionar adecuadamente.
# cd dahdi-linux-complete-2.6.1+2.6.1/
# ./configure
Si nos aparece el símbolo de Asterisk significa que existe una alta probabilidad de
que la instalación fluya perfectamente. Sino aparece significa que algo no hemos
instalado correctamente, seguramente sea algún paquete de algún programa durante
la primera fase de la instalación. Con el siguiente comando, podriamos intentar tener
una aproximación de que ha fallado y que puede ser necesario:
# ./configure
En siguiente lugar, nos toca realizar la selección de que es lo que queremos compilar
y transitívamente instalar. Para ello la opción mas sencilla sería acceder al menu de
selección que provee la herramienta de instalación de Asterisk:
# make menuselect
MenuSelect de Asterisk
2. Detalle cual es el procedimiento para: Configurar un Teléfono IP, configurar 3 usuarios SIP y
configurar un Adaptador de teléfono analógic
configurar un teléfono VoIP SIP desde cero. Primero obtendremos los datos SIP
necesarios del router de la operadora para posteriormente poder configurar cualquier
teléfono VoIP SIP.
Seguimos con los vídeos para poder quitar el router de la operadora telefónica. Ya
hemos configurado nuestro router neutro y como vimos en el anterior videotutorial
ahora toca configurar el teléfono. En este vídeo vamos a ver cómo configurar un
teléfono fijo analógico tradicional a través de un adaptador ATA SIP para poder
utilizar un teléfono convencional.
En mi router ZTE F680 de Jazztel tengo estos datos SIP que son públicos e iguales era
todos los usuarios de dicha operadora.
Por otro lado tenemos que obtener los datos SIP propios de cada usuario y para ello
deberemos conectarnos a nuestro router de operadora mediante un acceso telnet y
escribir estas dos líneas.
sendcmd 1 DB p VoIPSIPLine
sendcmd 1 DB p DevInfo
Como puedes ver en la imagen he separado cada bloque o cada eslabón de la cadena
en colores distintos para que sea más fácil identificarlos.
Las macros resultan de mucha ayuda a la hora de elaborar el dial plan, ya que nos
permiten simplificar aun mas la elaboración de nuestro dial plan, es como crear
nuestras propias funciones personalizadas para el dial plan, a continuación vamos a
utilizar como ejemplo la creación de una macros para el buzón de voz.
Utilizaremos las macros para mostrar cual es la mejor manera de configurar una
buzón de voz para varias extensiones.
Definiendo la macros
La macros se definen de una manera muy similar a los contextos,
debemos definir una macros entre corchetes y anteponiendo la palabra
“macro-” antes del nombre de la macro que vamos a crear.
Ejemplos:
[macro-prueba]
[macro-voicemail]
Definiendo la macros
Veamos un ejemplo con el buzón de Jhon pero ahora dentro de una
macros
[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(101@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(101@default,b)
exten => s,n,Hangup()
Definiendo la macros
[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
Usando argumentos en las macros
Ahora vamos a prepara una macros genérica gracias a los argumentos, observemos
el siguiente ejemplo donde por fin separamos la macros del numero de la extensión,
para poder utilizarla desde cualquier extensión.
[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
[from-internal]
exten => 101,1, Macro(voicemail,${JOHN})
exten => 102,1,Macro(voicemail,${JANE})
exten => 103,1,Macro(voicemail,${JACK})
[macro-voicemail]
exten => s,1,Dial(SIP/${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
[from-internal]
exten => 1XX,1,Macro(voicemail,${EXTEN})
Solo debemos tomar en cuenta que en esta ocasión estamos amarrados al protocolo
SIP, en el ej. Anterior no importaba el tipo de canal utilizado ya que este se
declaraba como variables globales.
[macro-voicemail]
exten => s,1,Dial(${ARG1},20)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN},u)
exten => s-NOANSWER,n,Goto(incoming,s,1)
exten => s-BUSY,1,Voicemail(${MACRO_EXTEN},b)
exten => s-BUSY,n,Goto(incoming,s,1)
exten => _s-.,1,Goto(s-NOANSWER,1)
En esta ocasión estamos incluyendo el comando Goto y esto nos puede servir para
reenviar la llamada hacia un menú por ejemplo donde el usuario llamante tenga
mas de una opción.
ASTERISK: FEATURES
TRANSFERENCIAS DESATENDIDA
Este tipo de transferencia consiste en derivar la llamada hacia otro anexo sin
habernos cerciorado antes si la persona en la extensión destino se encuentra
disponible para recibir la llamada.
PARQUEO DE LLAMADAS
Esta función consiste en aparcar una llamada en una extensión virtual dentro de
nuestra central telefónica, de esta manera podremos recuperar esa llamada
simplemente llamando a la extensión virtual creada en el momento que aparcamos
la llamada
Parkingtime => 180, este será el tiempo máximo en segundos que una llamada se
mantendrá en el estacionamiento.
PICKUP GROUP
Por ejemplo si tenemos dos extensiones en un mismo grupo, y llaman a una de ellas
pero justo no se encuentra la persona en su extensión, entonces otra persona podrá
contestar la llamadas desde su extensión (siempre que este dentro del mismo
pickup group) con solo presionar: *8
Pickupexten = *8
Pero será necesario también que asignemos los grupos a cada extensión en el
archivo sip.conf.
Sintaxis:
El plan de marcación se configura en el archivo extensions.conf, este archivo reside
usualmente en la carpeta /etc/asterisk/
CONTEXTOS:
El dial plan se divide en secciones llamadas contextos, los contextos son nombres
para un grupo de extensiones, las cuales pueden tener diferentes propósitos. Los
contextos también pueden interactuar entre ellos.
p.e. context=from-internal
Todas las instrucciones por debajo del nombre del contexto son asignadas a ese
mismo contexto hasta que un nuevo contexto sea declarado.
-[General]
-[Globals]
La sección globals, contiene las variables globales del sistema, las cuales irán siendo
utilizadas por los contextos siguientes.
EXTENSIONES:
Normalmente conocemos con el nombre de extensión, al numero que se le asigna a
los terminales telefónicos, sin embargo en asterisk una extensión es mucho mas que
un número _ telefónico, ya que define una serie de pasos (donde cada paso
contiene una aplicación) que asterisk realizara durante una llamada.
La sintaxis usada para declarar una extensión es la palabra “exten”, seguido de una
flecha formada por una signo igual y un signo mayor
La prioridad (cada extensión puede incluir múltiples pasos, el numero del paso es
llamado prioridad)
PRIORIDADES:
Cada extensión puede tener multiples pasos, llamados prioridades, cada prioridad
es numerada secuencialmente, comenzando con 1, y ejecutando una aplicación
especifica.
Esta prioridad “no numerada” significa que cada prioridad es igual a la prioridad
anterior +1
PRIORIDADES - ETIQUETAS:
Desde asterisk 1.2, es muy común asignar etiquetas de texto (labels), a las
prioridades. Esto es para asegurarnos que podremos referirnos a esa prioridad por
un valor distinto a su numero, el cual probablemente no se conozca (prioridad n), y
dado que actualmente el uso de prioridades no numeradas es muy usual en el diseño
de una dial plan.
Para asignar una etiqueta de texto a una prioridad, solo basta con agregarla entre
paréntesis justo después del numero de la prioridad.
APLICACIONES:
Las aplicaciones son el caballito de batalla del dial plan, cada aplicación realiza una
acción especifica sobre el canal actual, como por ejemplo, tocar una melodía,
aceptando entradas de tono, marcar un canal, colgar una llamada, y así
sucesivamente.
Ocasionalmente podríamos ver el pipe entre los paréntesis, y es que este signo es
utilizado para separar mas de un parámetro.
Vamos a construir un dial plan que consista en que , asterisk contesta la llamada,
toca una melodía, y luego cuelga.
Para este ejemplo vamos a asumir que ya hemos creado la extensión y que tiene
como nombre de contexto “from-internal”
Answer()
Playback()
Hangup()
Answer(), es la aplicación que se utiliza para que la central conteste una llamada
que esta timbrando.
Se puede utilizar al inicio de la configuración del contexto para una extension, pero
en algunas ocasiones no es necesario.
Cuando utilizamos playback, las entradas (inputs) del usuario desde la extension son
ignoradas.
Para utilizar playback() se debe ingresar el nombre del archivo sin la extension (p.e.
.wav o .mp3) como argumento entre los paréntesis.
Playback(/home/john/sounds/filename)
Lo mas comun es crear una carpeta para estos archivos dentro de la ruta por
defecto
Playback(custom/filename)
[from-internal]
exten => 1234,1,Answer()
exten => 1234,n,Playback(hello-world)
exten => 1234,n,Hangup()
p.e.
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)
Luego de este tiempo ejecutara la extensión según los dígitos que fueron
ingresados.
La aplicación Goto(), es utilizada para enviar una llamada a otra parte del dial plan,
la sintaxis de la aplicación Goto(), requiere los argumentos contexto, extensión y
prioridad.
[from-internal]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)
[from-internal]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(from-internal,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(from-internal,123,1)
exten => 3,1,Playback(digits/3)
exten => 3,n,Goto(from-internal,123,1)
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(from-internal,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()
Utilizando las opciones “i” y “t”, obtenemos un dial plan un poco mas robusto y
amigable.
La extensión “S”
Cuando una llamada entra en un contexto sin un destino especifico (por ejemplo
una llamada en la línea FXO), se pasa a la extensión s, “S” significa inicio o start.
[menu]
exten => _98,1,Goto(from-pstn,s,1)
[from-pstn]
exten => s,1,Answer()
exten => s,n,Playback(hello-world)
exten => s,n,Hangup()
Habiendo definido esto ahora pasaremos a ver otras aplicaciones muy importantes,
como la aplicación DIAL(), que nos permite comunicar a dos anexos (personas) entre
si.
La aplicación Dial(), es una de las aplicaciones mas importantes con las que cuenta
asterisk, tiene la capacidad de conectar dos usuarios uno con el otro.
Esto resulta muy útil sobre todo cuando los usuarios están utilizando distintos tipos
de medio de comunicación, por ejemplo.
Por ejemplo podemos utilizar la aplicación Dial() para comunicar a un usuario que
llama desde un teléfono analógico a través de la rede de telefonía tradicional, con
otro usuario que se puede encontrar en cualquier parte del mundo conectado a
través de Internet con su teléfono IP.
La sintaxis de Dial(), es mas compleja que la sintaxis de la funciones anteriores, y
puede tener hasta 4 argumentos, el primero el el destino al cual esta intentando
conectarte.
p.e.
exten => 204,1,Dial(SIP/201)
exten => 202,1,Dial(IAX2/202)
http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial
El carácter “m”, permite que el usuario que esta llamando escuche la MOH en lugar
del tono de ring, hasta que la llamada sea contestada.
Cuando recibimos una llamada podemos derivarla a un menú como el que hemos
creado, pero a su vez podemos formar un menú mas completo con el comando
Dial(), tal como se aprecia en el siguiente ejemplo:
[from-pstn]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Dial(Zap/1,10)
exten => 1,n,Playback(vm-nobodyavail)
exten => 1,n,Hangup()
eten => 2,1,Dial(SIP/Jane,10)
exten => 2,n,Playback(vm-nobodyavail)
exten => 2,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(from-internal,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()
Variables Globales
Variables de Canal
Variables de Entorno
Una variable es como un contenedor que puede mantener una valor durante un
periodo.
Variables Globales, se aplican a todas las extensiones en todos los contextos, esta
variables deberán ser declaradas debajo del contexto [globals].
[globals]
JESUS=SIP/201
JESSICA=SIP/202
PABLO=SIP/208
Ciertamente el tema de las variables resulta mas interesante cuando las asignamos
a las troncales
[globals]
TELEFONICA=ZAP/1
1977=ZAP/2
BASE CLARO=ZAP/3
JESUS=SIP/201
JUAN=SIP/202
Este tipo de esquema nos permite elaborar un dial plan en funciona a variables y si
se produce alguna modificación en el esquema, solo bastara con cambiar el valor de
la variable y no será necesario modificar todo nuestro dial plan.
Variable de canal, esta variable se asocia solamente con una llamada, y a diferencia
de las variables globales, las variables de canal se definen solo para la duración de
la llamada actual, y solo están disponibles para los canales que participan de esa
llamada.
Existen varias variables de canal predefinidas y están disponibles para ser utilizadas
durante la marcación.
p.e.
Las variables de entorno, son una forma de acceder a las variables del entorno unix
desde asterisk, podemos hacer referencia a estas variables a través de la funciona
de marcación env(), la sintaxis de esta variables es:
${ENV(var)} ; donde var es una variable del entorno de linux o unix a la cual
queremos referenciar.
Este tipo de variables no son de uso común en el dial plan pero están disponibles si
fuesen necesarias.
Los patrones de marcación son comodines que nos permiten simplificar un grupo de
extensiones, con este tipo de comodines podemos crear reglas que agrupen grandes
conjuntos de números en unas cuantas líneas.
X : equivale a un digito 0 – 9
Z : equivale a un digito 1 – 9
N : equivale a un digito 2 – 9
[15-7] : equivale a los dígitos 1, 5, 6, 7.
. : Este comodín equivale a un o mas dígitos sin importar el valor
A partir de esta variable también podemos mutilar el numero marcado, por ejemplo
si seguimos la siguiente sintaxis conseguiremos recortar los primeros dígitos del
numero.
Si queremos que los usuarios marquen el nueve antes del numero que van a llamar
como en la mayoría de las centrales telefónicas el dial plan seria:
[default]
exten=>s,1,NoOp(Llamadas desde el exterior)
exten=>s,n,Dial(SIP/100,20)
exten=>s,n,VoiceMail(100,u)
/etc/init.d/mysql start
4.- Asignamos passwdord al usuario root de MySQL
mysqladmin -u root password contraseña
5.- Iniciamos una sesión en el servidor, creamos la base de datos TRABAJO y la tabla
CONTACTO (ver apuntes de ayer)
6.- Instalamos los paquetes libmyodbc y unixodbc-dev (reparar en sus dependencias)
7.- Editamos el fichero /etc/odbc.ini (estará en blanco) y le introducimos estas líneas:
[trabajo]
Trace = Off
TraceFile= stderr
Driver = /usr/lib/odbc/libmyodbc.so
DSN = trabajo
SERVER = localhost
USER = root
PASSWORD = contraseña
PORT = 3306
#OPTIONS = 1
#DATABASE= trabajo
#SOCKET = /tmp/mysql.soc
si bien en este ejercicio conectamos como root, lo correcto seria hacerlo como un usuario
determinado de MySQL que tiene determinados privilegios sobre la base de datos TRABAJO.
También es conveniente reparar en que la conexión se hace por el puerto por defecto por el
que responde MySQL. Eso significa que aunque conectemos sobre la localhost, la conexión es
una conexión de red, de ahí que hayamos tenido que habilitar las conexionesde red en el
my.cnf
(Al instalar el paquete libmyodbc, encontraremos en
/usr/share/doc/libmyodbc/exmples un ejemplo del fichero odbc.ini que podemos
utilizar retocándolo con los datos de nuestro servidor MySQL y nuestra base de
datos)
6.- Abrimos un documento de Write (OO) y vamos al menú Herramientas/Fuente de Datos.
Creamos una nueva Fuente de Datos llamada Trabajo. Ponemos como tipo de Fuente de Datos
la opción MySQL
7.- Vamos a la Pestaña MySQL, editamos la URL de Fuente de Datos y comprobamos que nos
aparece el perfil que hemos creado en /etc/odbc.ini que se llamaba [trabajo] . En /etc/odbc.ini
podríamos definir varios perfiles para accesos a múltiples bases de datos
8.- En la Pestaña Tablas comprobamos que hemos accedido a la base de datos TRABAJO y
que se visualiza la tabla CONTACTO
9.- Con el editor de SQL o el Asistente Gráfico diseñamos una Consulta