- Hola
7 horas 26 min antes - ¿ Aquí en México tienen
7 horas 45 min antes - Qué yo sepa, no. Aunque si
7 horas 46 min antes - ¿ Cada troncal tiene su
13 horas 54 min antes - no funciona :(
19 horas 47 min antes - Exten es el número destino,
1 día 9 horas antes - No dices que software de
1 día 10 horas antes - Te recomendaría el libro
1 día 10 horas antes - Pri show spans
2 days 17 horas antes - Conferencias
2 days 17 horas antes
¿ Cómo rutear llamadas dinámicamente ?
Posted Junio 19th, 2009 by phylevn
Qué tal, buen día.
Pongo este post ya que tengo una duda de como rutear llamadas en Asterisk de manera dinámicamente por si alguien puede darme una pista, tip o truco, les comento mi situación:
Aquí en México hay varias compañías de telefonía móvil(telcel, movistar, iusacell, unefón, nextel, etc). Cada compañía tiene precios bajos entre llamadas de teléfonos de la misma compañía, y llamadas a otras compañías son más caras, todos los números móviles en México comienzan con 044 y 045. En Asterisk tengo una tarjeta con puertos FXO, a los cuáles tengo conectados 3 telulares, en este caso uno para cada compañía de telcel, movistar y iusacell que son las principales compañías móviles en México.
Cada compañía tiene asignada una numeración, la numeración es de 13 digitos, y se puede saber a que compañía pertenece un número por los primeros 9 digitos y para esto hay que consultar una base de datos de cerca de 65,000 registros.
Entonces lo que quiero hacer es cuándo alguien marque un número que comience por 044 o 045 consultar la base de datos para saber a que compañía pertenece y de ahí poder redirigirla al puerto FXO correspondiente, esto para poder abaratar los costos de llamadas de telefonía celular.
El detalle de todo esto es que estaba pensando usar un AGI, pero al momento de mandar a ejecutar el AGI tengo que usar ANSWER, y esto le pasa al CDR que la llamada se contestó cuándo aún no se ha contestado y empieza a contar desde que se marca.
Por lo que pongo en este foro mi problema por si alguien puede darme un tip, sugerencia, truco de como poder darle solución a este detalle.
Sin más agradezco su apoyo..
Saludos :)

Hola,
Hmm, al menos en Asterisk 1.6 la aplicacion AGI no dispone que el canal esta en ANSWER. En mis pruebas CDR(disposition) esta en NO ANSWER mientras el AGI no le indicaba que conteste.
Prueba con esto en tu Asterisk para saber si la disposicion cambia luego de ejecutar la aplicacion AGI.
Dialplan:
exten => XXXXXXXXX-XXX,1,AGI(set_variable_ruta.agi)
exten => XXXXXXXXX-XXX,n,Wait(1)
exten => XXXXXXXXX-XXX,n,Verbose(Ruta es ${RUTA})
exten => XXXXXXXXX-XXX,n,Verbose(disposicion es ${CDR(disposition)})
exten => XXXXXXXXX-XXX,n,Wait(1)
exten => XXXXXXXXX-XXX,n,Dial(Dahdi/${RUTA}/${EXTEN})
set_variable_ruta.agi:
#!/usr/bin/env python2.5import sys
import sqlite3
agi_extension = None
for line in sys.stdin:
key,data = line.split(': ', 1)
if key.strip() == 'agi_extension':
agi_extension = data.strip()
break
#
# MUCHO OJO AQUI, DEBE ADAPTARSE A TU CONFIGURACION.
#
conn = sqlite3.connect('/var/lib/rutas.db')
cur = conn.cursor()
cur.execute('SELECT ruta FROM rutas WHERE prefijo=?', (agi_extension,))
row = cur.fetchone()
sys.stdout.write('SET VARIABLE RUTA %s\n' % row[0])
sys.stdout.flush()
En todo caso, la solucion mas facil es usar la aplicacion ResetCDR() luego de ejecutar AGI
Dialplan:
exten => XXXXXXXXX-XXX,1,AGI(set_variable_ruta.agi)
exten => XXXXXXXXX-XXX,n,ResetCDR()
exten => XXXXXXXXX-XXX,n,Dial(Dahdi/${RUTA}/${EXTEN})
Saludos,
PLL.
pd. Holas a todos.
Gracias @Pll, voy a intentar hacerlo.. si funciona publico por aquí el procedimiento y scripts con que lo hice funcionar en caso de que asi sea. Gracias de antemano. Saludos :)
--
Daría todo lo que sé, por la mitad de lo que ignoro..
httP://phylevn.binniza.com