Asterisk ======== Acá hay algunas notas sobre Asterisk pero no mucho más. Para iniciar/parar el servidor:: service asterisk status service asterisk start service asterisk stop service asterisk restart service asterisk reload Tipos de usuario ---------------- - user: Solo llamadas salientes - peer: Solo llamadas entrantes - friend: Entradas salientes y entrantes Otras opciones para el usuario ------------------------------ - ``canreinvite``: Permite que las conexiones RTP de audio ocurran punto a punto entre los usuarios, si se desactiva pasan por el servidor, si se activa generalmente va por el servidor pero generalmente va punto a punto. - ``qualify``: Algo del retardo, no se. - ``nat``: Indica si el usuario esta atrás de un NAT. Configuración ------------- Tiene un montón de archivos de configuración en ``/etc/asterisk``. Los que más importan me parece que son: - ``/etc/asterisk/asterisk.conf``: Es el archivo principal pero no tiene nada interesante. - ``/etc/asterisk/extensions.conf``: Establece cómo serán manejadas y ruteadas las llamadas entrantes y salientes. - ``/etc/asterisk/sip.conf``: Configuración para los canales SIP. extensions.conf ~~~~~~~~~~~~~~~ Este archivo establece cómo serán manejadas y ruteadas las llamadas entrantes y salientes. Es muy largo, tiene varias secciones: - ``[general]``: Define algunas opciones generales. - ``[globals]``: Acá se pueden definiar variables globales que se podrán usar en otros contextos. - Las demás secciones son contextos, llevan el nombre entre corchetes. Acá pongo varias definiciones teóricas: - Dialplan: Es el conjunto de contextos. - Contexto: Permite separar funcionalidades, cada contexto tiene extensiones. - Extensión: Es un conjunto de aplicaciones que se ejecutarán cuando el número de esa extensión es marcado. - Aplicación: Es una acción. Los usuarios se colocan en contextos (puede que en más de un contexto al mismo tiempo), y los contextos pueden incluir a otros contextos. La sintaxis de la extensión es simple pero se complejiza cuando se empiezan a usar variables y ese tipo de cosas. Sintaxis general:: exten => number,priority,application([parameter[,parameter2...]]) El ``number`` indica el número a marcar para que se ejecute esta extensión, ``priority`` indica el orden a usar al ejecutar varias extensiones con el mismo número. Ejemplo que llama al número 1234 cuando se marca 5000:: exten => 5000,1,Dial(SIP/1234,20) exten => 5000,2,Hangup() Una configuración normal sería la que pongo ahora:: [general] ; por razones de seguridad static = yes writeprotect = yes [default] ; poner un echotest al llamar al numero 999 exten => 999,1,Answer() exten => 999,n,Playback(demo-echotest) exten => 999,n,Echo() exten => 999,n,Playback(demo-echodone) exten => 999,n,Hangup() [internos] ; incluir al contexto default y permitir llamar a numeros que sean 1XX. ; 30s de timeout. "Tt" permite transferir llamadas y el "m" pone musica. include => default exten => _1XX,1,Dial(SIP/${EXTEN},30,Ttm) exten => _1XX,n,Hangup() Si la extensión empieza con ``_`` el número será interpretado como un patrón donde por ejemplo ``X`` vale por cualquier dígito entre 0 y 9. En vez de numerar las prioridades se puede poner prioridad ``1`` al primero y después poner los siguientes en ``n``. ``${EXTEN}`` es una variable que se reemplaza por el ``number`` de la extensión, es útil para cuando este número consiste de un patrón. sip.conf ~~~~~~~~ Este archivo configura los canales SIP. Lo que nos interesa es registrar acá a todos los usuarios. La sección ``[general]`` se aplica a todos los usuarios, luego se pueden hacer templates para usuarios similares:: [general] context=default ; bindport=5060 ; bindaddr=0.0.0.0 udpbindaddr=0.0.0.0:5060 ; Escuchar en todas las IP, puerto 5060 tcpbindaddr=0.0.0.0:5060 ; Escuchar en todas las IP, puerto 5060 tcpenable=no transport=udp ; Transporte por defecto srvlookup=yes ; registertimeout=20 ; Si el registro demora más de 20ms se da de baja al usuario o algo así [estandar](!) type=friend context=internos disallow=all ; Deshabilitar todos los codecs allow=ulaw ; Habilitar codec allow=gsm host=dynamic ; IP dinamica canreinvite=no ; Impide a los usuarios hacer conexiones RTP punto a punto sin ; pasar por el servidor, si se pone en "no" va a pasar todo por ; el servidor qualify=300 ; Cortar si la latencia es mayor a 300ms nat=no ; No dar tratamiento especial para nat, puede que funcione igual [101](estandar) callerid=Martin <101> ; No tiene ningun formato en especial, se le pone el numero porque queda lindo secret=password101 [102](estandar) callerid=Juan <102> secret=password102 [103](estandar) callerid=Francisco <103> secret=password103 Si ``type`` es ``friend`` el usuario puede enviar y recibir llamadas, también es posible utilizar ``user`` para permitir sólo llamadas entrantes o ``peer`` para sólo llamadas salientes.