viernes, 30 de septiembre de 2011

Instalación codecs G729

En este documento detallaremos los pasos necesarios para instalar el codec G729. Este  codecs debe ser usado para pruebas o uso educacional (http://www.voip-info.org/wiki/view/Asterisk+G.729+Licensing).

Para realizar esto seguiremos los siguientes pasos:

Primero que todo ud. necesitamos saber qué tipo de CPU tenemos:

root@Ratchet:~# cat /proc/cpuinfo


processor       : 0vendor_id       : GenuineIntel

cpu family      : 6

model           : 26

model name      : Intel(R) Xeon(R) CPU    E5530  @ 2.40GHz

stepping        : 5

cpu MHz         : 2400.150

cache size      : 8192 KB

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 11

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf pni ssse3 cx16 sse4_1 sse4_2 popcnt hypervisor lahf_lm ida

bogomips        : 4800.30

clflush size    : 64

cache_alignment : 64

address sizes   : 40 bits physical, 48 bits virtual

power management:

luego nos fijamos que tipo de arquitectura es nuestro servidor.

root@Ratchet:~# uname -a

Linux Ratchet 2.6.32-5-686 #1 SMP Tue Mar 8 21:36:00 UTC 2011 i686 GNU/Linux

Pasamos a bajar el codec para nuestro servidor.

root@Ratchet:~# wget http://asterisk.hosting.lv/bin162/codec_g729-ast16-gcc4-glibc-pentium4.so



Pasamos a bajar el codec para nuestro servidor según nuestra arquitectura.

root@Ratchet:~# mv /usr/src/codec_g729-ast16-gcc4-glibc-pentium4.so /usr/src/codec_g729.so

root@Ratchet:~# chmod 777 codec_g72*.so

Copiamos el codecs al directorio de asterisk donde se encuentran los moulos.

root@Ratchet:~# cp codec_g72*.so /usr/lib/asterisk/modules



Reiniciamos el servidory entramos a la consola de asterisk.

root@Ratchet:~# reboot

root@Ratchet:~# rasterisk –vvv

Ratchet*CLI> core show translation //en versiones anteriores a la 1.6 el commando es “show translation”

Translation times between formats (in microseconds) for one second of data

Source Format (Rows) Destination Format (Columns)


Esta tabla indica los tiempos de conversión que emplea Asterisk para transcodificar el audio usando los diferentes códec.
Esto se indica a través de la tabla de doble entrada expresada  en (microsegundos).
Si en esta tabla observamos que no existen las filas y columnas para g729 esto significa que la central no tiene capacidad de conversión y por lo tanto el codec no está correctamente instalado.

TIPS: Si Asterisk se cuelga cuando reinicia, significa que instalamos la versión incorrecta del codec. Quitamos los codecs de /usr/lib/asterisk/modules y repetimos los procedimientos con diferentes y más apropiadas versiones de los codecs.

Fuente : http://forovoip.unvm.edu.ar

lunes, 26 de septiembre de 2011

Capturar llamadas (CallGroup/PickupGroup).

En el escenario que se describe a continuación,  vamos a configurar 4 internos de los cuales el interno 1002, 1003 y 1004 pueden tomar las llamadas de los mismos oprimiendo las teclas  *8 del teléfono IP, mientras que el interno 1001 no va a poder tomar dichas llamadas. Para esto deberemos colocar las líneas de pickupgroup y callgroup a los internos involucrados.

Archivo involucrado= /etc/asterisk/sip.conf

Para realizar esta tarea seguiremos los siguientes pasos:

editamos el archivo /etc/asterisk/sip.conf.

agregamos las líneas de pickupgroup y callgroup a los internos que queremos involucrar






 [1001]
type=friend
host=dynamic
context=phones
secret=9876
disallow=all
allow=ulaw
allow=alaw
mailbox=1001@default

[1002]
type=friend
host=dynamic
context=phones
secret=9876
disallow=all
allow=ulaw
allow=alaw
mailbox=1002@default
pickupgroup=1; grupos de los que puede tomar la llamada, en este caso del grupo 1
callgroup=1; grupo al que pertenece la extensión 1002

[1003]
type=friend
host=dynamic
context=phones
secret=9876
disallow=all
allow=ulaw
allow=alaw
mailbox=1003@default
pickupgroup=1
callgroup=1

[1004]
type=friend
host=dynamic
context=phones
secret=9876
disallow=all
allow=ulaw
allow=alaw
mailbox=1004@default
pickupgroup=1
callgroup=1

TIPS= Con CALLGROUP se define a que grupo pertenece la extensión, y con PICKUPGROUP de que grupos la extensión puede capturar las llamadas.



Cómo funciona la función CallGroup-PickupGroup .
 En el ejemplo vemos como una extensión externa llama a la oficina al interno 1001 donde el usuario no se encuentra. Gracias a las funciones de pickupgroup y callgroup; que se configuraron; vemos como el interno1003 puede tomar la llamada.

Desvío de Llamada

En este caso vamos a ver como se utiliza dicha función con tres internos. El desvío de llamada o call forwarding nos permite definir un desvío de llamada que se realiza a un interno a otro interno.

En el archivo/etc/asterisk/extensions.conf agregamos las siguientes líneas






 [phones]include => internal[internal]exten => _2XXX,1,Answer() ; contestamos la llamada

exten => _2XXX,n,Set(NUM=${DB(${EXTEN}/FORW)}) ; Leemos la base de datos para ver si hay algun valor en la familia 2XXX/FORW y lo asignamos al variable NUM

exten => _2XXX,n,GotoIf($["${NUM}" = ""]?normal:forw) ; si la variable NUM es vacía seguimos normalmente sino vamos a la etiqueta forw

exten => _2XXX,n(normal),Dial(SIP/${EXTEN},30,tTwmkKxX) ; llamamos a la extensión 2xxx

exten => _2XXX,n,Hangup() ; terminamos la llamada

exten => _2XXX,n(forw),DIAL(SIP/${NUM},60,tTwmgkKxX)  ; si el desvío es activo, marcamos el numero configurado para el desvío

exten => _2XXX,n,Dial(SIP/${EXTEN},10); sino existe desvío la llamada entra por esta línea

exten => _2XXX,n,VoiceMail(${EXTEN}@default,u)

exten => _2XXX,n,Playback(vm_goodbye)

exten => _2XXX,n,Hangup()

;;;;;con *98 entro a mi casilla de mensajes

exten => *98,1,Answer

exten => *98,2,Wait(1)

exten => *98,3,VoiceMailMain(${CALLERID}@default)

exten => *98,4,Hangup

;;;;;;;;con *71 desvío la llamada y con *72 cancelo

exten => *71,1,Goto(callfwd-add,s,1)

exten => *72,1,Goto(callfwd-remove,s,1)    

[callfwd-add] ; contexto para programar el desvió de llamada
exten => s,1,Answer() ; contestamos la llamada
exten => s,n,Set(NUM=${CALLERID(num)}) ; asignamos a la variable NUM el numero de la extensión que está llamando
exten => s,n,Set(COUNT=1) ; asignamos el valor 1 a la variable COUNT
exten => s,n(inicio),Playback(please-enter-the&telephone-number&for&your&call-forwarding&astcc-followed-by-the-pound-key) ; La voz de asterisk nos dirá que tenemos que digitar el numero al cual queremos desviar todas las llamadas
exten => s,n,Read(forw,,15,,2,10) ; Asterisk leerá los dígitos y los guardará en la variable forw
exten => s,n,Playback(call-forwarding) ; La voz de AsterisK dirá que el desvío de la llamada ha sido configurado para el numero
exten => s,n,Playback(has-been-set-to)
exten => s,n,SayDigits(${forw}) ; Saydigits lee uno a uno los digitos de la variable forw
exten => s,n,Playback(if-this-is-correct-press&digits/1&if-this-is-not-correct&digits/2) ; Si el numero que escuchamos es exacto presionamos 1 sino 2
exten => s,n,Read(sino,,1,,,5) ; asterisk lee nuestra respuesta y la guarda en la variable sino
exten => s,n,GotoIf($["${sino}" = "1"]?setf:conta) ; si sino es igual a uno vamos a la etiqueta setf sino a conta
exten => s,n(conta),Set(COUNT=$[${COUNT} + 1]) ; añadimos a la variable COUNT (que era 1) una unidad (el nuevo valor es 2)
exten => s,n,Gotoif($["${COUNT}" < "4"]?inicio:bye) ; si la variable COUNT es menor que 4 vamos a etiqueta inicio sino a la etiqueta bye. Esto sirve para permitir tres intentos de configuración antes de colgar la llamada.
exten => s,n(setf),Set(DB(${NUM}/FORW)=${forw}) ; etiqueta setf, guardamos en numero en la base de datos interna de Asterisk
exten => s,n,Wait(1) ; esperamos un segundo
exten => s,n(bye),Playback(goodbye) ; Escucharemos un saludo de despedida
exten => s,n,Hangup ; la llamada será terminada

[callfwd-remove]
exten => s,1,Answer
exten => s,n,Set(NUM=${CALLERID(num)})
exten => s,n,Wait(1)
exten => s,n,Set(forw=${DB_DELETE(${NUM}/FORW)})
exten => s,n,Playback(call-fwd-cancelled)
exten => s,n,Playback(goodbye)
exten => s,n,Hangup     

 
 
 
 
Cómo funciona el desvío de llamada.
 En este ejemplo mostramos como una llamada desde un interno cualquiera (2XXX) llama a la extensión 2002 donde el usuario realizo previamente  un desvío de llamada al interno 2003 digitando las siguientes teclas *71 2003#1 (con *71 activamos el desvío de llamada y con *72 lo desactivamos).  Como el interno 2002 no es atendido se deriva automáticamente a la extensión 2003 que es la oficina donde el usuario esta momentáneamente.