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(a)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_forki…
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(a)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(a)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."
----------------------------------------------------------------