Integración de FreePBX y A2Billing

6 02 2008

Los interfaces web sobre Asterisk tienen una gran ventaja, y es que automatizan muchas tareas tediosas y permiten una interacción más amigable con el “demonio” de Asterisk. Para los no iniciados pueden suponer una gran ayuda, pero a veces, pueden provocar que el proceso de aprendizaje natural de Asterisk, se vea distorsionado y mal enfocado.

En la lista de Asterisk-Es, ya hemos tenido unas cuantas conversaciones sobre las bondades de las interfaces web para Asterisk, aunque sigue habiendo firmes detractores de las mismas.

Pues bien, para aquellos que ven en estas herramientas elementos que facilitan la gestión diaria (sin entrar en complejas personalizaciones), va dedicado este pequeño post sobre cómo configurar FreePBX para que pueda usar A2Billing para la tarificación de ciertos destinos, pero sin perder el potencial y la flexibilidad de que disponemos sobre los usuarios SIP o IAX, al intentar usar A2Billing exclusivamente.

La idea principal es usar una ruta saliente que apunte a A2Billing al objeto de tarificar dicha salida, y sólo esa salida. El resto de rutas, incluidas las internas, siguen su funcionamiento normal a través de FreePBX. Emplear esta filosofía permite seguir disponiendo de manera sencilla de buzón de voz, desvío, transferencia, etc, etc…, cosa que A2Billing no integra o lo hace con dificultad.

