Академический Документы
Профессиональный Документы
Культура Документы
PaloSanto Solutions
2010
Laboratorio 6.1
Capítulo:
Configuración Básica de Elastix
Descripción: En este laboratorio haremos la configuración básica de nuestra central, se configurará la red con 1 IP
estático, se creará una extensión sip y se probará la misma
Instrucciones:
• Elastix por defecto se configura con ip dinámico a través de dhcp, lo más probable es que tengamos que
asignar un ip estático a nuestra central. Para esto ingresamos a la central y nos vamos al menú sistema-red.
Una vez ahí seleccionamos la interfase de red que queremos configurar (ej. Ethernet 1). Obtendremos la
siguiente pantalla:
• Es muy probable que debamos cambiar la configuración de host, dns y puerta de enlace. Esto lo hacemos
entrando a la opción modificar parámetros de red la pantalla principal de configuración de red.
• Lo siguiente que haremos es crear una extensión para poder probar nuestra configuración. Para esto nos
vamos al menú pbx y creamos una extensión sip;
• Ahora configuramos una extensión con la configuración básica. Para este ejemplo hemos creado la
extensión 200 con el nombre “Usuario de Pruebas” y la contraseña “secreto123”.
• Para este ejercicio utilizaremos ekiga que es un softphone libre disponible para Windows y Linux. Algo
similar debería hacer usted para configurar un teléfono IP u otro softphone. Para más información visite
(http://www.ekiga.net).
• La primera vez que corramos ekiga nos aparecerá un asistente de configuración con 10 pasos para
configurar. En el tercer paso nos aseguramos de seleccionar no quiero registrarme en el servicio gratuito de
ekiga.net.
• En el paso 4 seleccionamos el tipo de red en la que estamos trabajando. Para el laboratorio lo más probable
es que trabaje en una red lan.
• En el paso 5 seleccionamos stun si nuestro softphone debe pasar a través de nat para llegar al servidor.
Esto es útil si usamos el softphone desde una laptop en un lugar remoto con IP privada.
Ahora probamos marcando al número *43 y hacer una prueba de eco con nuestra central como se puede ver en la
imagen:
Laboratorio 6.2
Capítulo:
Configuración Básica de Elastix
Descripción: En este laboratorio se harán configuraciones adicionales a elastix como son salas de conferencias y
colas. Es importante para este laboratorio tener 3 o más extensiones configuradas en nuestro equipo de prueba.
Instrucciones:
• Crearemos una cola de atención que timbrará a las extensiones 200, 201 y 203 cuando se marque la
extensión 202. Para esto ingresamos al menú Elastix -> PBX -> Colas.
• Crearemos una sala de conferencia con el número 300 donde al llamar a este número 3 o más personas
podrán hablar a la vez. Para esto nos vamos a Sistema -> PBX -> Conferencias.
• Ahora intente llamar a esta conferencia desde varios teléfonos y podrán hablar varias personas
simultáneamente.
Asterisk
LABORATORIO CAPITULO 08
PaloSanto Solutions
2010
Laboratorio 8.1
Capítulo:
Asterisk
Objetivo: Entender el funcionamiento de un plan de marcado, familiarizarse con los archivos de configuración y
practicar la sintaxis de la gramática de un plan de marcado.
Instrucciones:
• Grabar y Salir.
• Crear el archivo extensions_custom_XXXXX.conf
• Grabar y Salir.
• Cambiarle los permisos y propietario al archivo extensions_custom_XXXXX.conf
• Recargar asterisk:
Laboratorio 8.2
Capítulo:
Asterisk
Descripción: Crear un plan de marcado para llamar a las extensiones 502 y 503, crear un plan de marcado para
marcar hacia una PSTN.
Objetivo: Entender el funcionamiento de una plan de marcado, familiarizarse con los archivos de configuración y
practicar la sintaxis de la gramática de un plan de marcado.
Instrucciones:
[custom-lab4]
exten=>502,1,Dial(SIP/502)•
exten=>503,1,Dial(SIP/503)
exten=>9,1,Dial(ZAP/g0,20,r)•
•
• Grabar y Salir.
• Incluir el contexto [custom-lab4] dentro del contexto [from-internal-custom] ubicado en el archivo
/etc/asterisk/extensions_custom.conf
• Recargar asterisk:
Laboratorio 8.3
Capítulo:
Asterisk
Descripción: Crear un contexto que implemente la grabación de un audio usando como extensión el número 5678
y las funciones Record y Playback.
Instrucciones:
[custom-recordme]
exten => 5678,1,Wait(2)•
exten => 5678,2,Record(custom/bienvenidocurso:gsm,0)•
exten => 5678,3,Wait(2)•
exten => 5678,4,Playback(custom/bienvenidocurso)•
exten => 5678,5,Wait(2)•
exten => 5678,6,Hangup
• Grabar y Salir.
• Incluir el contexto creado dentro del contexto [from-internal-custom] ubicado en el archivo
/etc/asterisk/extensions_custom.conf
• Recargar asterisk:
Laboratorio 8.4
Capítulo:
Asterisk
Descripción: Crear un contexto que implemente un mini IVR de 2 opciones en donde cada opción dirija la llamada
a una extensión. Para implementar esto usaremos la aplicación Background().
Objetivo: Familiarizarse con la creación de contextos y las aplicaciones Background(), WaitExten() y Dial().
Instrucciones:
[custom-lab6]
exten => 3998,1,Background(custom/bienvenidocurso)•
exten => 3998,n,WaitExten(,)
exten => 1,1,Dial(SIP/501)•
exten => 2,1,Dial(SIP/502)•
• Grabar y Salir.
• Incluir el contexto creado dentro del contexto [from-internal-custom] ubicado en el archivo
/etc/asterisk/extensions_custom.conf
• Recargar asterisk:
Laboratorio 8.5
Capítulo:
Asterisk
Descripción: Crear un contexto que implemente un IVR de 3 opciones en donde la primera opción sea marcar a
una extensión, la segunda opción reproducir un audio y la tercera opción marcar a dos extensiones
simultáneamente.
Instrucciones:
[custom-ivr]
exten => 3999,1n,Answer
exten => 3999,n,Wait(1)
exten => 3999,n,Set(TIMEOUT(digit)=3)
exten => 3999,n,Set(TIMEOUT(response)=10)
exten => 3999,n,Background(custom/bienvenidocurso)
exten => 3999,n,WaitExten(,)
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
exten => 1,1,Dial(SIP/503)
exten => 1,n,Hangup()
exten => 2,1,Playback(custom/hoyeslaborable)
exten => 2,n,Hangup()
exten => 3,1,Dial(SIP/501&SIP/503)
exten => 3,n,Hangup()
exten => i,1,Playback(invalid)
exten => i,n,Hangup()
exten => t,1,Hangup()
Laboratorio 8.6
Capítulo:
Asterisk
Descripción: Crear el contexto del laboratorio anterior pero usando las aplicación Goto().
Instrucciones:
[custom-lab8]
exten => 4000,1,Answer
exten => 4000,n,Wait(1)
exten => 4000,n,Set(TIMEOUT(digit)=3)
exten => 4000,n,Set(TIMEOUT(response)=10)
exten => 4000,n,Background(custom/bienvenidocurso)
exten => 4000,n,WaitExten(,)
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
exten => 1,1,Goto(ext-503,s,1)
exten => 2,1,Goto(toca-audio,s,1)
exten => 3,1,Goto(ext-doble,s,1)
exten => i,1,Playback(invalid)
exten => i,n,Hangup()
exten => t,1,Hangup()
[ext-503]
exten => s,1,Dial(SIP/503)
exten => s,n,Hangup()
[toca-audio]
exten => s,1,Playback(custom/hoyeslaborable)
exten => s,n,Hangup()
[ext-doble]
exten => s,1,Dial(SIP/501&SIP/503)
exten => s,n,Hangup()
Laboratorio 8.7
Capítulo:
Asterisk
Descripción: Crear un contexto que solicite una autenticación antes de marcar una extensión usando la aplicación
Authenticate().
Instrucciones:
[custom-lab9]
exten => 4001,1,Answer
exten => 4001,n,Wait(1)
exten => 4001,n,Authenticate(1234)
exten => 4001,n,Dial(SIP/503)
exten => 4001,n,Hangup()
Laboratorio 8.8
Capítulo:
Asterisk
Descripción: Crear un contexto que requiera autenticación antes de dar tono de marcado por medio de la
aplicación DISA.
Instrucciones:
[custom-lab10]
exten => 4002,1,Answer
exten => 4002,n,Wait(1)
exten => 4002,n,Authenticate(1234)
exten => 4002,n,DISA(no-password,from-internal)
exten => 4002,n,Hangup()
Laboratorio 8.9
Capítulo:
Asterisk
Descripción: Crear un contexto que solicite una extensión y luego reproduzca la extensión ingresada usando la
aplicación SayDigits().
Instrucciones:
[custom-lab11]
exten => 4003,1,Answer
exten => 4003,n,Set(CHANNEL(language)=es)
exten => 4003,n,Background(custom/ingrese4digitos)
exten => 4003,n,WaitExten(,)
exten => _X.,1,SayDigits(${EXTEN})
exten => _X.,n,Hangup()
Laboratorio 8.10
Capítulo:
Asterisk
Descripción: Crear un contexto que solicite un número y luego reproduzca el número ingresado usando la
aplicación SayNumber().
Instrucciones:
[custom-lab12]
exten => 4004,1,Answer
exten => 4004,n,Set(CHANNEL(language)=es)
exten => 4004,n,Background(custom/ingresenumero)
exten => 4004,n,WaitExten(,)
exten => _X.,1,SayNumber(${EXTEN})
exten => _X.,n,Hangup()
Laboratorio 8.11
Capítulo:
Asterisk
Descripción: Crear un contexto que solicite una extensión y luego deletree su nombre usando la aplicación
SayAlpha().
Instrucciones:
[custom-lab13]
exten => 4005,1,Answer
exten => 4005,n,Set(CHANNEL(language)=es)
exten => 4005,n,SayAlpha(Alfredo)
exten => 4005,n,Hangup()
Laboratorio 8.12
Capítulo:
Asterisk
Descripción: Crear un contexto que solicite una extensión a espiar y luego intervenga una conversación actual
usando la aplicación ChanSpy().
Instrucciones:
[custom-lab14]
exten => 4006,1,Read(puerto,conf-getchannel,4)
exten => 4006,n,ChanSpy(SIP/${puerto})
exten => 4006,n,Hangup
Laboratorio 8.13
Capítulo:
Asterisk
Descripción: Realizar una llamada desde la consola de asterisk usando el módulo chan_oss.so y el comando dial.
Objetivo: Familiarizarse con la consola de asterisk y usar el módulo chan_oss.so como herramienta de testeo.
Instrucciones:
Configuración de Hardware
LABORATORIO CAPITULO 09
PaloSanto Solutions
2010
Laboratorio 9.1
Capítulo:
Configuración de Hardware
Descripción: Se configurará una tarjeta análoga y una digital a través de la interfaz web de Elastix
Instrucciones
• Ingresar a la interfaz web de Elastix y seleccionar el menú de Detección de Hardware dentro de la categoría
Sistema.
• Seleccionar detectar Hardware.
• Selecciona la opción remplazar zapata.conf
• Listo su hardware ya está configurado
• Ahora desmontar la tarjeta de la ranura PCI y coloca una tarjeta E1/T1 y sigue los pasos anteriores, pero
seleccionando la opción: “Detección de hardware ISDN”.
PaloSanto Solutions
2010
Laboratorio 10.1
Capítulo:
Elastix Configuración Avanzada
Descripción:
Crear una tarifa de $0.15 para el uso de la troncal Zap/g0 con un valor de conexión de $0.01. Hacer una llamada
por la troncal y verificar los datos registrados en el reporte de tarifación.
Objetivo:
Familiarizarse con el uso del módulo de Tarifación de Elastix.
Instrucciones:
PaloSanto Solutions
2010
Laboratorio 12.1
Capítulo:
Interconexión con Elastix Remotos
Descripción: Inteconectar dos centrales Elastix en la que se podrán comunicar extensiones de la central A con las
extensiones de la central B
Instrucciones:
• Esquema
Central A Central B
ELX-3000 ELX-3000
Teléfono A Teléfono B
• Logonearse en la interface Elastix, hacer “click” en la pestaña “PBX”, uego escoger en el menú izquierdo la
opción “Trunk” y hacemos “click” en “Add SIP Trunk”.
• Definimos el nombre de la troncal el cual en nuestro caso servirá de username para el proceso de registro.
A la troncal de la central A le llamaremos elastixA y la troncal de la central B le llamaremos elastixB y
definimos los detalles del peer como :
host=dynamic
secret=welcome
trunk=yes
type=friend
Configuración que se repite en ambos elastix. Como se ve hemos definido como “secret” la palabra “welcome”.
elastixB:welcome@192.168.1.240
elastixA:welcome@192.168.1.239
• Verificamos en el asterisk cli si se encuentran registradas las troncales mediante el comando: sip show
registry y deberíamos ver algo como esto:
• El siguiente paso es definir los detalles del user, es decir en donde se quiere terminar la llamada. En este
caso queremos que sea accesible a la extensiones local, bastará con colocar el contexto primario.
context=from-internal
host=192.168.1.240
insecure=very
type=friend
2|XXX.
• Luego escogemos la troncal por que debe salir la llamada en este caso escogemos por la troncal
sip/elastixA. Lo mismo aplica para la central B.
Laboratorio 12.2
Capítulo:
Interconexión con Elastix Remotos
Descripción: Interconectar la central Elastix con el proveedor de llamadas internacionales VoicePulse y realizar
llamadas hacia otros países.
Instrucciones:
• Esquema
• Luego definimos las características del peer. En nuestro caso deberá ser de la siguiente forma:
allow=ulaw&alaw&gsm&ilbc&g726&adpcm&lpc10
canreinvite=no
disallow=all
dtmfmode=info
fromuser=myusername
host=nyc.voicepulse.com
qualify=5000
secret=mypassword
sendrpid=yes
type=peer
username=myusername
myusername:mypassword@nyc.voicepulse.com
• Creamos la ruta saliente con nombre INTERNACIONAL y definimos el patrón de marcado, en este caso
usaremos el siguiente patrón de marcado:
00.
• En tercer lugar escogemos la troncal por la que debe salir la llamada en este caso escogemos por la troncal
SIP/VP-SIP-NYC.
Calidad de Voz
LABORATORIO CAPITULO 13
PaloSanto Solutions
2010
Laboratorio 13.1
Capítulo:
Calidad de Voz
Descripción:
Calcular el parámetro R del modelo E usando la fórmula simplificado y la tabla Ie vs pérdida de paquete para la
red del laboratorio y obtener el respectivo valor de la escala MOS. Usar el codec g.711.
Objetivo:
Entender y dominar el uso de las fórmulas que nos permiten determinar la calidad de voz de una manera objetiva.
Instrucciones:
• Determinar el retardo de un punto de un punto específico de la red usando el comando “ping” como se
muestra en el gráfico:
• Calcular el valor de Ie de acuerdo a la tabla con un valor de porcentaje paquetes perdidos igual al 0%. En
este caso el valor es 0.
Ie = 0
• Calcular el valor de Id con la fórmula respectiva reemplazando el valor de retardo, en este caso 2.70 ms.
Id = 0.0648
R = 94.2 – 0.0648 – 0
R = 94.1352
MOS = 4.4266
PaloSanto Solutions
2010
Laboratorio 14.1
Capítulo:
SIP y RTP al descubierto
Descripción:
Usar la herramienta wireshark para capturar la conversación entre su extensión y la de otro compañero del curso y
obtener el gráfico de intercambio de eventos y métodos de dicha conversación.
Objetivo:
Ver de manera gráfico el intercambio de métodos de una conversación e identificar los eventos de contestación,
colgado de una llamada, etc.
Instrucciones:
• Ingresamos la menú “Statistics” y hacemos click en la opción “Graph Flow” y veremos lo siguiente:
• Identifiquemos los métodos y eventos que se intercambian entre los dispositivos y la central Elastix. En la
parte superior del gráfico se indica el flujo de dicho intercambio.
• Para revisar estadísticas ir la menú “Statistics” y hacer click en la opción “SIP”. Veremos algo como sigue:
Laboratorio 14.2
Capítulo:
SIP y RTP al descubierto
Descripción:
Usar la herramienta wireshark para capturar la conversación entre su extensión y la de otro compañero del curso y
analizar los paquetes RTP, generar un archivo (.au) y reproducir el payload de los paquetes que forman esa
conversación.
Objetivo:
Adiestrar al estudiante al uso de sniffers para analizar tráfico RTP y generar y reproducir el payload de una captura
de paquetes.
Instrucciones:
• Con la captura realizada de la práctica anterior, seleccionar el primer paquete RTP de dicha captura.
• En el menú “Statistics” escoger la opción “RTP” y luego seleccionar la opción “Stream Analysis”. Veremos lo
siguiente:
• Luego hacer click en el botón Payload y escoger el formato (.au) y en la opción Channels escoger (both).
Colocar como nombre de archivo payload1.au
Diagnóstico básico
LABORATORIO CAPITULO 15
PaloSanto Solutions
2010
Laboratorio 15.1
Capítulo:
Diagnóstico Básico
Objetivo: Familiarizarse con el uso de la consola de asterisk CLI, utilización de ciertos comandos básicos.
Instrucciones:
root@elastix:~$ asterisk -r
Asterisk 1.4.17, Copyright (C) 1999 - 2006 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for
details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it
under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.4.17 currently running on extranet (pid = 12312)
Verbosity is at least 3
elastix*CLI>
elastix*CLI>
! abort add ael agent agi cb
cdr clear convert core database debug
dialplan dnsmgr dont dump dundi extensions
feature file group help http iax2
include indication init keys load local
logger manager meetme mgcp mixmonitor module moh
no originate queue realtime reload remove
restart rtcp rtp say set show sip
sla soft stop stun udptl unload voicemail
elastix*CLI> help
! Execute a shell command
abort halt Cancel a running halt
ael debug contexts Enable AEL contexts debug (does nothing)
ael debug macros Enable AEL macros debug (does nothing)
ael debug read Enable AEL read debug (does nothing)
ael debug tokens Enable AEL tokens debug (does nothing)
ael nodebug Disable AEL debug messages
ael reload Reload AEL configuration
agent logoff Sets an agent offline
agent show Show status of agents
Laboratorio 15.2
Capítulo:
Diagnóstico Básico
Descripción: Ingresar a la consola de asterisk y ejecutar los comandos “show queues”, “show features”, “show
uptime”, “show version”, “show codecs”.
Objetivo: Familiarizarse con el uso de la consola de asterisk CLI y con los comandos arriba mencionados. Además
entender la salida de dichos comandos y su utilidad.
Instrucciones:
Call parking
------------
Parking extension : 700
Parking context : parkedcalls
Parked call extensions: 701-750
Asterisk AGI
LABORATORIO CAPITULO 16
PaloSanto Solutions
2010
Laboratorio 16.1
Capítulo:
Asterisk AGI
Descripción: Crear un agi que consulte una la tabla cedula y que mediante el ingreso de un código, este retorne y
reproduzca el número de cédula asociado, dígito a dígito. Es necesario grabar los audios que solicitan el ingreso
del código y un mensaje de despedida que “gracias por su consulta”.
Objetivo: Practicar la creación de AGI, familiarizarse con las funciones STREAM FILE, GET DATA, SAY DIGITS e
implementar un consulta básica a una base de datos.
Instrucciones:
[from-internal-custom]
include => custom-agi
[custom-agi]
exten => 123,1,Answer()•
exten => 123,2,AGI(agi-test.agi)
exten => 123,3,Hangup()
• Recargar asterisk
• Construir el AGI en PHP usando su editor preferido (vi) y ubicarlo en la carpeta /var/lib/asterisk/agi-bin.
#!/usr/bin/php -q
<?php
dl('sqlite3.so');
require_once 'DB.php';
set_time_limit(60);
ob_implicit_flush(false);
error_reporting(0);
$stdin = fopen( 'php://stdin', 'r' );
$stdout = fopen( 'php://stdout', 'w' );
while (!feof($stdin)) {
$temp=fgets($stdin);
$temp=str_replace("\n", "", $temp);
$s=explode(":",$temp);
$agivar[$s[0]]=trim($s[1]);
if (($temp=="")||($temp=="\n")) {
break;
}
}
do{
$data=execute_agi("GET DATA custom/ingrese_codigo 5000");
$codigo=isset($data['result'])?$data['result']:"0";
}while($codigo=="");
$ok = NULL;
$dbConn =& DB::connect("sqlite3:////var/www/db/cedula.db");
if (DB::isError($dbConn)) {
//error de conexion
echo "error:".$dbConn->getMessage();
}
$recordset =& $dbConn->query("SELECT cedula FROM cedula where id=".$codigo);
if (DB::isError($recordset)) {
echo "error:".$recordset->getMessage();
}else{
while ($tupla = $recordset->fetchRow(DB_FETCHMODE_OBJECT)) {
$numero = trim($tupla->cedula);
execute_agi("SAY DIGITS $numero X");
execute_agi("STREAM FILE custom/gracias \"\"");
}
}function execute_agi($command) {
GLOBAL $stdin, $stdout;
fputs( $stdout, $command . "\n" );
fflush( $stdout );
$resp = fgets( $stdin, 4096 );
if (preg_match("/^([0-9]{1,3}) (.*)/", $resp, $matches)) {
if (preg_match('/result=([-0-9a-zA-Z]*)(.*)/', $matches[2], $match)) {
$arr['code'] = $matches[1];
$arr['result'] = $match[1];
if (isset($match[3]) && $match[3])
$arr['data'] = $match[3];
return $arr;
} else {
$arr['code'] = $matches[1];
$arr['result'] = 0;
return $arr;
}
} else {
$arr['code'] = -1;
$arr['result'] = -1;
return $arr;
}
}
?>
Laboratorio 16.2
Capítulo:
Asterisk AGI
Descripción: Realizar el debugging del AGI creado en la práctica anterior y verificar las variables enviadas desde y
hacia un AGI.
Objetivo: Usar los comandos de debug de un AGI y entender la salida mostrada en la consola de asterisk.
Instrucciones:
• Veremos la salida donde se muestran las variables de un AGI y la comunicación desde y hacia el agi.
Laboratorio 16.3
Capítulo:
Asterisk AMI
Descripción: Conectarse vía TELNET con AMI, enviar el comando LOGIN y enviar el comando LOGOFF
Objetivo: Familiarizarse con la conexión con AMI y ejecutar comandos básicos y ver la respuesta obtenida.
Instrucciones:
Laboratorio 16.4
Capítulo:
Asterisk AMI
Descripción: Conectarse vía TELNET con AMI, y ejecutar la acción “Originate” para realizar una llamada a otra
extensión.
Objetivo: Familiarizarse con la conexión con AMI y ejecutar comandos básicos y ver la respuesta obtenida.
Instrucciones:
Action: Originate
Channel: SIP/503
Context: from-internal
Exten: 500
Priority: 1
Laboratorio 16.5
Capítulo:
Asterisk AMI
Descripción: Construir un AGI que permita conectar una llamada hacia la extensión XXXX, utilizando la librería
“php-asmanager.php” y la función Originate.
Objetivo: Utilizar la librería “php-asmanager” y la función Originate y estimular el ingenio para la creación de
funcionalidades usando AGI y AMI.
Instrucciones:
#!/usr/bin/php -q
<?php
require_once "/var/lib/asterisk/agi-bin/phpagi-asmanager.php";
$astman = new AGI_AsteriskManager();
$resultado= $astman->connect("127.0.0.1", "admin", "elastix456");
$salida = $astman->Originate("SIP/500","503","from-internal","1");
$astman->disconnect();
?>
PaloSanto Solutions
2010
Laboratorio 17.1
Capítulo:
Plan de Marcado Avanzado
Descripción: Crear un contexto que verifique la fecha y hora del día y reproduzca un audio si matchea y
reproduzca otro audio si no matchea.
Instrucciones:
[custom-lab51]
exten => 4007,1,GotoIfTime(*,*,4,jul?open,s,1)
exten => 4007,n,GotoIfTime(09:00-17:59|mon-fri|*|*?open,s,1)
exten => 4007,n,GotoIfTime(09:00-11:59|sat|*|*?open,s,1)
exten => 4007,n,Goto(closed,s,1)
[open]
exten => s,1,Wait(1)
exten => s,n,Playback(custom/hoyeslaborable)
exten => s,n,Hangup()
[closed]
exten => s,1,Wait(1)
exten => s,n,Playback(custom/hoynoeslaborable)
exten => s,n,Hangup()
• Recargar asterisk:
Laboratorio 17.2
Capítulo:
Plan de Marcado Avanzado
Instrucciones:
[custom-lab52]
exten => 4008,1,Answer()
exten => 4008,n,Set(CHANNEL(language)=es)
exten => 4008,n,Read(OPERA1,custom/ingrese1opera,3)
exten => 4008,n,Read(OPERA2,custom/ingrese2opera,3)
exten => 4008,n,background(custom/ingreseopera)
exten => 4008,n,WaitExten(,)
exten => 1,1,Playback(custom/resultadoes)
exten => 1,n,SayNumber($[${OPERA1}+${OPERA2}])
exten => 1,n,Hangup()
exten => 2,1,Playback(custom/resultadoes)
exten => 2,n,SayNumber($[${OPERA1}-${OPERA2}])
exten => 2,n,Hangup()
exten => 3,1,Playback(custom/resultadoes)
exten => 3,n,SayNumber($[${OPERA1}*${OPERA2}])
exten => 3,n,Hangup()
exten => 4,1,Playback(custom/resultadoes)
exten => 4,n,SayNumber($[${OPERA1}/${OPERA2}])
exten => 4,n,Hangup()
• Recargar asterisk:
Laboratorio 17.3
Capítulo:
Plan de Marcado Avanzado
Descripción: Crear un contexto que implemente un verficador de número de cédula (algoritmo dígito verificador).
Objetivo: Familiarizarse con los operadores matemáticos, la aplicación GotoIf y la aplicación condicional While -
EndWhile.
Instrucciones:
[custom-lab53]
exten => 4009,1,Answer()
exten => 4009,n,Set(CHANNEL(language)=es)
exten => 4009,n,Set(TOT=0)
exten => 4009,n,Read(CEDULA,custom/ingresecedula,10)
exten => 4009,n,Noop(${CEDULA})
exten => 4009,n,Set(VAR=0)
exten => 4009,n,While($[${VAR} < 9])
exten => 4009,n,SET(DIG=${CEDULA:${VAR}:1})
exten => 4009,n,Set(RV=${MATH(${VAR} % 2,int)})
exten => 4009,n,NoOp(${RV})
exten => 4009,n,Gotoif($[${RV} = 0]?:impar)
exten => 4009,n,SET(MULT=2)
exten => 4009,n,Goto(salto1)
exten => 4009,n(impar),SET(MULT=1)
exten => 4009,n(salto1),Set(ACUM=${MATH(${DIG}*${MULT},int)})
exten => 4009,n,Gotoif($[${ACUM}<10]?:madiez)
exten => 4009,n,SET(ACUM=${ACUM})
exten => 4009,n,Goto(salto2)
exten => 4009,n(madiez),SET(ACUM=$[${ACUM}-9])
exten => 4009,n(salto2),SET(TOT=$[${TOT} + ${ACUM}])
exten => 4009,n,SET(VAR=$[${VAR} + 1])
exten => 4009,n,EndWhile
exten => 4009,n,Set(RES=${MATH(${TOT} % 10,int)})
exten => 4009,n,GotoIf($[${RES}=0]?:restar)
exten => 4009,n,SET(VER=0)
exten => 4009,n,Goto(salto3)
exten => 4009,n(restar),SET(VER=$[10-${RES}])
exten => 4009,n(salto3),Gotoif($[${CEDULA:9:1}=${VER}]?:error)
exten => 4009,n,Playback(custom/correcto)
exten => 4009,n,Goto(salto4)
exten => 4009,n(error),Playback(custom/incorrecto)
exten => 4009,n(salto4),SayNumber(${VER})
exten => 4009,n,Hangup()
• Recargar asterisk:
Laboratorio 17.4
Capítulo:
Plan de Marcado Avanzado
Descripción: Crear un archivo .call que realice una llamada a una extensión y en el momento de contestar
reproduzca un audio.
Instrucciones:
Channel: local/503@from-internal
MaxRetries: 1
RetryTime: 60
WaitTime: 30
Context: from-internal
Extension: 500
Priority: 1
Laboratorio 17.5
Capítulo:
Plan de Marcado Avanzado
Descripción: Crear un archivo .call que realice una llamada a una extensión, conecte la llamada a un contexto y
reproduzca un audio.
Instrucciones:
• Crear un audio.
[custom-tocaudio]
exten => s,1,Answer()
exten => s,n,Playback(custom/bienvenidocurso)
exten => s,n,Hangup()
Channel: local/500@from-internal
MaxRetries: 1
RetryTime: 60
WaitTime: 30
Context: custom-tocaudio
Extension: s
Priority: 1
PaloSanto Solutions
2010
Laboratorio 18.1
Capítulo:
Elastix Email System
Descripción: Cada estudiante crear un dominio denominado pruebaX.com en donde X es un número secuencial y
crear una cuenta de correo para ese dominio usando el módulo de Email.
Instrucciones:
• Procedemos a crear el dominio que usaremos para el envío y recepción de correos electrónicos, podemos
crear tantos dominios como necesitemos
• Ahora debemos crear las cuentas de correo de los usuarios, para la cual seleccionamos el dominio dentro
del cual deseamos crear nuestra cuenta de correo.
• Ahora debemos configurar el RELAY para nuestro servicio de correo en la central Elastix.
• Elastix nos da la facilidad de revisar las cuentas de correo mediante clientes webmail en este caso el
RoundCube.
PaloSanto Solutions
2010
Laboratorio 19.1
Capítulo:
Sistema de Fax en Elastix.
Descripción: Crear la extensión IAX 300X y asociarla a un fax virtual. Desde el Fax físico del laboratorio, enviar
una fax a cada fax virtual y verificar en el visor de fax la recepción del mismo.
Instrucciones:
• Una vez creado el fax podremos modificarlo o eliminarlo según nuestra necesidad
• La opción Fax Clients nos permitirá especificar las direcciones IP de los equipos que podrán enviar fax por
medio de la elastix
• La opción Template Email nos permite configurar los parámetros del email que será enviado con el fax.
• El visor de Fax nos permitirá visualizar todos los fax que hayamos recibido en nuestra central elastix
Laboratorio 19.2
Capítulo:
Sistema de Fax en Elastix.
Descripción: Enviar un fax utilizando el comando sendfax hacia uno de los faxes virtuales creados en el laboratorio
anterior.
Instrucciones:
• Primero hay que crear un archivo en este caso llamado pruebattsX.txt con un texto.
Mensajería Instantánea en
Elastix
LABORATORIO CAPITULO 20
PaloSanto Solutions
2010
Laboratorio 20.1
Capítulo:
Mensajería Instantánea en Elastix.
Descripción:
Instalación de Openfire con una base de datos Mysql.
Objetivo:
Instalar openfire con una base de datos Mysql, crear la base de datos y el usuario de dicha base de datos.
Instrucciones:
Datos:
La clave de root de mysql es: eLaStIx.2oo7
• Crear el usuario openfire con todos los privilegios para ejecutar las sentencias SQL en la base de datos
openfire.
• Ir a la interface de Elastix y hacer click en la pestaña “IM” y seguir los pasos de instalación vistos en clase
escogiendo conectarse a una base de datos externa de tipo MySql.
Laboratorio 20.2
Capítulo:
Mensajería Instantánea en Elastix.
Descripción:
Integración de Openfire con Elastix.
Objetivo:
Aplicar las configuraciones vistas en clase en un ejemplo real y demostrar el funcionamiento de la mensajería
Instantánea con Elastix.
Instrucciones:
Sintetización y Reconocimiento
de Voz
LABORATORIO CAPITULO 21
PaloSanto Solutions
2010
Laboratorio 21.1
Capítulo:
Sintetización y Reconocimiento de Voz
Descripción:
Usar el comando text2wave para implementar la sintetización de un texto almacenado en un archivo y reproducirlo
por medio de un contexto
Objetivo:
Practicar el uso del comando text2wave.
Instrucciones:
• Primero hay que crear un archivo en este caso llamado pruebattsX.txt con un texto.
[from-internal-custom]
include => prueba-tts
[prueba-tts]
exten => 4466,1,Answer
exten => 4466,2,Wait(1)
exten => 4466,3,Playback(custom/pruebatts1)
exten => 4466,4,Hangup
• Recargar asterisk
• Probar marcando 4466 desde su teléfono. Deberá escuchar la reproducción del texto contenido en el
archivo pruebatts1.txt.
Laboratorio 21.2
Capítulo:
Sintetización y Reconocimiento de Voz
Descripción:
Usar la función Festival para implementar la sintetización de un texto desde un contexto.
Objetivo:
Practicar el uso de la función Festival
Instrucciones:
[from-internal-custom]
include => prueba-festival
[prueba-festival]
exten => 4467,1,Answer
exten => 4467,2,Wait(1)
exten => 4467,3,Festival('Hola mundo','any')
exten => 4467,4,Hangup
• Recargar asterisk
• Probar marcando 4467 desde su teléfono. Deberá escuchar la reproducción del texto contenido en el
archivo pruebatts1.txt.
Desempeño
LABORATORIO CAPITULO 22
PaloSanto Solutions
2010
Laboratorio 22.1
Capítulo:
Desempeño.
Descripción:
Utilizar el programa Sipp para generar tráfico llamadas.
Objetivo:
Aplicar las configuraciones vistas en clase en un ejemplo real y demostrar el funcionamiento de Sipp, simulando el
desempeño de nuestro Elastix en un ambiente de producción.
Instrucciones:
[sipp]
type=friend
context=sipp_context
host=dynamic
port=6000
user=sipp
canreinvite=no
disallow=all
allow=ulaw
[sipp_context]
exten => 4010,1,Answer()
exten => 4010,n,Playback(custom/bienvenidocurso)
exten => 4010,n,SetMusicOnHold(default)
exten => 4010,n,WaitMusicOnHold(20)
exten => 4010,n,Hangup()
• Recargar asterisk:
• Ejecutamos el siguiente comando en donde el último parámetro indica el número de llamadas a generar:
• Si ejecutamos el comando “top” veremos el incremento en uso del CPU, como sigue:
Seguridad
LABORATORIO CAPITULO 23
PaloSanto Solutions
2010
Laboratorio 23.1
Capítulo:
Seguridad
Descripción: En este laboratorio aprenderemos a cambiar las claves de las principales aplicaciones de Elastix.
Instrucciones:
1. Para cambiar la configuración de Elastix debemos ingresar a la interfaz web de Elastix como
administradores.
2. Luego vamos a: Sistema -> Administrar Usuarios
3. Seleccionamos el usuario admin
4. Se selecciona la opción editar y podemos cambiar la contraseña del usuario
Laboratorio 23.2
Capítulo:
Seguridad
Descripción: Asegurar Elastix utilizando el Firewall en el mismo servidor. Se asume para esta práctica que solo se
tiene 1 interfaz de red y que esta se llama eth0.
Objetivo: Aprender a cerrar todos los puertos menos los estrictamente necesarios para el funcionamiento de
nuestra Central
Instrucciones:
• Grabar la Configuración
iptables-save > /etc/sysconfig/iptables
Debugging
LABORATORIO CAPITULO 24
PaloSanto Solutions
2010
Laboratorio 24.1
Capítulo:
Debugging Avanzado
Descripción:
Utilizar el comando strace en un programa básico y ver la salida cuando se produce un error en la ejecución
Objetivo:
Familiarizarse con el comando strace y aplicarlo para hacer debugging.
Instrucciones:
• Utilizar el código fuente divide.c ubicado en /opt y compilarlo con la opción -g para debugging:
• Ejecutar el comando strace con la opción -o para enviar la salida al archivo salida.divideXXX.txt:
• Se ejecutará el programa y pedirá dos números para dividir. En el segundo número ingresar 0:
NOTA: SIGFPE es una señal enviada a un proceso ó programa cuando se realiza una operación errónea de punto
flotante.
Laboratorio 24.2
Capítulo:
Debugging Avanzado
Descripción:
Utilizar el comando gdb en un programa básico y ejecutar los comandos RUN, STEP, PRINT, BREAK, QUIT.
Objetivo:
Familiarizarse con el comando gdb y aplicarlo para hacer debugging.
Instrucciones:
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
gdb i386 6.5-37.el5_2.2 updates 3.1 M
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
• Utilizar el código fuente imprime.c ubicado en /opt y compilarlo con la opción -g para debugging:
• Ejecutar el comando gdb con la opción -q para el programa imprime, como sigue:
• En el prompt de gdb, crear los “breaks” para el programa imprime, como sigue:
(gdb) run
Starting program: /opt/imprime
• Vamos avanzando línea por línea con el comando step, como sigue:
(gdb) step
Breakpoint 6, main () at imprime.c:7
7 printf("Ingrese primer valor: ");
(gdb) step
8 scanf ("%d",&a);
(gdb) step
Ingrese primer valor:
• Ingresamos un valor y ejecutamos el comando “print a” , para imprimir el valor de la variable “a”:
(gdb) step
10 scanf ("%d",&b);
(gdb) step
Ingrese segundo valor: 8
12 c=a+b;
(gdb) print c
$2 = 0
(gdb) step
14 printf("\n\tLa suma de %d y %d es %d \n",a,b,c);
(gdb) print c
$3 = 15
(gdb) step
La suma de 7 y 8 es 15
15 }
(gdb)
(gdb) quit
The program is running. Exit anyway? (y or n) y
[root@elastix opt]#
Dundi
LABORATORIO CAPITULO 25
PaloSanto Solutions
2010
Laboratorio 25.1
Capítulo:
Dundi
Descripción:
Implementar Dundi entre dos centrales de tal forma que se tenga un plan de marcado único en donde en la central
A estén registradas las extensiones 1000, 1001, 1002 y en la central B estén registradas las extensiones 2000,
2001, 2002. Una vez realizado esto, registrar la extensión 1002 con la central B y la extensión 2002 con la central
A y verificar si es posible la comunicación entre ambas extensiones de manera dinámica.
Objetivo:
Aplicar las configuraciones vistas en clase en un ejemplo real y demostrar el funcionamiento de Dundi.
Instrucciones:
ELASTIX1:
IP: 192.168.1.251
MAC: 00:19:D1:82:2E:C8
ELASTIX2:
IP:192.168.1.83
MAC:00:0C:29:19:04:EF
• Ubicarse en la ruta /var/lib/asterisk/key y generar los certificados como sigue (donde X será un número que
identifique a cada servidor):
• Compartir los certificados, copiándolos en la carpeta /var/lib/asterisk/keys del otro servidor Elastix.
[general]
department=ELASTIXX
organization=Certificacion
locality=CiudadX
stateprov=ProvinciaX
country=PaisX
email=estudianteX@palosanto.com
phone=59342290244
bindaddr=0.0.0.0
port=4520
entityid=00:19:D1:82:2E:C8
ttl=12
autokill=yes
• En la sección mappings definimos las respuestas a las consultas para números locales:
[mappings]
priv => dundi-priv-canonical,0,IAX2,dundi:${SECRET}@192.168.1.251/$
{NUMBER},nopartial
priv => dundi-priv-customers,100,IAX2,dundi:${SECRET}@192.168.1.251/$
{NUMBER},nopartial
priv => dundi-priv-via-pstn,400,IAX2,dundi:${SECRET}@192.168.1.251/$
{NUMBER},nopartial
• Definimos los peers que podrán hacer consultas y que serán a su vez consultados, creando una sección
cuyo nombre es la dirección MAC del otro servidor Elastix, como sigue:
[00:0C:29:19:04:EF]
model= symmetric
host=192.168.1.83
inkey=SERVER01
outkey=SERVER02
include=priv
permit=priv
qualify=yes
order=primary
• Definimos la troncal IAX que recibirá las llamadas autenticadas de la red dundi. Para esto editamos el
archivo /etc/asterisk/iax_custom.conf y agregamos lo siguiente:
[dundi]
type=user
dbsecret=dundi/secret
context=ext-local
• Definimos los contextos para la búsqueda de extensiones locales y extensiones en otros equipos. Para esto
editamos el archivo /etc/asterisk/extensions_custom.conf y agregamos las siguientes líneas:
[dundi-priv-canonical]
include => ext-local
[dundi-priv-via-pstn]
include => outbound-allroutes
[dundi-priv-lookup]
exten => _X.,1,Macro(user-callerid)•
exten => _X.,2,Macro(dundi-priv,${EXTEN})•
exten => _X.,3,Goto(bad-number,${EXTEN},1)•
[macro-dundi-priv]
exten => s,1,Goto(${ARG1},1)•
switch => DUNDi/priv
[from-internal]
include => from-internal-xfer
;include => bad-number
include => dundi-priv-lookup
• Reiniciar asterisk
• Probar si está correctamente establecida la red dundi ejecutando los siguientes comandos:
• Probar marcando a las extensiones del compañero con el implementó la mini-red DUNDI.
Call-Center
LABORATORIO CAPITULO 26
PaloSanto Solutions
2010
Laboratorio 26.1
Capítulo:
Call-Center
Descripción:
Crear una campaña entrante con 3 agentes que tenga de duración 30 minutos, logonearse en una consola de
agente y recibir llamadas usando un script de saludos.
Objetivo:
Aprender y comprender el funcionamiento del call-center tanto como administrador así como agente. Además
familiarizarse con los reportes y consola de agente.
Instrucciones:
• NOTA: Ya debe existir una cola con los agentes que van a participar de esta campaña. A continuación se
muestra la pantalla de creación de la cola para nuestro Laboratorio
• Logonearse con el número de un Agente valido en una extensión previamente creada en nuestro PBX y
esperar recibir llamadas, simulando una llamada entrante.
Laboratorio 26.2
Capítulo:
Call-Center
Descripción:
Crear una campaña saliente con 3 agentes y cargar un archivo de números que contengan 10 números de destino
reales y crear un formulario con una encuesta de 4 preguntas.
Objetivo:
Aprender y comprender el funcionamiento del call-center tanto como administrador así como agente. Además
familiarizarse con los reportes y consola de agente.
Instrucciones:
• Vamos a utilizar las agentes antes creados, así como la cola de los agentes. Y debe existir una troncal
creada a por medio de la cual se realizaran las llamadas.
• Debemos tener un archivo en formato CSV, para realizar nuestras llamadas en nuestro caso usaremos el
siguiente formato
Extender Elastix
LABORATORIO CAPITULO 27
PaloSanto Solutions
2010
Laboratorio 27.1
Capítulo:
Extendiendo Elastix
Descripción: Se creará un pequeño módulo que permitirá cambiar el idioma de todos los servicios que usan la
tecnología SIP desde la interfaz web. Para esto desde la interfaz web llamaremos a un script del shell que
modificará el archivo de de configuración de sonidos sip.
Objetivo: Familiarizarse con el módulo Developer de Elastix para aprender a desarrollar nuevos módulos y
extender Elastix
Instrucciones:
#!/bin/bash
#idioma en $1
archivo=/etc/asterisk/sip_general_custom.conf
path=/etc/asterisk
#busco si existe
grep -e "language[[:space:]]*=[[:space:]]*" -i $archivo
exists=$?
#cambio o añado
if [ $exists = 0 ]; then #existe
sed -ie "s/language[[:space:]]*=[[:space:]]*/language=$1/" $archivo
else
echo "language=$1" >> $archivo
fi
• Podemos probar si el script funciona desde la línea de comandos. Por ejemplo cambiando el idioma a
español
• Ahora utilizamos este script para escribir el /etc/asterisk/archivo sip_general_custom.conf con el valor
language=es.
• cambiar_idioma es /etc/asterisk/archivo sip_general_custom.conf
• Para ver si el script funciona podemos revisar el contenido del archivo /etc/asterisk/sip_general_custom.conf
y verificar si dice “language=es”. También podríamos ver si funcionó utilizando una extensión SIP y llamar al
buzón de voz por ejemplo. Deberíamos escuchar el audio en español. Pruebe cambiando el idioma a varios
idiomas.
• Una vez creado el script se debe darle privilegios de sudo para que pueda ser ejecutado por el usuario
asterisk que es con el que trabaja la interfaz web de Elastix
• El comando sudo se utiliza para que un usuario del sistema pueda ejecutar aplicaciones con privilegio de
administrador
• Editamos la configuración de sudo
visudo
• Añadimos la siguiente línea, guardamos y salimos asterisk ALL = NOPASSWD:
/usr/local/sbin/cambia_idioma
• Creamos el módulo utilizando el módulo developer e ingresar a la interfaz en la sección módulo
• En la sección “General Information” Ingresamos la siguiente información
• En la sección “Location” debemos definir en qué lugar de la interfaz donde aparecerá el menú de nuestro
módulo.
• En esta sección definimos el tipo de módulo. Este podría ser grid para crear reportes o form para crear
formularios. En nuestro caso crearemos un formulario simple que solo aceptará un parámetro en una caja
de texto llamada idioma.
Compilando Asterisk
LABORATORIO CAPITULO 29
PaloSanto Solutions
2010
Laboratorio 29.1
Capítulo:
Compilando de Asterisk
Descripción:
Compilar Asterisk sobre una máquina con Centos 5 usando el paquete asterisk-1.4.23-1.tar.gz.
Objetivo:
Practicar el proceso de compilación de asterisk e identificar las dependencias.
Tiempo Máximo: 30 minutos
Instrucciones:
[elastix]
name=Elastix RPM Repository for CentOS
baseurl=http://repo.elastix.org/centos/$releasever/updates/RPMS/
gpgcheck=0
enabled=1
exclude=elastix-mysqldbdata
[elastix-beta]
name=Elastix-Beta RPM Repository for CentOS
baseurl=http://repo.elastix.org/centos/$releasever/updates/beta/RPMS/
gpgcheck=0
enabled=0
exclude=elastix-mysqldbdata
[elastix-extras]
name=Elastix-Extras RPM Repository for CentOS
baseurl=http://repo.elastix.org/centos/$releasever/updates/extras/RPMS/
gpgcheck=0
enabled=0
exclude=elastix-mysqldbdata
• Descromprimir el paquete:
.$$$$$$$$$$$$$$$=..
.$7$7.. .7$$7:.
.$$:. ,$7.7
.$7. 7$$$$ .$$77
..$$. $$$$$ .$$$7
..7$ .?. $$$$$ .?. 7$$$.
$.$. .$$$7. $$$$7 .7$$$. .$$$.
.777. .$$$$$$77$$$77$$$$$7. $$$,
$$$~ .7$$$$$$$$$$$$$7. .$$$.
.$$7 .7$$$$$$$7: ?$$$.
$$$ ?7$$$$$$$$$$I .$$$7
$$$ .7$$$$$$$$$$$$$$$$ :$$$.
$$$ $$$$$$7$$$$$$$$$$$$ .$$$.
$$$ $$$ 7$$$7 .$$$ .$$$.
$$$$ $$$$7 .$$$.
7$$$7 7$$$$ 7$$$
$$$$$ $$$
$$$$7. $$ (TM)
$$$$$$$. .7$$$$$$ $$
$$$$$$$$$$$$7$$$$$$$$$.$$$$$$
$$$$$$$$$$$$$$$$.