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@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_forkin...
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@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@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. -~----------~----~----~----~------~----~------~--~---