Configurar a2billing en Menos de 10 Minutos

download Configurar a2billing en Menos de 10 Minutos

of 10

Transcript of Configurar a2billing en Menos de 10 Minutos

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    1/10

    Configurar a2billing en menos de 10 minutos

    Ya sabemos como instalar a2billing, viene algo que al inicio no se nos hara muy amigable y es configurarlopara que empieze a controlar las tarifas de las llamadas que se realizen desde asterisk.

    Una de las cosas que se tornan mas difciles (instalarlo es super fcil) es entender como manejar el sistema defacturacin. Sabemos que puede mostrarnos el consumo monetario de una llamada realizada por alguna denuestras extensiones (clientes), pero configurarlo desde su amigable interfaz web es algo confuso las primerasveces.

    No hay mejor manera de explicar un procedimiento que con la prctica, voy a explicar como lograr quea2billing funcione para tarificacin del consumo telefnico. Para esto voy a asumir lo siguiente:

    - Tengo instalado y configurado Asterisk;- Tengo configurado un proveedor de minutos que usa SIP al que llamare proveedorsip;- Mi proveedor NO requiere que se agregen 00 011 antes del cdigo de pas;- Tengo instalado a2billing y su interfaz de usuario;- Para hacer llamadas internacionales mis extensiones agregan el 00 antes del cdigo de pas.

    En nuestro archivo de configuracion sip.conf debemos tener las lneas para la configuracin del proveedor:

    [proveedorsip]username=usuariotype=peersecret=una-clavenat=yesinsecure=veryhost=sip.proveedorsip.comfromuser=usuariofromdomain=sip.proveedorsip.com

    dtmfmode=infodisallow=allcanreinvite=noauthuser=usuarioallow=g723allow=g729allow=alaw

    El procedimiento:1.- Crear un proveedor:

    TRUNK --> Create ProviderHe creado el Proveedor ProveedorSIP en donde ingreso detalles informativos del proveedor.

    2.- Agregar un Trunk:

    TRUNK --> Add Trunk

    Un trunk es el canal por donde saldrn las llamadas, podemos tener varios trunks por ejemplo uno parallamadas internacionales, otro para llamadas locales, etc. Estos trunks pueden usar el mismo proveedor perose diferencian entre ellos por los dgitos que se agregan o eliminan al marcado que envia el cliente, as en esteejemplo debemos agregar 00 para llamadas inernacionales; agregar 5935(yo estoy en Manab) para lasllamadas locales.

    Se ingresan los detalles de la troncal, por ejemplo que prefijo se debe agregar a cada llamada que por estatroncal salga, para ilustrar el ejemplo estos son los datos que ingreso para el Trunk que llamar internacional-proveedorsip, debo tener en cuenta que a este proveedor enviarle el codigo de pais y el numero de telefono,por ejemplo si voy a llamar a Venezuela el debera recibir 582121234567 y no 00582121234567, el prefijo demarcado vara entre los diferentes proveedores, otros requieren que envies un 011 00 antes del codigo de

    http://www.ecualug.org/?q=2006/07/19/comos/instalar_un_sistema_de_facturacion_para_asteriskhttp://www.ecualug.org/?q=2006/07/19/comos/instalar_un_sistema_de_facturacion_para_asterisk
  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    2/10

    pais para poder terminar la llamada.

    Mis usuarios marcarn:

    00 + codigo de pais + codigo de area + numero de telefono

    El proveedor podra terminar la llamada si el marcado le llega como:

    codigo de pais + codigo de area + numero de telefono

    As debera de quedar el trunk en a2billing para que se cumplan los requerimientos anteriores:

    VOIP-PROVIDER ProveedorSIPLABEL internacional-proveedorsipADD PREFIX (en este caso no es necesario agregar prefijos)REMOVE PREFIX 00PROVIDER TECH SIPPROVIDER IP proveedorsipADDITIONAL PARAMETERFAILOVER TRUNK (no es necesario por ahora)

    La ltima opcin es bastante til si tenemos mas de un proveedor. Podemos tener varios trunks que haganterminacin a un mismo destino pero con diferentes proveedores, asi si el proveedor A esta sin servicio lallamada puede ser terminada por el proveedor B.

    3.- Creamos un grupo de tarifas (TariffGroup)

    RATECARD --> Create TariffGroup

    TARIFFGROUPNAME OroLC TYPE LCRREMOVE INTER PREFIX NOPodemos tener varios grupos de tarifas que contendran diferentes precios, por ejemplo podemos tener 3grupos de tarifas Oro, Plata y Bronce. En Oro van tarifas bien bajas, y en Bronce las altas. Los grupos detarifas contienen las Ratecard y estas ltimas los precios de los destinos. Los grupos de tarifas pueden tenertambien LCR o LCD.

    LCR es Low Cost Routing que quiere decir que escogera de las tarifas que existan a un destino la que noscuesta menos. LCD es Low Cost Dialing que quiere decir que escoger la tarifa de venta mas econmica parael usuario.

    4.- Crear RATECARD

    RATECARD --> Create new Ratecard

    TARIFFNAME InternacionalSTART DATETRUNK internacional-proveedorsipDESCRIPTION Tarifas internacionalesDNID PREFIX all

    Ratecard va a contener Rates (precios) para cada destino, en el ejemplo se ha creado la tarifa llamada

    Internacional que usara el trunk internacional-proveedorsip para terminar las llamadas.5.- Crear tarifas

    RATECARD --> Add Rate

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    3/10

    RATECARD internacionalDIALPREFIX 001DESTINATION Estados UnidosBUYING RATE 0.05BUYRATE MIN DURATION 6BUYRATE BILLING BLOCK 30SELLING RATE 0.10

    SELLRATE MIN DURATION 6SELLRATE BILLING BLOCK 30CONNECT CHARGE 0DISCONNECT CHARGE 0TRUNK internaciona-proveedorsip

    Seguimos el procedimiento para cada destino que queramos agregar. Hacerlo para todos los paises del mundosera bastante tedios, para ello existe la opcion de importar un archivo separado por comas (CSV) quehallamos editado en nuestra hoja de calculo favorita. Esta tarea se la logra en:RATECARD --> Import RateCard

    El separador de columnas debe ser el ; (punto y coma) ya que si usamos , nos dar error al importar.

    6.- Crear clientes

    CUSTOMERS --> Create Customers

    CARD NUMBER (generado por a2billing)CARD ALIAS 123WEBui PASSWORD 123BALANCE 10LANGUAGE SPANISH

    TARIFFGROUP OroSIMULTANEOUS ACCESS INDIVIDUAL ACCESSCURRENCY U.S. Dollar (USD)LASTNAME ApellidoFIRSTNAME NombreEMAIL

    [email protected]

    ADDRESS DireccionCITY CiudadSTATE/PROVINCE ProvinciaCOUNTRY PasPHONENUMBER TelefonoFAXNUMBER FaxSIP ACCOUNT YesIAX ACCOUNT Yes

    A2billing nos genera automticamente el numero de tarjeta, si quieremos darle a nuestro usuario un nmeroque sea ms fcil de recordar para el podemos usar el campo CARD ALIAS. En este ejemplo el usuario tieneun crdito de US$10,00 y la cuenta no puede ser usada simultneamente.

    A cada tarjeta podemos agregarles usuarios adicionales SIP e IAX. Esto se lo logra listando las tarjetas ydando click al botn respectivo (SIP, IAX) en el resultado de listar las tarjetas:

    CUSTOMERS --> List Customers

    Dar click en SIP para crear un usuario SIP

    mailto:[email protected]:[email protected]
  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    4/10

    Dar click en IAX para crear un usuario IAX

    7.- Agregar RATECARD al TARIFFGROUP

    RATECARD --> LIST TARIFFGROUP

    Escoger el tariffgroup Oro y agregar el ratecard internacional

    Ahora debemos probar si nuestra configuracin surte efecto. Configuramos un dispositivo SIP o IAX2 para

    que se registre con los datos de usuario sip iax friend y marcamos un nmero de USA. Si todo esta bien enel CDR veremos registrada la llamada, su Duracin y precio.

    T-R-U-C-O-S - Y - T-I-P-S:

    Esta seccion la voy a actualizar constantemente de acuerdo al avance que vaya teniendo asi que no dejen derevisarla, puede que algo que necesiten hacer y no sepan como lograrlo ya este publicado en esta parte ;)

    **** Modificar el campo Card Number del ClienteAl editar un cliente no puedes modificar el nmero de tarjeta porque este campo esta protegido contraescritura, esto implica que una llamada entre usuarios del mismo servidor pueda ser hecha entre nmeros detarjeta y no entre alias de tarjetas, los nmeros que se aprenden mis usuarios son los alias porque son mssencillos de aprender. Por otra parte en lo personal se me hace mas fcil asignar manualmente el nmero de

    tarjeta que ser el nmero de usuario. Para lograrlo debemos editar la linea 199 y eliminar la palabra readonlyen el archivo /var/www/a2billing//Public/form_data/FG_var_card.inc la lnea en mencin nos quedara mas omenos as:Antes:

    "size=20 $maxi readonly maxlength=40",

    Despues:

    "size=20 $maxi maxlength=40",

    **** Escuchar saldo desde cualquier extension registrada

    Muchos clientes quieren conocersu saldo en dinero sin necesidad de tener una computadora cerca, para estorealizamos el siguiente hack:

    cd /var/lib/asterisk/agi-bincp a2billing.php balance.phpcp -r libs_a2billing balance

    Editamos balance.php y cambiamos todas las referencias de libs_a2billing a balance, de igual manerahacemos con /var/lib/asterisk/agi-bin/balance/Class.A2Billing.php y reemplazamos a2billing.conf porbalance.conf

    cd /etc/asterisk/cp a2billing.conf balance.conf

    Editamos las siguientes opciones en balance.conf

    say_balance_after_auth=YESuse_dnid=NOanswer_call=YES

    Finalmente se agrega la siguiente linea en extensions.conf en el contexto que usamos para a2billing:

    ; Agregar extension *0 para que el usuario consulte su saldoexten => *0,1,DeadAGI(balance.php)

    Al marcar *0 desde cualquier equipo registrado en el sistema escucharemos el saldo de la cuenta.

    **** Habilitar VoiceMail entre usuarios SIP/IAX2 de a2billing

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    5/10

    Esta es una opcion que no viene por defecto pero que se puede lograr modificando algunos parametros deconfiguracion.

    Si la extension esta no esta registrada se hacen estas modificaciones:

    vi /var/lib/asterisk/agi-bin/libs_a2billing/Class.A2Billing.php

    Buscar:

    } elseif ($k+1 == $sip_buddies+$iax_buddies){$prompt="prepaid-dest-unreachable";$agi-> stream_file($prompt, '#');}

    Reemplazarlo por:

    } elseif ($k+1 == $sip_buddies+$iax_buddies){// Modificado para habilitar voicemail entre sip/iax friends$prompt="prepaid-dest-unreachable";//$agi-> stream_file($prompt, '#');

    $buddy="u".$this->destination;$agi-> exec(VoiceMail,$buddy);}

    Cuando la extension no es contestada buscamos todas las concurrencias (hay dos) para:

    } elseif ($this->dialstatus == "NOANSWER") {$answeredtime=0;

    $agi-> stream_file('prepaid-noanswer', '#');

    Y lo dejamos asi:

    } elseif ($this->dialstatus == "NOANSWER") {$answeredtime=0;// Modificado para permitir VoiceMail entre SIP/IAX friends//$agi-> stream_file('prepaid-noanswer', '#');$buddyu="u".$this->destination;$agi-> exec(VoiceMail,$buddyu);

    Y cuando la extension esta ocupada modificamos de la siguiente manera:

    if ($dialstatus == "BUSY") {$answeredtime=0;

    $agi-> stream_file('prepaid-isbusy', '#');Dejandolo asi:

    if ($dialstatus == "BUSY") {$answeredtime=0;// Modificado para permitir voicemail cuando la extension este ocupada// $agi-> stream_file('prepaid-isbusy', '#');$buddyb="b".$this->destination;$agi-> exec(VoiceMail,$buddyb);

    Luego debemos crear una entrada en/etc/asterisk/voicemail.confpara nuestros usuarios que deben tenervoicemail en el contexto respectivo:

    [default]666 => 666,RazaMetaL,[email protected],|sayduration=yes|

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    6/10

    forcename=no|forcename=yes|forcegreetings=no|review=yes|operator=yes

    ACTUALIZACION: Utilizando realtime.

    Es cierto que modificar a mano el archivo /etc/asterisk/voicemail.conf cada vez que creas un usuario se tornatedioso :(, pero existe una solucin y esta es utilizando realtime que no es mas que ingresar los usuarios enuna tabla en la base de datos de a2billing, as cuando creamos un usuario este tiene por defecto habilitado elvoicemail. El procedimiento anterior de reemplazar las lneas en el archivo Class.A2Billing.php tambin esnecesario para este mtodo.

    Que es lo que debemos hacer?

    1.- Aadir la tabla voicemail_users en la base de datos mya2billing:

    CREATE TABLE `voicemail_users` (`uniqueid` int(11) NOT NULL auto_increment,`customer_id` int(11) NOT NULL default '0',`context` varchar(50) NOT NULL default '',`mailbox` varchar(15) NOT NULL default '0',`password` varchar(4) NOT NULL default '1234',

    `fullname` varchar(50) NOT NULL default '',`email` varchar(50) NOT NULL default '',`pager` varchar(50) NOT NULL default '',`stamp` timestamp(14) NOT NULL,PRIMARY KEY (`uniqueid`),KEY `mailbox_context` (`mailbox`,`context`)) TYPE=MyISAM;

    Para hacerlo mas sencillo, copiamos las lneas del prrafo anterior en un archivo que llamaremosvoicemail_users.sql y luego ejecutamos:

    mysql -u a2billinguser -pa2billing mya2billing < voicemail_users.sql

    2.- Debemos sincronizar las tablas de la base de datos mya2billing para que esta contenga los datos para elfuncionamiento del voicemail de los usuarios, y esto hay que hacerlo con una tarea programada, yo lo estoyhaciendo cada 5 minutos.

    Esta es la sentencia que debe ser ejecutada cada 5 minutos por el usuario a2billinguser en la base de datosmya2billing:

    truncate table voicemail_users;insert into voicemail_users(customer_id,context,mailbox ,fullname,email)select A.id_cc_card,'default',A.name, concat(B.lastname,'',B.firstname),B.email from cc_sip_buddies A,cc_card B where A.id_cc_card

    =B.id ;Para hacerlo mas sencillo creamos un archivo de texto en /etc/asterisk llamado a2billingvoicemail.sql quecontenga las lneas del prrafo anterior, luego creamos un archivo en /etc/asterisk llamadoa2billingvoicemail.sh que debe contener esto:

    mysql -u a2billinguser -pa2billing mya2billing mysql,mya2billing,voicemail_users

    Y en /etc/asterisk/res_mysql.conf :

    [general]dbhost = 127.0.0.1dbname = mya2billingdbuser = a2billinguserdbpass = a2billingdbport = 3306;dbsock = /tmp/mysql.sock

    4.- Configuramos nuestro contexto para a2billing para que luzca de esta manera:

    exten => _X.,1,GotoIf($["${EXTEN}" = "9999"]? 4)exten => _X.,2,DeadAGI(a2billing.php|1)exten => _X.,3,Hangupexten => _X.,4,VoicemailMain()exten => _X.,5,Hangup

    Esto quiere decir que si un usuario digita 9999 va a ir a su centro de mensajes. La contrasea por defecto paracada usuario es 1234, l deber cambiarla desde el mismo centro de mensajes de voz.

    **** A2billing esta facturando la llamada desde que el telefono timbra y no desde que contestan.Por defecto a2billing.conf muestra el consumo desde que marcas el numero hasta que cuelgas, muchos aligual que yo deben querer que sea facturado solo el tiempo hablado, es decir desde que la llamada es

    contestada. Esto se logra ademas modificando el parmetro dialcommand_param para agregar la letra C

    dialcommand_param="|90|CrHL(%timeout%:61000:0000)"

    Tambien debemos decirle a a2billing que no se encargue de contestar la llamada y quitar el comando Answeren el contexto a2billing:

    En /etc/asterisk/a2billing.confbuscamos el parametro answer_call en la seccion agi-confy lo seteamos enNO:

    answer_call=no

    En /etc/asterisk/extensions.confmodificamos el contexto a2billing para que luzca asi:

    [a2billing]exten => _X.,1,DeadAGI(a2billing.php|1)exten => _X.,5,Hangup

    **** La interfaz de mis usuarios sale en ingles, cuando doy cliente en la bandera de Espana el lenguajeno cambia. Estoy usando Debian.Lo solucionamos de la siguiente manera:

    aptitude install php-gettextdpkg-reconfigure locales

    Seleccionamos:

    [X] es_ES ISO-8859-1 [X] es_ES.UTF-8 UTF-8

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    8/10

    Y luego:

    /etc/init.d/apache2 restart

    Lo que sucede es que Debian instala solo el local que se define en la instalacion, si instalamos el sistema baseen espanol no habria este problema.

    **** Aumentar decimales en el registro de llamadasPor defecto la interfaz de usuario de A2billing muestra solo 2 decimales, asi que si aun cliente le dices que el

    minuto es a 0.055 el va a mirar en su interfaz 0.06 y a la larga esto va a causar molestias en el usuario.Para solucionarlo se debe proceder de la siguiente manera:Editar /var/www/html/consumos/lib/Misc.php en la linea 77:

    function display_2dec($var){echo number_format($var,2);}

    Debe quedar asi:

    function display_2dec($var){

    echo number_format($var,4);}

    **** Si tengo poco saldo y hago una llamada a2billing permite que yo termine la llamada y me da saldoen contraEsto no seria un problema si hay pocos usuarios, pero supongamos que alguien realiza una llamada a undestino que es muy caro y se queda hablando por una hora? Para evitar que esto sucede y que la llamada seacortada cuando al usuario se le termine el saldo debemos modificar el parametro dialcommand_param en/etc/asterisk/a2billing.conf:

    dialcommand_param="|120|HrCRL(%timeout%:61000:00000)"

    **** Permitir a los usuarios loguearse en la interfaz de administracion usando su e-mail o el numero detarjetaEste tip es bastante util puesto que permite usar o bien el numero de tarjeta o la direccion de correoelectronica que el usuario tenga registrada en el sistema.

    Buscar en /var/www/consumos/lib/module.access.php:

    if (strlen($user)==0 || strlen($user)>=20 || strlen($pass)==0 ||strlen($pass)>=20) return false;

    Reemplazar por:

    if (strlen($user)==0 || strlen($user)>=50 || strlen($pass)==0 ||strlen($pass)>=50) return false;

    Buscar:

    $QUERY = "SELECT username, credit, activated, id, id_didgroup, tariff,vat, activatedbyuser FROM cc_card WHERE useralias = '".$user."' ANDuipass = '".$pass."'";

    Reemplazar por:

    $QUERY = "SELECT username, credit, activated, id, id_didgroup, tariff,vat, activatedbyuser FROM cc_card WHERE (email = '".$user."' OR useralias= '".$user."') AND uipass = '".$pass."'";

    No tienes creado el contexto callingcard, deberias tener algo asi en extensions.conf o extensions_custom.confsi usas trixbox:

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    9/10

    [callingcard]exten => _X.,1,Answerexten => _X.,2,Wait,2exten => _X.,3,DeadAGI,a2billing.phpexten => _X.,4,Wait,2exten => _X.,5,Hangup

    Eso se debe a que el script AGI de a2billing no puede ejecutar el comando "reload". En/etc/asterisk/a2billing.conf debes especificar los parametros para la coneccion con la consola de asterisk:

    ;MANAGER CONNECTION PARAMETERSmanager_host = localhostmanager_username = un_usuariomanager_secret = una_contrasena

    Y en /etc/asterisk/manager.conf debe ir una seccion mas o menos asi:

    [un_usuario]secret = una_contrasenadeny=0.0.0.0/0.0.0.0permit=127.0.0.1/255.255.255.0read = system,call,log,verbose,command,agent,userwrite = system,call,log,verbose,command,agent,user

    mire el a2billing.conf en [agi-conf1] y configura asi

    use_dnid = nosay_balance_after_auth = NOsay_timetocall = NO

  • 7/22/2019 Configurar a2billing en Menos de 10 Minutos

    10/10

    Ola consegui instalar y configar el a2billing,

    Solo que cuando llamo a un numero antes me sale el Saldo de mi cuentay despues me pide para marcar el numero seguido *

    Como resolvo isto?

    Revisa a2billing.conf hay una seccion llamada use_dnid la cual debes pasarle la opcion YES.

    ; if YES it will catch the DNID and try to dial it out directly withoutasking for the phonenumber to call; value : YES, NOuse_dnid=YES