[Users-es] append_branch y call forwarding

Saúl Ibarra saghul at gmail.com
Thu Aug 16 14:54:38 CEST 2007


Umm, entonces tu no implementas desvios y demás? Por ejemplo el DND se
puede hacer con el telefono, pero el call forwarding? Los telefonos ip
tienen funciones para eso?

El 16/08/07, Iñaki Baz Castillo <ibc at in.ilimit.es> escribió:
>
> El Thursday 16 August 2007 11:54:10 Saúl Ibarra escribió:
> > Hoola:
> >
> > Sorry por mandar este mail a las 2 listas, es por si alguien todavía
> > no se ha cambiado...
> >
> > He implementado un sistema de call forward con OpenSER bajo los 3
> > tipicos supuestos (blind, busy y no answer). Me funciona, pero tengo
> > una dudilla respecto a la función append_branch: según yo entiendo, lo
> > que hace es "abir" un nuevo call leg (o algo asi) hacia el ruri
> > indicado y luego conectarme.
> >
> > Pues bien, yo lo he utilizado porque me daba error y me decia que no
> > quedaban branches... y al ponerlo voila! La cuestion es: es esto
> > correcto?
> >
> > Por otro lado, al implementar la cosa esta me ha venido la siguiente duda:
> >
> > Cuando el desvío es blind, simplemente cojo el uri que tengo
> > almacenado en la tabla usr_preferences hago relay hacia alli, por lo
> > que si soy yo mismo no hay problema, la llamada iria saltando y
> > saltando hasta llegar a destino.
> >
> > En cambio, el control del desvio si ocupado o si no contesta lo hago
> > en el on_failure, y por lo tanto, no puedo hacer ese "bucle", es
> > decir, si el usuario destino tambien se encuentra desviado, yo no lo
> > se. Pregunta: como puedo volver a meter la llamada en el route central
> > (con el ruri alterado) para asi poder tener un forwarding "recursivo"?
>
> Personalmente intento no hacer "dialplan" con OpenSer, me parece excesivamente
> complejo y sobretodo poco escalable. No obstante el tema de "serial forking"
> es lo que creo que buscas, y algo de doc (ojo por si está desfasada) hay
> aquí;
>
> http://openser.org/dokuwiki/doku.php/tutorials:avpops?s=serial#serial_forking
>
>
> > Ahora mismo lo tengo tal que asi:
> >
> > # -----------------------------------------------------------------
> > # failure_route[1] -- Cuando falla un INVITE - 486 busy o 408 no
> > answer, le mandamos al buzon o desviamos
> > # -----------------------------------------------------------------
> >
> > failure_route[1]
> > {
> >       if(!t_was_cancelled()) {
> >
> >               if (t_check_status("(486)|(408)")) {
> >
> >                       ## Miramos si tiene el Voicemail activado
> >                       if (avp_db_load("$ruri/username", "$avp(s:vm)")) {
> >                               xlog("L_INFO","$Cbx--- Voicemail ACTIVADO ---$Cxx\n");
> >                               revert_uri();
>
> ¿Por qué ese revert_uri(); ahí?
>
> >                               rewritehostport("10.68.42.134:5070");
> >                               append_branch();
>
> ¿No se supone que un append_branch(); tiene sentido **antes** de modificar el
> URI?
> http://openser.org/dokuwiki/doku.php/core-cookbook:devel#append_branch
>
> >                               ## Activamos el flag 10 para evitar bucles
> >                               xlog("L_INFO","$Cbx---> Redirigiendo al Voicemail...$Cxx\n");
> >                               setflag(10);
> >                               route(1);
> >                               exit;
> >                       }
> >               }
> >
> >               ## Si devuelve BUSY comprobamos su hay desvio
> >               if (isflagset(21) && t_check_status("486")) {
> >                       if (avp_pushto("$ruri", "$avp(s:cfb)")) {
>
> Sólo por comentar, esa función "avp_pushto" ya no hace falta, sirve un simple:
>   $avp(s:cfb) = $ruri
> (que es más bonita)  XD
>
> >                               avp_delete("$avp(s:cfb)");
> >                               resetflag(21);
> >                               route(6);
> >                               exit;
> >                       }
> >               }
> >
> >               ## Si devuelve NO ANSWER comprobamos su hay desvio
> >               if (isflagset(22) && t_check_status("408")) {
> >                       if (avp_pushto("$ruri", "$avp(s:cfna)")) {
> >                               avp_delete("$avp(s:cfna)");
> >                               resetflag(22);
> >                               xlog("L_INFO","$Cbx Estoy en el failure donde noanswer $Cxx\n");
> >                               route(6);
> >                               exit;
> >                       }
> >               }
> >
> >
> >       }
> > }
>
>
>
> --
> Iñaki Baz Castillo
> ibc at in.ilimit.es
>
> --~--~---------~--~----~------------~-------~--~----~
> Has recibido este mensaje porque estás suscrito a Grupo "openser-es" de Grupos de Google.
>  Para anular la suscripción a este grupo, envía un mensaje a openser-es-unsubscribe at googlegroups.com
>  Para obtener más opciones, visita este grupo en http://groups.google.com/group/openser-es?hl=es.
>  En el canal #openser-es de la red de IRC irc.freenode.net puedes encontrar gente del grupo.
> -~----------~----~----~----~------~----~------~--~---
>
>


-- 
Saúl -- "Some people say why, other just say, why not."
----------------------------------------------------------------
http://www.saghul.net/




More information about the Users-es mailing list