Hola a todos!
Actualmente me encuentro configurando mi Openser y quiero direccionar las llamadas de acuerdo a mi número de origen (al campo From), estuve leyendo por ahí y vi que se podía hacer con el módulo AVPOPS, pero al configurarle los parámetros, me arroja un error.
"ERROR: add_avp_galias_str <$fu> set module parameter" "Can`t set module parameter"
Lo que hice fue lo siguiente: ... loadmodule "avpops.so" ... modparam("avpops", "avp_url", "mysql://openser:openserrw@161.xxx.xxx.xxx /openser") modparam("avpops", "avp_table", "usr_preferences")
modparam("avpops","avp_aliases","email=s:email_addr;fwd=i:753;$Tf=s:time;$from=$fu") modparam("avpops","uuid_column","uuid") modparam("avpops","username_column","username") modparam("avpops","domain_column","domain") modparam("avpops","attribute_column","attribute") modparam("avpops","value_column","value") modparam("avpops","type_column","type ... if (method == "INVITE"){ route(3); exit; }; ... route[3]{ if (avp_check("s:0001sip:0001@.*"eq/$from/I)) { exit; };
Me falta algo? o estoy colocando mal alguna línea?
Muchas Gracias por la ayuda que puedan brindar
Hola,
que versión de Openser usas?
Oscar Castillo wrote:
aqui hay errores $Tf=s:time;$from=$fu ... avp alias es solo un shortcut a un avp nombre ... no puedes crear referencias a otras pseudo-variables, solo puedes crear referencias a un avp (string o integer) .
modparam("avpops","avp_aliases","email=s:email_addr;fwd=i:753;$Tf=s:time;$from=$fu")
Saludos, Elena-Ramona
Hola Ramona,
Ante todo, gracias por participar en la lista.
Para quién no lo sepa, Ramona es una de las desarrolladores de OpenSER y autora de módulos como avpops, uac, xlog, pdt, speeddial, etc, así que contamos con una de las voces más autorizadas en OpenSER :-)
Gracias!
Saludos JesusR.
que versión de Openser usas?
Saludos JesusR.
------------------------------------ Jesus Rodriguez VozTelecom Sistemas, S.L. jesusr@voztele.com http://www.voztele.com Tel. 902360305 -------------------------------------
Jeje, ese "@openser.org" me ha dado que pensar...
El 20/08/07, Jesus Rodriguez jesusr@voztele.com escribió:
Hola Jesus,
gracias por introducirme y para la ayuda que das en esta lista.
Se parece que hay mucha gente de habla hispana que usa Openser. Espero que mi castellano sea todavia bueno para hacerme entendida. Hace un poco desde cuando no lo he hablado.
Saludos, Ramona
Jesus Rodriguez wrote:
El Monday 20 August 2007 17:33:33 Ramona Modroiu escribió:
Se te entiende perfectamente. Saludos y gracias por ofrecer estas herramientas de tanta calidad.
Saludos
Hola Ramona,
Se entiende perfectamente... y en unos días mucho mejor!.
Saludos JesusR.
Saludos JesusR.
------------------------------------ Jesus Rodriguez VozTelecom Sistemas, S.L. jesusr@voztele.com http://www.voztele.com Tel. 902360305 -------------------------------------
Wow que honor, de verdad que si. Ante todo gracias por responder y en un español tan claro :-D
Te comento que seguí revisando antes de postear de nuevo y sigo con el problema, borré la parte correspondiente a $Tf=s:time;$from=$fu y me sigue arrojando errores, en esta oportunidad uno referente a "unable to get pseudo variable in P1"
Coloqué el comando avp_db-load("$from","i:678"); y ahora me dice que tengo un error de syntaxis, que no encuentro.
Realmente no se que necesito para que la función AVP_CHECK me enrute de acuerdo al campo from, cualquier sugerencia será bienvenida.
Muchas Gracias de antemano
El día 20/08/07, Ramona Modroiu ramona@openser.org escribió:
Ahh otra cosa que olvide comentar es que la versión de Openser que uso es la v1.1.1
El día 20/08/07, Oscar Castillo o.castillo.castillo@gmail.com escribió:
Te recomiendo actualizar a la ultima versión estable de Openser v1.2.2, es mas rapido y lo tienes mas facil usar las pseudo-variables.
otros comentarios dentro del mensaje ...
Oscar Castillo wrote:
La syntaxis del comando debe ser avp_db_load("$fu", "$avp(i:678)");
no entiendo exactamente que quieres hacer ... podrias darme mas detalles?
Saludos, Ramona
Fijate mi intencion es la siguiente:
Quiero poder direccionar los paquetes por un camino o por otro dependiendo de la extensión de la cual estoy llamando, es decir, de acuerdo a la dirección del campo FROM en el mensaje SIP.
Por ejemplo si estoy llamando desde la extensión xxx9 quiero que las llamadas se vayan por una ruta en específico, diferente a la de las rutas xxx[0-8].
Gracias nuevamente
El día 20/08/07, Ramona Modroiu ramona@openser.org escribió:
El 20/08/07, Oscar Castillo o.castillo.castillo@gmail.com escribió:
Supongo que llego tarde pero, ¿no te sirve analizar la variable $fu, $fU y/o $fd?
Algo en plan:
if ( $fU == "fulanito" ) { rewriteuri("XXXXXXXXXXXXX"); }
Y si quieres expresiones regulares pues podrías asignar el From a un AVP antes del "if":
$avp(s:from) = $fu;
Pero vamos, que lo que digo es muy obvio y habrá alguna razón por la que tal vez no te sirva (ya comento que no me he leído todo el hilo).
Saludos.
El 20/08/07, Ramona Modroiu ramona@openser.org escribió:
Vaya, no había caído yo en la cuenta de que también se pueden aplicar expresiones regulares sin AVP's.
Por cierto, de cara a la eficiencia ¿existe alguna diferencia entre usar AVPs de texto y variables? Quiero decir, ¿qué es más costoso computacionalmente?:
a) $avp(s:texto) = "XXXXXXXX"; if ( avp_check("$avp(s:texto)", "re/^xxx[0-8]$/i") ) { ...
b) $var(texto) = "XXXXXXXX"; if ( $var(texto) =~" ^XXX") { ...
¿O tal vez sean igual de eficientes?
En caso de que sean igualmente costosas: ¿qué sentido tienen entonces los AVP's de texto existiendo variables (las cuáles son más "digestibles")?
Y ya puestos: sé que los AVP numéricos en plan $avp(i:12) son más eficientes que los AVP de texto en plan $var(s:cadena), ya que cuesta menos referirse a un entero que a una cadena de texto. Pero, ¿no tendría sentido que en tiempo de compilación se convirtiesen los AVP de texto a AVP numéricos sin más? ya sé que existen los alias, pero sigue siendo una solución un poco "fea".
En fin, cosillas que tenía previstas preguntar algún día y aprovechando la conversación lo saco ahora... XD
Saludos.
Iñaki Baz Castillo wrote:
La variante b) es mas eficiente. Las variables suponen referencia directa a la memoria privada. Sobre los AVPs ... hay una lista de AVPs en la memoria compartida y significa mas busqueda dentro de esa lista.
avp_check() te hace falta si hay mas de un avp y quieres verificar las todas. En el ejemplo anterior vale escribir if($avp(s:texto)) =~"^XXX") {....}.
Las variables viven dentro de un proceso. Las AVPs viven dentro de una transaccion ... estan accesible dentro de la failure_route donde hay otro proceso que el que habia procesado el mensaje original. Tambien, las AVPs permiten valores multiples.
eso es una idea :)
Saludos, Ramona
El 21/08/07, Ramona Modroiu ramona@openser.org escribió:
Te agradezco enormemente tan buena explicación, ya que además creo que lo que me has explicado no viene documentado en ninguna parte.
Un saludo y de nuevo muchas gracias :)
El Tuesday 21 August 2007 11:17:05 Ramona Modroiu escribió:
Una duda:
Las AVP's viven dentro de una transacción, y entiendo de tu comentario (y de tu tutorial [1]) que están **por defecto** accesibles en failure_route.
Sin embargo, para acceder a un AVP en el onreply_route es necesario activar: modparam("tm", "onreply_avp_mode", 1)
¿Esto es así? ¿me dejo algo importante?
Gracias.
[1] http://www.openser.org/dokuwiki/doku.php/tutorials:avpops
Muchas Gracias Ramona, con ese ejemplo que me diste me funcionó tal como esperaba y a ti Iñaki por la orientación.
Muchas Gracias a ambos :-)
El día 20/08/07, Ramona Modroiu ramona@openser.org escribió:
sr-users-es@lists.kamailio.org