Seguimos los siguientes pasos:

  1. Vamos a FreePBX y creamos un nuevo trunk –> Custom Trunk
  2. Se introducen las reglas de marcado sobre ese trunk según las necesidades específicas.
  3. En la zona donde pone “Custom Trunk String” ponemos A2B/$OUTNUM$
  4. Pulsamos en Submit y ya tenemos creado el trunk que enviará las llamadas a A2Billing.
  5. Nos vamos a las rutas de salida, Outbound Routes, y creamos la ruta que pretendemos tarificar. Por ejemplo, si queremos cobrar las llamadas internacionales, pues colocamos un 00. o algo equivalente.
  6. Es importante que tengamos seleccionado el parámetro Intra Company Route, al objeto de que se preserve nuestro número de extensión.
  7. El paso siguiente consiste en modificar el fichero extensions.conf y buscar el contexto [macro-dialout-trunk]. Si tenemos la versión 2.3.x no habrá problemas, pero si estamos usando la 2.4, resulta que han movido [macro-dialout-trunk] al fichero extensions_additional.conf (lo cual es una putada). Habrá que toquetear en este último caso, el contexto [macro-dialout-trunk-predial-hook], el cual no he tenido la ocasión de probar, aunque no debe presentar la mayor dificultad. Suponemos que tenemos la versión 2.3.x, y buscamos la siguiente línea

    exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})

    La anterior línea será borrada y sustituida por el texto siguiente

    ; Modificado para realizar llamadas hacia A2Billing a la vez que se mantiene la posibilidad de utilizar las reglas
    ; de marcado de FreePBX
    ; linea original: exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
    ; funcion añadida:
    
    exten => s,n(skipoutnum),GotoIf($["${pre_num}" = AMP:A2B/"]?a2bdial:skipoutnumnormal) ; Verifica que el trunk empiece por
    										      ; A2B y hace el Dial.
    
    exten => s,n(a2bdial),DeadAGI(a2billing.php|1|${OUTNUM}) ; Hace el Dial usando A2Billing. Notese el parametro ${OUTNUM}.  
    
    exten => s,n,Goto(s-${DIALSTATUS},1)
    
    exten => s,n(skipoutnumnormal),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
    
    ; fin de las modificaciones
  8. Salvar los cambios y hacer un reload de asterisk
  9. Editamos /var/lib/asterisk/agi-bin/a2billing.php y buscamos lo siguiente
    if ($argc > 1 && is_numeric($argv[1]) && $argv[1] >= 0){
    
       $idconfig = $argv[1];
    
    }else{
    
       $idconfig = 1;
    
    }

    Debermos añadir el siguiente código, justo inmediatamente después

    if ($argc > 2 && is_numeric($argv[2]) && $argv[2] >= 0){   //Nuevo
    
       $the_num = $argv[2];         //Nuevo
    
    }                              //Nuevo

    También modificaremos lo siguiente

    $A2B->dnid = $agi->request['agi_dnid'];

    sustituyéndolo por esto otro

    // La linea original era: $A2B->dnid = $agi->request['agi_dnid'];
    
    // Comprobamos si la llamada viene del contexto macro-dialout-trunk en freePBX
    
    // y ponemos la variable dnid al valor deseado, el cual será pasado a A2Billing
    
    if($agi->request['agi_context'] == "macro-dialout-trunk")   //Nuevo
    
       $A2B->dnid = $the_num;            	//Nuevo
    
    else                        		//Nuevo
    
    $A2B->dnid = $agi->request['agi_dnid']; //Nuevo
    
    // Fin de las modificaciones            //Nuevo
  10. Salvamos el archivo a2billing.php
  11. Por último, nos cercioramos que tenemos en /etc/asterisk/a2billing.conf lo siguiente
    use_dnid = YES
    
    number_try = 1
    
    cid_enable = YES

Si hemos realizado bien los pasos descritos, estaremos en disposición de autentificar a la extensión de FreePBX en A2Billing mediante su CID. Obviamente, habremos creado previamente, un Customer en A2Billing con crédito suficiente para llamar, con un CID coincidente con la extensión de FreePBX, un Call Plan, una RateCard, unas Rates y un trunk de salida…

Hay que recordar que si hacemos alguna actualización de FreePBX (módulo core o framework) es posible que se nos machaquen los cambios en el fichero extensions.conf. Por tal motivo, deberemos tener alguna copia de seguridad o bien, ingeniarselas para hacer las modificaciones en el archivo extensions_custom.conf.

Actualización:

Gracias al amigo RazaMetal, aquí os pongo un código muchíiiiiisimo más optimizado para obtener el mismo resultado de integración y sin tener que tocar nada de a2billing.
Básicamente, se debe hacer uso de “macro-dialout-trunk-predial-hook” que permite inyectar código antes de que freepbx use sus macros internas. En este caso, decimos que si se está usando un trunk de freepbx personalizado (por ejemplo, A2B/1), se vaya a un contexto “custom-freepbx-a2billing” donde pasar la llamada a tarificar a a2billing. En este caso, el 1 despues de la barra, es una indicación para a2billing, de forma que utilice [agiconf1] (se pueden crear otros patrones, en funcion de nuestro a2billing.conf)

El código a utilizar en extensions_custom.conf es:

[macro-dialout-trunk-predial-hook]
exten => s,1,GotoIf($["${OUT_${DIAL_TRUNK}:4:4}" = "A2B/"]?custom-freepbx-a2billing,${OUTNUM},1:2)
exten => s,2,MacroExit
[custom-freepbx-a2billing]
exten => _X.,1,DeadAGI(a2billing.php|${OUT_${DIAL_TRUNK}:8})
exten => _X.,n,Hangup()

De esta forma, toda llamada que use el trunk “A2B/1” como ruta saliente, será enviado a a2billing para ser tarificada.

Anuncios

Acciones

Information

7 responses

7 10 2008
rene

Hola,
tengo un problema, como hago que a2billing me guarde el callid de los clientes y lo asocie a un numero de tarjeta.
Gracias por todo, espero tu repuesta

1 12 2008
Ronald

Hola, me podrías ayudar con lo que se debe hacer en el macro-dialout-trunk-predial-hook. no se como hacer.

Gracias

1 12 2008
ualtech

no entiendo qué no entiendes tú? XDDD
Al final del post tienes lo que hay que poner en la macro…

3 12 2008
Ronald

hola, tenia un problema con mi explorador que no veia toda la pagina, disculpen, ahora bien, hice los cambios, desde la extensión marco 80426789987 y se dirige al a2billing me pide el pin, lo ingreso y ahora me pide que ingrese de nuevo el número al cual deseo llamar (804269089734), cómo puedo hacer para que el asbilling llame al número sin necesidad de matcarlo otra vez?

3 12 2008
Ronald

disculpen los números son los mismos: 80426789987 y 80326789987

16 06 2010
Diego

Tenes que poner, en el /etc/asterisk/a2billing.conf
say_balance_after_auth=NO
use_dnid=YES
answer_call=NO

20 02 2011
Ana

Buenos días: Gracias por este buenisimo artículo, perdonen mi novatada pero necesito ayuda urgente en lo siguiente: Deseo saber como hacer para que una línea voip que tengo con numeración geografica española (con dos canales) poder ponerla como línea entrante en mi VPS que tiene la configuación siguiente: Asteriks+Freepbx+A2Billing. un ejemplo de mi línea a continuación:
911742170
user: 911742170K
password: plm765IKJ7Gba
Servidor de registro: shintiny2.doniodeellos.es o 362.820.56.101

Agradezco la ayudade antemano.
Ana.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: