Académique Documents
Professionnel Documents
Culture Documents
Apartir de esto podemos decir que en corazón de asterisk (*) es el dialpan que
se define en el archivo extension.conf.
[channels]
transfer=yes
cancallforward=yes
signalling=fxs_ks
context=from-pstn
rxgain=2.0
txgain=4.0
callprogress=yes
usecallerid=yes
callerid=asreceived
group=0
channel=> 1
Esta es una famosa X100 placa que es un WinModem con un chipset Ambient
de Intel. Lo mas importante es que la definí en el contexto from-pstn.
Luego en el sip.conf tenemos lo siguiente:
[general]
context=from-local
bindport=5060
bindaddr=0.0.0.0
[100]
type=friend
host=dynamic
username=100
secret=XXXXXXX
[101]
type=friend
host=dynamic
username=101
secret=XXXXXXX
[from-local]
exten => 100,1,Dial(SIP/100)
exten => 101,1,Dial(SIP/101)
exten => _9.,1,Dial(Zap/1/${EXTEN:1})
[from-pstn]
exten => s,1,Answer
exten => s,2,Playback(welcome)
exten => s,3,Dial(SIP/101,15,t)
exten => s,4,Dial(SIP/102,15,t)
exten => s,5,Playback(nobody)
exten => s,6,Voicemail(101)
exten => s,7,Hangup
Los Patrones nos aquellos que match con el numero discado, comienzan con _
y pueden contener:
X números del 0 al 9
Z números del 1 al 9
N números del 2 al 9
[24-7] números específicos en este caso 2,4,5,6,7
. uno o mas números
! cero o mas números
o si se disca:
_4XXXXXX Un numero común loca acá en Córdoba
Hay que tratar de no usar cosas como _. porque esto machearia con cualquier
cosa, es mejor _X.
También podemos usar cosas un poco mas complejos como discar algo solo si
el caller id machea con algún patrón:
123/4892233 Entra al contexto discando 123 desde el teléfono 4892233
i extensión invalida.
Un contexto tiene un limitado números que un usuario puede marcar y si
marco otro podemos tomar ese error y hacer algo, por ejemplo
[from-local]
exten => 100,1,Dial(SIP/100)
exten => 101,1,Dial(SIP/101)
exten => _9.,1,Dial(Zap/1/${EXTEN:1})
exten => i,1,Playback(discadoinvalido)
exten => i,2,Hungup
h corte de la extensión
Es cuando un cliente corta la comunicación y generalmente se usa para cobrar
o loguear llamadas.
a asterisco
Es para determinar que se presiono el asterisco
[from-local]
exten => 100,1,Dial(SIP/100)
exten => 101,1,Dial(SIP/101)
exten => _9.,1,Dial(Zap/1/${EXTEN:1})
exten => t,1,Playback(muchotiempotecorto)
exten => t,2,Hungup
exten => i,1,Playback(discadoinvalido)
exten => i,2,Hungup
Hay otros como fax, que es obvio y solo se usa con drivers ZAP. Los demás son
de poco uso o nos vamos a poner a discutir un monton.
[demo]
exten => _450.,1,Dial(SIP/100)
exten => _X.,1,Dial(SIP/102)
exten => h,1,Hungup
[demo]
include => demo-uno
exten => _450.,1,Dial(SIP/100)
exten => h,1,Hungup
[demo-uno]
exten => _X.,1,Dial(SIP/102)
Si dentro de un contexto encontramos un include sera parceado al final del
contexto y en el orden de los include, para nuestro ejemplo queda:
1 _450
2h
3 _X.
Que era lo que nosotros queríamos
[from-pstn]
exten => s,1,Answer
exten => s,2,Playback(welcome)
exten => s,3,Dial(SIP/101,15,t)
exten => s,4,Dial(SIP/102,15,t)
exten => s,5,Playback(nobody)
exten => s,6,Voicemail(101)
exten => s,7,Hangup
Las prioridades son el orden que debe tener para cada extensión. Cual es la
otra función además de darle un orden estos números de prioridad, para ser
usados con funciones como GotoIf.
[from-pstn]
exten => s,n,Answer
exten => s,n,Playback(welcome)
exten => s,n,Dial(SIP/101,15,t)
exten => s,n,Dial(SIP/102,15,t)
exten => s,n,Playback(nobody)
exten => s,n,Voicemail(101)
exten => s,n,Hangup
En la cual se entiende que el orden de esta extensión esta dado por el orden
que la hemos escrito. Pero entonces perdimos el tema de los GotoIf, no se
pueden escribis cosas feas como:
Hay un par de cosas mas acerca de la prioridad pero voy muy atrasado.
Hay 2 cosas que que nos faltan que son los comandos y la variables, los
comandos son mas simples y uno de los mas importante es Dial.
Dial(tipo/identificador,timeout,opciones,URL)
tipo puede ser cualquiera de los canales definidos (Zap, SIP, IAX2, h323, oh323,
ooh323)
opciones tiene una gran cantidad, como por ejemplo t en la cual permite a esta
llamada poder hacer transferencia de llamadas, pueden llegar a tener cosas
como cambiar de tipo de ring, determinar como va ser la llamada, entre otras.
Answer(delay)
Playback(file,option)
Backgroud(file,option)
Goto(contex,extension,priority)
Goto(extension,priority)
Goto(priority)
Goto(contex,extension,label)
Goto(extension,label)
Goto(label)
SayDigits(numeros)
Muy util, solo dice los numeros, si dentro de numeros esta 123, el comando
dice uno, dos, tres.
SayNumber(numeros,genero)
Hace lo mismo pero dice el numero por ejemplo 123 dice ciento veintitres y en
genero va “m” por male, “f” por female o “c” por computer. Pero se torna
indomito para el manejo multilenguaje.
[from-pstn]
exten => s,n,Answer
exten => s,n,Playback(bienvenidos)
exten => s(menu0),n,Background(opcionesmenu0)
exten => 1,n,goto(menu1)
exten => 2,n,goto(menu2)
exten => a,n,Playback(graciasporcomunicarse)
exten => a,n,hungup
exten => i,n,Playback(ingresoinvalido)
exten => i,n,goto(menu0)
exten => t,n,Playback(marqueunaopcion)
exten => t,n,goto(menu0)
[menu1]
exten => s,n,Playback(ingresedni)
exten => t,n,Playback(porfavor)
exten => t,n,goto(menu1)
exten => XXXXXXX.,n,SayDigits(${EXTEND})
exten => XXXXXXX.,n,Goto(from-pstn,a)
exten => i,n,Goto(from-pstn,i)
Falta obviamente el contexto menu2 pero puede ser algo muy parecido.
NoOp()
Que como su nombre lo indica no hace nada pero sirve como printf para debug
basico.
Macro(nombremacro,arg1,arg2,...,argN)
[macro-internacional]
exten => s,n,Dial(Sip/${ARG1}@11.12.12.12,20)
exten => s,n,Dial(oh323/${ARG1}@123.1.1.15,20)
exten => s,n,Playback(nohaylinea)
exten => s,n,Congestion
Toda la info sobre los comandos los podemos encontrar en:
http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands
AGI (script.agi|arg1|arg2|....|argN)
y se ejecuta:
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();
$AGI->set_callerid($number)
$AGI->exec('Dial', 'SIP/' . $number . '@' . $someip);
$AGI->exec('Hungup');