Asteisk para principiantes



Antes de empezar, miraremos unas cuantas cosas para ver si el sistema va bien. Primero, Ver si los drivers de DAHDI (tarjeta de los básicos) estan cargados. Después logarnos como usuario root, con  lsmod | grep dahdi podemos ver los modulos cargados en el Kernel, y filtramos los modulos que tiene dahdi.
[root@server asterisk-1.6.X.Y]# lsmod | grep dahdi
Si no aparece nada, entonces DAHDI No está arrancado:
[root@server asterisk-1.6.X.Y]# service dahdi start
Sino aparece esto:
[root@server ~]# lsmod | grep dahdi
dahdi_dummy          4288   0
dahdi_transcode      7928   1 wctc4xxp
dahdi_voicebus       40464  2 wctdm24xxp,wcte12xp
dahdi                196544 12 dahdi_dummy,wctdm24xxp,wcte11xp,wct1xxp,wcte12xp,wct4xxp
crc_ccitt            2096   1 dahdi
Para certificar que Asterisk está corriendo:
[root@server ~]# service asterisk status
asterisk is stopped
Para arrancar Asterisk:
[root@server ~]# service asterisk start
Starting asterisk
Nosotros podemos chequear el estado de Asterisk y ver que está corriendo usando:
[root@server ~]# service asterisk status
Asterisk PBX is running
Ya tienes el sistema Asterisk corriendo!

CREAR EXTENSIÓN
En el archivo sip.conf (/etc/asterisk)

En sip.conf se definen tanto los clientes que se conectarán a Asterisk, como los proveedores que se utilizaran para encaminar llamadas. Se distinguen normalmente:
user: Envia llamadas a Asterisk
peer: Recibe llamadas de Asterisk (proveedor).
friend: Recibe y Envía llamadas (usuario)

[demo-alex]
type=friend
host=dynamic
secret=verysecretpassword ; Poner una fuerte y unica contraseña. 
context=users
deny=0.0.0.0/0
permit=192.168.5.0/255.255.255.0 ; Remplaza con tu red.

[demo-juan]
type=friend
host=dynamic
secret=othersecretpassword ; Poner una fuerte y unica contraseña.
context=users
deny=0.0.0.0/0
permit=192.168.5.0/255.255.255.0 Remplaza con tu red.
Después hay que reiniciar, Mediante el comando core reload en el CLI de Asterisk, le indicamos que recargue la configuración. Aunque es posible recargar de forma independiente:

server*CLI> sip reload
Reloading SIP
server*CLI>

En este fichero se definen: Variables generales de SIP, Clientes SIP, Servidores SIP.
SIP.CONF: Sección General
En primer lugar existe la sección [general], donde se definen variables globales y aspectos por defecto para todos los canales SIP.
Las variables generales más importantes son:
allow y disallow: indican los codecs permitidos / no permitidos.
dtmfmode: permite especificar el método por el cual se enviaran los tonos (digitos pulsados durante la conversación), valores posibles.
nat: Informa a Asterisk del tipo de NAT en el que se encuentra.
externip: Dirección Pública tras el NAT.
context: Contexto por defecto donde entraran las llamadas entrantes por SIP.
port: Puerto en el que escuchar (5060)
Las variables más importantes que deben ser configuradas al principio son:
type: peer / friend
context: Contexto donde entraran las llamadas generadas.
nat: Indica si el usuario o peer se encuentran tras un nat.
host: IP remota o dynamic.
username: nombre de usuario.
secret: contraseña de acceso.
allow y disallow: Configuraciones de codecs específicas para cada friend/peer.
qualify: Evalúa el estado del extremo SIP para conocer su accesibilidad y latencia.
Otro ejemplo de clientes:
[loren]
type = friend
secret = loren
disallow=all
allow = g729
allow = gsm
host=dynamic

[julia]
type = friend
secret = julia
allow = all
host=dynamic

Ejemplo, declarando peers, vamos a configurar un proveedor en sip.conf:

[proveedor]
type=peer
host = 10.11.114.200
disallow = all
allow = g729
allow = gsm
fromuser= 100
secret=ghost



REGISTRO DE TELEFONOS ASTERISK

Una vez recargada, podemos comprobar los “friends” que hemos definido con el comando: sip show users.Ves los conectados y desconectados.
Para ver los “peers” definidos: sip show peers. Para ver quien está registrado y nos mustra su IP :
server*CLI> sip show peers
Name/username              Host            Dyn NAT ACL Port     Status
demo-alex                 (Unspecified)    D       A  5060     Unmonitored
demo-juan                   192.168.5.105    D       A  5060     Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]

Reinicio telefono fisicamente, error de registro:

server*CLI>
NOTICE[22214]: chan_sip.c:20824 handle_request_register: Registration from '"Alex" 
<sip:demo-alice@192.168.5.50>' failed for '192.168.5.103' - Wrong password

CREAR EL DIALPLAN DE LAS EXTENSIONES.
Se crea en extensions.conf. Añadireos un nuevo contexto llamado [users].
Nombrando los contextos de tu Dialplan
Debajo del nombre del contexto nostros crearemos el número de la extensión 6001, 6002

[users]
exten=>6001,1,Dial(SIP/demo-alice,20);Sonará 20 seg.
exten=>6002,1,Dial(SIP/demo-bob,20) ;Sonará 20 seg.

Luego reiniciamos extensions.conf y verificamos escribiendo dialplan show users:

server*CLI> dialplan show users
[ Context 'users' created by 'pbx_config' ]
  '6001' =>         1. Dial(SIP/demo-alex,20)                    [pbx_config]
  '6002' =>         1. Dial(SIP/demo-juan,20)                      [pbx_config]
-= 2 extensions (2 priorities) in 1 context. =-  

Ahora podemos llamar!!!
 
Resolución de Problemas Basicos de la PBX.
Para garantizar que su telefonos SIP estan registrados, escribe sip show peers en el Asterisk CLI.
Para ver que contexto de tu telefono SIP llamará, escribe sip show users.
Para garantizar que tú has creado la extensión correctamente en el contexto [users] en el dialplan, escribe dialplan show users.
Para ver que extensión será ejecutada cuando marques 6002, escribe dialplan show 6002@users.
 
CONTEXTOS(Context), EXTENSIONES (Extensions) Y PRIORIDADES (Priotity)
La sintaxis de un contexto es exactamente igual que en cualquier otra sección que encabeza los archivos de configuración. Los Contextos (Context): El Dialplan o lógica de comportamiento de Asterisk se divide en uno o varios contextos. Dentro de cada contexto, podemos definir una o más extensiones. Los contextos existen para poder diferenciar el 'lugar' donde se encuentra una llamada. Una extensión no es más que un conjunto con nombre de las acciones. Asterisk realizará cada acción en secuencia.
[users]
exten => number,priority,application([parameter[,parameter2...]])


[users]
exten => 6001,1,Dial(SIP/demo-alex,20)
En este caso, el número de extensión (extension) es 6001, la prioridad del número es 1, la aplicación es Dial (), los dos parámetros para la aplicación son SIP/demo-alex,20. Dentro de cada extensión, puede haber una o más prioridades. Una de las prioridades es simplemente una secuencia de números. La primera prioridad en una extensión es ejecutada en primer lugar. Cuando termina, la segunda prioridad se ejecuta, y así sucesivamente. En telefonía tradicional, las extensiones se asocian con teléfonos, interfaces o menús. En Asterisk, una extensión es una lista de comandos a ejecutar. Las extensiones se acceden cuando:
– Se recibe una llamada entrante por un canal dado.
– El usuario que ha llamado marca la extensión.
– Se ejecuta un salto de extensiones desde el Dialplan de Asterisk.
 
Numeros de Prioridad
Los numeros de Prioridad deben empezar con el 1, y deben crecer secuencialmente. Si Asterisk no puede encontrar el siguiente número, este terminará la llamada.
 
El número de Prioridad puede simplificarse usando la letra n en lugar del número secuencial. La letra n significa siguiente (next), se debe declarar el número 1 de Prioridad.
exten => 6123,1,do something
exten => 6123,n,do something else
exten => 6123,n,do something different
También se puede asignar una etiqueta (o alias) a un número de prioridad en particular, como se muestra a continuación. Las etiquetas se utilizan para que sea más fácil de saltar a un lugar en particular dentro de la extensión en un momento posterior. Aquí, hemos asignado una etiqueta llamada repeat a la segunda Prioridad.
exten => 6123,1,do something
exten => 6123,n(repeat),do something else
exten => 6123,n,do something different
Hay una manera de evitar tener que repetir el nombre de la extensión / número o patrón con el mismo prefijo =>. (A partir de Asteris 1.6.2)
exten => _1NXXNXXXXXX,1,do something
same => n(repeat),do something else
same => n,do something different

APLICACIONES (Application)
Cada prioridad en el Dialpaln llama una aplicación. La mayoría de las aplicaciones tinen uno o más parámetros, los cuales proporcionan información adicional a la aplicación o cambiar su comportamiento. Los parámetros deben estar separados por comas y para conocer la lista de aplicaciones disponibles escribimos:
server*CLI> core show applications

Esta es la sintaxis que se usa:

exten => 6123,1,application(one,two,three)

 

APLICACIONES DEL DIALPLAN
Las Aplicaciones Generales más importantes son:
Wait (n): Espera n segundos, ignorando los dígitos marcados durante.
WaitExten (n): Espera n segundos, pero gestionando los dígitos marcados.
WaitMusicOnHold(n): Reproduce música en espera durante n segundos.

Los comandos de gestión de llamadas más importantes son:
Answer(): Acepta la llamada entrante por el canal.
Busy(): Envía la señal de ocupado al origen.
Hangup(): Cuelga la llamada.
Ringing(): Envía la señal de tono de llamada.
Dial(tipo/identificador,timeout,opciones,url): Aplicación para llamar (ver más adelante).
Algunos comandos de control de flujo y temporización:
– Goto (contexto, extension, prioridad): Salta al contexto, extensión y prioridad del argumento.
– GotoIf (condicion ? prioridad1 : prioridad2 ): Salta a la prioridad1 si la condición se cumple. Salta a la prioridad2 si la condición no se cumple.
- GotoIfTime(<times>|<weekdays>|<mdays><months>?[[context|]exten|]priority)
Algunas aplicaciones para la reproducción:
– PlayBack (fichero): Reproduce el fichero, continúa la ejecución cuando finaliza.
– Background (fichero): Reproduce el fichero, pero continúa la ejecución inmediatamente.
– SayDigits (dígitos): Reproduce los dígitos.

If Asterisk is simply going to pass the call off to another device using the Dial() application, you probably don't want to call the answer the call first. If, on the other hand, you want Asterisk to play sound prompts or gather input from the caller, it's probably a good idea to call the Answer() application before doing anything else.
The Playback() application loads a sound prompt from disk and plays it to the caller, ignoring any touch tone input from the caller. The first parameter to the dialplan application is the filename of the sound prompt you wish to play, without a file extension. If the channel has not already been answered,Playback() will answer the call before playing back the sound prompt, unless you pass noanswer as the second parameter.
To avoid the first few milliseconds of a prompt from being cut off you can play a second of silence. For example, if the prompt you wanted to play was hello-world which would look like this in the dialplan:


Comentarios