Skip to main content.

15 Abril 2008

Jugando con la extensión ‘h’

Aparte de las extensiones que podemos declarar en el extensions.conf, Asterisk dispone de unas cuantas ‘de serie’, entre las que destacan:

469185188_0417e87373.jpgLas 3 primeras son mayormente utilizadas en IVRs, mientras que la última (hangup) es bastante utilizada en temas de billing.

Hoy he estado jugando un rato con la extensión h, así que voy a comentar un poco su uso, ya que en ocasiones puede resultar confuso:

¿Por qué queremos utilizar la extensión h?

Porque se ejecuta justo al finalizar la llamada, por lo que si queremos llevar a cabo algún proceso en ese momento, como tarificar una llamada, por ejemplo, la extensión ‘h’ es nuestra aliada.

Lo primero que necesitamos saber antes de comenzar a utilizarla, es que la extensión ‘h’ se ejecuta en el contexto desde el que hemos realizado la llamada. Veámoslo con un ejemplo:


[desde-pruebas]
include => prueba1
include => prueba2
[prueba1]
exten => 1234,1,Playback(tt-monkeys)
exten => h,1,Noop(Extension h — PRUEBA1)
[prueba2]
exten => 5678,1,Playback(demo-congrats)
exten => h,1,Noop(Extension h — PRUEBA2)

Ahora, si definimos nuestro usuario SIP (por ejemplo) en el contexto desde-pruebas, ¿qué ocurrirá al colgar si llamamos al 1234? ¿y al 5678?

En ambos casos se mostrará “Extension h — PRUEBA1″ porque lo que Asterisk busca es la extensión ‘h’ del contexto desde-pruebas, que es donde se ha originado la llamada, y como el primer include es el de prueba1, prevalecerá esa.

Otra cosa que nos puede suceder es que si realizamos algún tratamiento en la extensión ‘h’, después, en el CDR, nos aparezca ‘h’ como campo dst, en lugar del destino.

Para solucionar esto podemos usar la aplicación ResetCDR de la siguiente manera:


[desde-pruebas]
include => prueba1
include => prueba2
exten => h,1,ResetCDR(w)
exten => h.n.Noop(Estoy en el colgado)

El parámetro w pasado a la aplicación ResetCDR hará que el CDR sea grabado justo en ese instante, por lo que el campo dst quedará intacto :)

PEERO! Ahora es probable que tengamos 2 registros en el CDR por cada llamada: uno con el dst bien y otro con la ‘h’ que comentábamos antes. Para solucionarlo podemos usar la aplicación NoCDR, que anula la creación del CDR, de la siguiente manera:


[desde-pruebas]
include => prueba1
include => prueba2
exten => h,1,ResetCDR(w)
exten => h,n,NoCDR()
exten => h.n.Noop(Estoy en el colgado)

Así, lo que ocurrirá será que se grabará el CDR, y justo a continuación se dejará de crear, por lo que tendremos un único registro, y con el dst correcto :)

Happy Asterisk hacking!

Posted by saghul in General

Esta entrada se publicó el Martes, Abril 15th, 2008 a las 15:40 y está archivada bajo la categoría General. Puede seguir cualquier comentario a esta entrada a través del feed RSS 2.0 . Puede dejar un comentario, o trackback desde su propio sitio.

Deje un comentario

XHTML: Puede emplear estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

2005 © Irontec S.L. :: Powered by Irontec & Wordpress
[ IRONTEC S.L. - C.I.F. B-95274890 ]
[ Ctra. Basurto-Kastrexana nº70 / Enpresaldea ]
[ 48002 - Bilbao - Bizkaia ]