Devsío SIP "302"

87 views
Skip to first unread message

Iñaki Baz Castillo

unread,
Jun 15, 2009, 5:53:31 AM6/15/09
to aster...@googlegroups.com
Hola, supongamos este común escenario:

1) Asterisk recibe una llamada de la PSTN desde el número 911222333 y la ruta
a un tfno SIP (usuario 200).

2) El tfno 200 tiene un desvío SIP configurado en el propio teléfono a un
móvil 666555444.

3) Cuando el tfno recibe el INVITE genera un 302:
SIP/2.0 302 Move temporaly
Contact: <sip:666555444@asterisk_IP>

4) Asterisk recibe el 302 y debe generar una llamada al 666555444.


En el punto 4, Asterisk genera dicha llamada al 666555444 y pone como callerid
(From) el callerid original (911222333). Y punto pelota, no hay más que
hacer.
¿O sí? Lo bonito sería que "de alguna forma" se pudiese examinar la URI del
Contact del 302 (666555444) y trabajar con ella en el dialplan, de tal forma
que podamos hacer una consulta SQL y seleccionar el callerid asociado al
número llamado.

Pero me da que es imposible y que hay que recurrir a lo de siempre: hacer a
los teléfonos tontos y configurar desvíos a través de un PHP. ¿Me equivoco?

Gracias.


--
Iñaki Baz Castillo
<ib...@xtratelecom.es>

Saúl Ibarra

unread,
Jun 15, 2009, 5:58:35 AM6/15/09
to aster...@googlegroups.com
Si no recuerdo mal... cuando pasa eso se genera la llamada con
chan_local, por lo que tienes el control en el dialplan... Ahora
habría que hacer el cerdo:
El terminal añade alguna cabecera o algo detectable por Asterisk para
saber que ese request viene como resultado de un 302?

--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/

Iñaki Baz Castillo

unread,
Jun 15, 2009, 6:07:52 AM6/15/09
to aster...@googlegroups.com
El Monday 15 June 2009 11:58:35 Saúl Ibarra escribió:
> Si no recuerdo mal... cuando pasa eso se genera la llamada con
> chan_local, por lo que tienes el control en el dialplan... Ahora
> habría que hacer el cerdo:

> El terminal añade alguna cabecera o algo detectable por Asterisk para
> saber que ese request viene como resultado de un 302?

No entiendo a qué request te refieres:
- Asterisk llama al teléfono (con From: 911222333).
- El teléfono response "302 Contact: <sip:666555444@IP>
- Asterisk recibe el 302 y genera un nuevo INVITE desde el contexto del
teléfono *llamado*, con From el original (911222333) y destino 666555444.

A Asterisk no le llega ningún otro request.

Saúl Ibarra

unread,
Jun 15, 2009, 6:28:21 AM6/15/09
to aster...@googlegroups.com
Perdón, me he explicado mal :-/ a lo que me refería es a que hagas un
dumpchan o así en el contexto de llamar a móvil por ejemplo, y mira si
hay 'algo' que te haga saber que esa llamada se ha originado ahí por
culpa de un 302.

Porque mirar si el channeltype es Local/ o SIP/ es todavía más cerdo...



2009/6/15 Iñaki Baz Castillo <ib...@xtratelecom.es>:

Iñaki Baz Castillo

unread,
Jun 15, 2009, 6:35:56 AM6/15/09
to aster...@googlegroups.com
El Monday 15 June 2009 12:28:21 Saúl Ibarra escribió:
> Perdón, me he explicado mal :-/ a lo que me refería es a que hagas un
> dumpchan o así en el contexto de llamar a móvil por ejemplo, y mira si
> hay 'algo' que te haga saber que esa llamada se ha originado ahí por
> culpa de un 302.

Vale, ya te pillo... pero me parece bastante... "sucio" xDD
Gracias.

Santiago Gimeno Valer

unread,
Jun 15, 2009, 7:07:50 AM6/15/09
to aster...@googlegroups.com

Una solución un poco "ñapa" que creo que a lo mejor podría funcionar sería algo así:

exten => _X.,1,NoOp(Prueba)
exten => _X.,n,GotoIf($["${callee}" = ""]?dial)
exten => _X.,n,Set(CALLERID(number)=${callee})
exten => _X.,n(dial),Set(__callee=${EXTEN})
exten => _X.,n,Dial(SIP/${EXTEN})

Vamos, fijar la variable heredable callee a la extensión destino y si la variable callee está vacia no tocar el callerID(llamada inicial) y en caso contrario fijar el callerid a esa variable.

Santiago Gimeno Valer
----------------------------------------------
BARIK -Grupo Ormazábal-
Departamento Técnico
Tel.: +34 91 747 9900
www.barik.es
----------------------------------------------

Iñaki Baz Castillo

unread,
Jun 15, 2009, 7:02:54 AM6/15/09
to aster...@googlegroups.com
El Monday 15 June 2009 13:07:50 Santiago Gimeno Valer escribió:
> Una solución un poco "ñapa" que creo que a lo mejor podría funcionar sería
> algo así:
>
> exten => _X.,1,NoOp(Prueba)
> exten => _X.,n,GotoIf($["${callee}" = ""]?dial)
> exten => _X.,n,Set(CALLERID(number)=${callee})
> exten => _X.,n(dial),Set(__callee=${EXTEN})
> exten => _X.,n,Dial(SIP/${EXTEN})
>
> Vamos, fijar la variable heredable callee a la extensión destino y si la
> variable callee está vacia no tocar el callerID(llamada inicial) y en caso
> contrario fijar el callerid a esa variable.

Si no me equivoco, el dialplan que muestras debería ser tanto para la llamada
entrante (PSTN -> tfno) como para las llamadas salientes desde el contexto
del teléfono, ¿sí?.

Santiago Gimeno Valer

unread,
Jun 15, 2009, 7:27:12 AM6/15/09
to aster...@googlegroups.com

>
> Si no me equivoco, el dialplan que muestras debería ser tanto
> para la llamada entrante (PSTN -> tfno) como para las
> llamadas salientes desde el contexto del teléfono, ¿sí?.
>
>

Sí. Aunque no tienen porque estar en el mismo contexto

Iñaki Baz Castillo

unread,
Jun 16, 2009, 1:42:54 PM6/16/09
to aster...@googlegroups.com

Ok, es una buena idea, a ver si puedo aplicarlo.

Gracias.

Reply all
Reply to author
Forward
0 new messages