Anda di halaman 1dari 44

A2billing

1. Creacion de TRUNKS con todas su especificaciones: en las troncales se crea y asigna el porveedor / ojo el nombre label y Ip provider el es el mismo talcual se llama la troncal en elastix. 2. Creacion de RateCards o tarifas: (se ponen tarifas todos los destinos) se asigna la troncal. Una vez Crados miramos en BROWSERATES y fijamos la tarifas de compra y venta, con sus demas especificaciones. 3. CUSTOMERS: creamos los clientes y definimos datos y conexiones SIP o IAX2. el registro del customer o cliente lo realizamos en Ext.conf o matriz 4. Importante mirar en extension.conf el contexto a2billing con sus especificaciones para que halla comunicacion. (en ext.a2billing copiar noombre contexto pegarlo en ext.conf y los mismo en SIP y en IAX si quiero usar iax) 5. lin de cuenta de usuario es: https://190.85.53.44/a2customer User: CardAlias pass: WebUi pass. 6. Para registrar una cuenta Softphone tenemos encuenta los siguiente parametros del customer.: Display Name: (nombre empresa o persona) User name SIP friend: Secret SIP friend: Autorization Name: no Domain: 190.85.53.44 IP publica o dominio por defecto. www.tesacol.com/voip

---------------------------------------------------------------------------------------------------------------------------Troncales tesacol SIP TESACOL type=friend host=190.85.53.44 fromdomain=190.85.53.44 username=9348243745 fromuser=9348243745 secret=8521431990 canreinvite=yes dtmfmode=rfc2833 sendrpid=yes

trustrpid=yes disallow=all allow=ulaw&alaw authuser=9348243745 auth=md5 insecure=very qualify=yes nat=yes

9348243745:8521431990@190.85.53.44 SIP HAROL type=peer username=tesacol user=tesacol secret=t3s4s0i0 host=69.64.43.6 qualify=yes dtmfmode=rfc2833 disallow=all allow=alaw&ulaw

tesacol:t3s4s0i0@69.64.43.6 VOIPCHEAP type=peer username=tesacol fromuser=tesacol fromdomain=sip.voipcheap.com realm=sip.voipcheap.com secret=t3s42010 host=sip.voipcheap.com canreinvite=no qualify=no insecure=port,invite IAX2 PEER DETAILS host=190.144.241.51

qualify=yes type=peer USER DETAILS context=from-internal host=190.144.241.51 type=user

--------------------------------------------------------------------------------------------------------------------------

Configurar a2billing en menos de 10 minutos


Enviado por RazaMetaL el Mar, 2006-12-12 00:06.

Ya sabemos como instalar a2billing, viene algo que al inicio no se nos hara muy amigable y es configurarlo para 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 de facturacin. Sabemos que puede mostrarnos el consumo monetario de una llamada realizada por alguna de nuestras extensiones (clientes), pero configurarlo desde su amigable interfaz web es algo confuso las primeras veces.

No hay mejor manera de explicar un procedimiento que con la prctica, voy a explicar como lograr que a2billing 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=usuario

type=peer

secret=una-clave

nat=yes

insecure=very

host=sip.proveedorsip.com

fromuser=usuario

fromdomain=sip.proveedorsip.com

dtmfmode=info

disallow=all

canreinvite=no

authuser=usuario

allow=g723

allow=g729

allow=alaw

El procedimiento:

1.- Crear un proveedor:

TRUNK --> Create Provider

He 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 para llamadas internacionales, otro para llamadas locales, etc. Estos trunks pueden usar el mismo proveedor pero se diferencian entre ellos por los dgitos que se agregan o eliminan al marcado que envia el cliente, as en este ejemplo debemos agregar 00 para llamadas inernacionales; agregar 5935(yo estoy en Manab) para las llamadas locales.

Se ingresan los detalles de la troncal, por ejemplo que prefijo se debe agregar a cada llamada que por esta troncal 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 de marcado vara entre los diferentes proveedores, otros requieren que envies un 011 00 antes del codigo de 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

ProveedorSIP

LABEL

internacional-proveedorsip

ADD PREFIX (en este caso no es necesario agregar prefijos)

REMOVE PREFIX

00

PROVIDER TECH

SIP

PROVIDER IP proveedorsip

ADDITIONAL PARAMETER

FAILOVER TRUNK

(no es necesario por ahora)

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

3.- Creamos un grupo de tarifas (TariffGroup)

RATECARD --> Create TariffGroup

TARIFFGROUPNAME

Oro

LC TYPE

LCR

REMOVE INTER PREFIX

NO

Podemos tener varios grupos de tarifas que contendran diferentes precios, por ejemplo podemos tener 3 grupos de tarifas Oro, Plata y Bronce. En Oro van tarifas bien bajas, y en Bronce las altas. Los grupos de tarifas contienen las Ratecard y estas ltimas los precios de los destinos. Los grupos de tarifas pueden tener tambien LCR o LCD.

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

4.- Crear RATECARD

RATECARD --> Create new Ratecard

TARIFFNAME Internacional

START DATE

TRUNK

internacional-proveedorsip

DESCRIPTION

Tarifas internacionales

DNID 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

RATECARD

internacional

DIALPREFIX

001

DESTINATION

Estados Unidos

BUYING RATE

0.05

BUYRATE MIN DURATION 6

BUYRATE BILLING BLOCK 30

SELLING RATE

0.10

SELLRATE MIN DURATION 6

SELLRATE BILLING BLOCK 30

CONNECT CHARGE

DISCONNECT CHARGE

TRUNK

internaciona-proveedorsip

Seguimos el procedimiento para cada destino que queramos agregar. Hacerlo para todos los paises del mundo sera bastante tedios, para ello existe la opcion de importar un archivo separado por comas (CSV) que hallamos 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 123

WEBui PASSWORD 123

BALANCE

10

LANGUAGE SPANISH

TARIFFGROUP

Oro

SIMULTANEOUS ACCESS INDIVIDUAL ACCESS

CURRENCY U.S. Dollar (USD)

LASTNAME

Apellido

FIRSTNAME Nombre

EMAIL

email@mail.da.ru

ADDRESS

Direccion

CITY

Ciudad

STATE/PROVINCE

Provincia

COUNTRY

Pas

PHONENUMBER

Telefono

FAXNUMBER Fax

SIP ACCOUNT

Yes

IAX ACCOUNT

Yes

A2billing nos genera automticamente el numero de tarjeta, si quieremos darle a nuestro usuario un nmero que sea ms fcil de recordar para el podemos usar el campo CARD ALIAS. En este ejemplo el usuario tiene un 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 y dando 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

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 en el 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 de revisarla, puede que algo que necesiten hacer y no sepan como lograrlo ya este publicado en esta parte

**** Modificar el campo Card Number del Cliente

Al editar un cliente no puedes modificar el nmero de tarjeta porque este campo esta protegido contra escritura, esto implica que una llamada entre usuarios del mismo servidor pueda ser hecha entre nmeros de tarjeta y no entre alias de tarjetas, los nmeros que se aprenden mis usuarios son los alias porque son ms sencillos 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 readonly en el archivo /var/www/ a2billing//Public/form_data/FG_var_card.inc la lnea en mencin nos quedara mas o menos 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 esto realizamos el siguiente hack:

cd /var/lib/asterisk/agi-bin

cp a2billing.php balance.php

cp -r libs_a2billing balance

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

cd /etc/asterisk/

cp a2billing.conf balance.conf

Editamos las siguientes opciones en balance.conf

say_balance_after_auth=YES

use_dnid=NO

answer_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 saldo

exten => *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

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

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.conf para nuestros usuarios que deben tener voicemail en el contexto respectivo:

[default]

666 => 666,RazaMetaL,razametal@linuxmail.com,|sayduration=yes|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 torna tedioso , pero existe una solucin y esta es utilizando realtime que no es mas que ingresar los usuarios en una tabla en la base de datos de a2billing, as cuando creamos un usuario este tiene por defecto habilitado el voicemail. El procedimiento anterior de reemplazar las lneas en el archivo Class.A2Billing.php tambin es necesario 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 llamaremos voicemail_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 el funcionamiento del voicemail de los usuarios, y esto hay que hacerlo con una tarea programada, yo lo estoy haciendo cada 5 minutos.

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

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 que contenga las lneas del prrafo anterior, luego creamos un archivo en /etc/asterisk llamado a2billingvoicemail.sh que debe contener esto:

mysql -u a2billinguser -pa2billing mya2billing < /etc/asterisk/a2billingvoicemail.sql

Le damos permisos de ejecucin:

chmod a+x a2billingvoicemail.sh

Y programamos la tarea para que se ejecute cada 5 minutos:

vi /etc/crontab

Agregamos las siguientes lneas:

# Sincronizar mysql cada 5 minutos

5 * * * * /etc/asterisk/a2billingvoicemail.sh

3.- Configurar realtime en /etc/asterisk/extconfig.conf debemos agregar:

voicemail =>mysql,mya2billing,voicemail_users

Y en /etc/asterisk/res_mysql.conf :

[general]

dbhost = 127.0.0.1

dbname = mya2billing

dbuser = a2billinguser

dbpass = a2billing

dbport = 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,Hangup

exten => _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 para cada 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 al igual 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 Answer en el contexto a2billing:

En /etc/asterisk/a2billing.conf buscamos el parametro answer_call en la seccion agi-conf y lo seteamos en NO:

answer_call=no

En /etc/asterisk/extensions.conf modificamos 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 lenguaje no cambia. Estoy usando Debian.

Lo solucionamos de la siguiente manera:

aptitude install php-gettext

dpkg-reconfigure locales

Seleccionamos:

[X] es_ES ISO-8859-1

[X] es_ES.UTF-8 UTF-8

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 base en espanol no habria este problema.

**** Aumentar decimales en el registro de llamadas

Por 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 saldo en contra

Esto no seria un problema si hay pocos usuarios, pero supongamos que alguien realiza una llamada a un destino que es muy caro y se queda hablando por una hora? Para evitar que esto sucede y que la llamada sea cortada 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 de tarjeta

Este tip es bastante util puesto que permite usar o bien el numero de tarjeta o la direccion de correo electronica 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."' AND uipass = '".$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."'";

Configurar a2billing en menos de 10 minutos

Enviado por RazaMetaL el Mar, 2006-12-12 00:06.

Ya sabemos como instalar a2billing, viene algo que al inicio no se nos hara muy amigable y es configurarlo para 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 de facturacin. Sabemos que puede mostrarnos el consumo monetario de una llamada realizada por alguna de nuestras extensiones (clientes), pero configurarlo desde su amigable interfaz web es algo confuso las primeras veces.

No hay mejor manera de explicar un procedimiento que con la prctica, voy a explicar como lograr que a2billing 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=usuario

type=peer

secret=una-clave

nat=yes

insecure=very

host=sip.proveedorsip.com

fromuser=usuario

fromdomain=sip.proveedorsip.com

dtmfmode=info

disallow=all

canreinvite=no

authuser=usuario

allow=g723

allow=g729

allow=alaw

El procedimiento:

1.- Crear un proveedor:

TRUNK --> Create Provider

He 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 para llamadas internacionales, otro para llamadas locales, etc. Estos trunks pueden usar el mismo proveedor pero se diferencian entre ellos por los dgitos que se agregan o eliminan al marcado que envia el cliente, as en este ejemplo debemos agregar 00 para llamadas inernacionales; agregar 5935(yo estoy en Manab) para las llamadas locales.

Se ingresan los detalles de la troncal, por ejemplo que prefijo se debe agregar a cada llamada que por esta troncal 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 de marcado vara entre los diferentes proveedores, otros requieren que envies un 011 00 antes del codigo de 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

ProveedorSIP

LABEL

internacional-proveedorsip

ADD PREFIX (en este caso no es necesario agregar prefijos)

REMOVE PREFIX

00

PROVIDER TECH

SIP

PROVIDER IP proveedorsip

ADDITIONAL PARAMETER

FAILOVER TRUNK

(no es necesario por ahora)

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

3.- Creamos un grupo de tarifas (TariffGroup)

RATECARD --> Create TariffGroup

TARIFFGROUPNAME

Oro

LC TYPE

LCR

REMOVE INTER PREFIX

NO

Podemos tener varios grupos de tarifas que contendran diferentes precios, por ejemplo podemos tener 3 grupos de tarifas Oro, Plata y Bronce. En Oro van tarifas bien bajas, y en Bronce las altas. Los grupos de tarifas contienen las Ratecard y estas ltimas los precios de los destinos. Los grupos de tarifas pueden tener tambien LCR o LCD.

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

4.- Crear RATECARD

RATECARD --> Create new Ratecard

TARIFFNAME Internacional

START DATE

TRUNK

internacional-proveedorsip

DESCRIPTION

Tarifas internacionales

DNID 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

RATECARD

internacional

DIALPREFIX

001

DESTINATION

Estados Unidos

BUYING RATE

0.05

BUYRATE MIN DURATION 6

BUYRATE BILLING BLOCK 30

SELLING RATE

0.10

SELLRATE MIN DURATION 6

SELLRATE BILLING BLOCK 30

CONNECT CHARGE

DISCONNECT CHARGE

TRUNK

internaciona-proveedorsip

Seguimos el procedimiento para cada destino que queramos agregar. Hacerlo para todos los paises del mundo sera bastante tedios, para ello existe la opcion de importar un archivo separado por comas (CSV) que hallamos 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 123

WEBui PASSWORD 123

BALANCE

10

LANGUAGE SPANISH

TARIFFGROUP

Oro

SIMULTANEOUS ACCESS INDIVIDUAL ACCESS

CURRENCY U.S. Dollar (USD)

LASTNAME

Apellido

FIRSTNAME Nombre

EMAIL

email@mail.da.ru

ADDRESS

Direccion

CITY

Ciudad

STATE/PROVINCE

Provincia

COUNTRY

Pas

PHONENUMBER

Telefono

FAXNUMBER Fax

SIP ACCOUNT

Yes

IAX ACCOUNT

Yes

A2billing nos genera automticamente el numero de tarjeta, si quieremos darle a nuestro usuario un nmero que sea ms fcil de recordar para el podemos usar el campo CARD ALIAS. En este ejemplo el usuario tiene un 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 y dando 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

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 en el 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 de revisarla, puede que algo que necesiten hacer y no sepan como lograrlo ya este publicado en esta parte

**** Modificar el campo Card Number del Cliente

Al editar un cliente no puedes modificar el nmero de tarjeta porque este campo esta protegido contra escritura, esto implica que una llamada entre usuarios del mismo servidor pueda ser hecha entre nmeros de tarjeta y no entre alias de tarjetas, los nmeros que se aprenden mis usuarios son los alias porque son ms sencillos 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 readonly en el archivo /var/www/ a2billing//Public/form_data/FG_var_card.inc la lnea en mencin nos quedara mas o menos 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 esto realizamos el siguiente hack:

cd /var/lib/asterisk/agi-bin

cp a2billing.php balance.php

cp -r libs_a2billing balance

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

cd /etc/asterisk/

cp a2billing.conf balance.conf

Editamos las siguientes opciones en balance.conf

say_balance_after_auth=YES

use_dnid=NO

answer_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 saldo

exten => *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

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

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.conf para nuestros usuarios que deben tener voicemail en el contexto respectivo:

[default]

666 => 666,RazaMetaL,razametal@linuxmail.com,|sayduration=yes|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 torna tedioso , pero existe una solucin y esta es utilizando realtime que no es mas que ingresar los usuarios en una tabla en la base de datos de a2billing, as cuando creamos un usuario este tiene por defecto habilitado el voicemail. El procedimiento anterior de reemplazar las lneas en el archivo Class.A2Billing.php tambin es necesario 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 llamaremos voicemail_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 el funcionamiento del voicemail de los usuarios, y esto hay que hacerlo con una tarea programada, yo lo estoy haciendo cada 5 minutos.

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

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 que contenga las lneas del prrafo anterior, luego creamos un archivo en /etc/asterisk llamado a2billingvoicemail.sh que debe contener esto:

mysql -u a2billinguser -pa2billing mya2billing < /etc/asterisk/a2billingvoicemail.sql

Le damos permisos de ejecucin:

chmod a+x a2billingvoicemail.sh

Y programamos la tarea para que se ejecute cada 5 minutos:

vi /etc/crontab

Agregamos las siguientes lneas:

# Sincronizar mysql cada 5 minutos

5 * * * * /etc/asterisk/a2billingvoicemail.sh

3.- Configurar realtime en /etc/asterisk/extconfig.conf debemos agregar:

voicemail =>mysql,mya2billing,voicemail_users

Y en /etc/asterisk/res_mysql.conf :

[general]

dbhost = 127.0.0.1

dbname = mya2billing

dbuser = a2billinguser

dbpass = a2billing

dbport = 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,Hangup

exten => _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 para cada 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 al igual 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 Answer en el contexto a2billing:

En /etc/asterisk/a2billing.conf buscamos el parametro answer_call en la seccion agi-conf y lo seteamos en NO:

answer_call=no

En /etc/asterisk/extensions.conf modificamos 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 lenguaje no cambia. Estoy usando Debian.

Lo solucionamos de la siguiente manera:

aptitude install php-gettext

dpkg-reconfigure locales

Seleccionamos:

[X] es_ES ISO-8859-1

[X] es_ES.UTF-8 UTF-8

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 base en espanol no habria este problema.

**** Aumentar decimales en el registro de llamadas

Por 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 saldo en contra

Esto no seria un problema si hay pocos usuarios, pero supongamos que alguien realiza una llamada a un destino que es muy caro y se queda hablando por una hora? Para evitar que esto sucede y que la llamada sea cortada 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 de tarjeta

Este tip es bastante util puesto que permite usar o bien el numero de tarjeta o la direccion de correo electronica 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."' AND uipass = '".$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."'"; -----------------------------------------------------------------------------------------------------------------Tips: * Al editar un cliente no puedes modificar el nmero de tarjeta porque este campo esta protegido contra escritura, esto implica que una llamada entre usuarios del mismo servidor pueda ser hecha entre nmeros de tarjeta y no entre alias de tarjetas, los nmeros que se aprenden mis usuarios son los alias porque son ms sencillos 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 readonly en el archivo /var/www/a2billing//Public/form_data/FG_var_card.inc la lnea en mencin nos quedara mas o menos as: Antes: "size=20 $maxi readonly maxlength=40", Despues: "size=20 $maxi maxlength=40", * Por defecto a2billing.conf muestra el consumo desde que marcas el numero hasta que cuelgas, muchos al igual que yo deben querer que sea facturado solo el tiempo hablado, es decir desde que la llamada es contestada. Esto se logra modificando el parmetro dialcommand_param para agregar la letra C dialcommand_param="|90|HLrC(%timeout%:61000:50000)" * Muchos clientes deben querer porder saber su saldo en dinero sin necesidad de tener una computadora cerca, para esto realizamos el siguiente hack: cd /var/lib/asterisk/agi-bin cp a2billing.php balance.php cp -r libs_a2billing balance Editamos balance.php y cambiamos todas las referencias de libs_a2billing a balance, de igual manera hacemos con /var/lib/asterisk/agi-bin/balance/Class.A2Billing.php y reemplazamos a2billing.conf por balance.conf cd /etc/asterisk/ 5 cp a2billing.conf balance.conf Editamos las siguientes opciones en balance.conf say_balance_after_auth=YES use_dnid=NO answer_call=YES Finalmente se agrega la siguiente linea en extensions.conf en el contexto que usamos para a2billing: 7. Add Extentenstion for balance exten => *0,1,DeadAGI(balance.php) Al marcar *0 desde cualquier equipo registrado en el sistema escucharemos el saldo de la cuenta.

Preparar Elastix 2 para que funcione A2Billing hace 1 Ao, 4 Meses

Karma: 1

Elastix 2.0.3 viene con; Asterisk2Billing - Version 1.3.0 (Yellowjacket) - Release : July 2007, que es el mdulo para administrar los servicios de venta de telefona IP, en el controlamos; destinos, costos, ganancias, autenticacin de nuestros clientes, etc, una vez sabiendo para que sirve cada men uno debera configurarlo y ocuparlo, pero eso es bastante difcil como muchos se habrn dado cuenta, por que pasan cosas como que; los clientes SIP o IAX2 simplemente no se registran o si se registran el sistema no encuentra por donde dirigir las llamadas, etc. Eso es por que hay editar unos archivos que segn yo deberan venir ya editados en Elastix y no me explico porque no es as! o por que no sale esta informacin clara en un wiki o algo! Primero necesitamos asegurarnos de que nuestra troncal est funcionando por lo tanto como requerimiento mnimo: tener configurado en PBX de Elastix 1Trunk, 1Outbound Routes y una extensin para llamar atravez de la troncal y probar que se pueden hacer llamadas, luego procedemos a editar algunos archivos de configuracin para esto ocupe PBX, Tools, Asterisk File Editor; 1)a2billing.conf cambiar la moneda predeterminada que es usd a la que utilicemos; donde dice base_currency = usd, por ejemplo yo le puse la moneda de Chile base_currency = clp. *Hay una grabacin que pide el nmero a llamar seguido de #, es molesta as que la quitamos; cambiar; use_dnid = NO, dejndolo en use_dnid = YES. *Esto acelera un poco el marcado debug=1 cambiar a debug = 0. *Se supone que esto arregla una incompatibilidad pero realmente no he visto que haga algo asterisk_version = 1_2 cambiar a la versin que tengas en mi caso asterisk_version = 1_6. *number_try=3 nmero de llamadas que el usuario puede hacer desde que marca, si no es 1 se supone (nunca lo he escuchado) que despus de terminada la llama una grabadora te pregunta a que otro nmero marcar, lo dejare en 1, number_try = 1. *Otra grabacin dice el dinero que queda y tienes que esperar a que termine para que recin comience la llamada, para evitar eso editar; say_balance_after_auth = YES cambiarlo a say_balance_after_auth = NO. *Puede que tambin te interese quitar el aviso de cuanto tiempo te queda para llamar say_timetocall = NO.

2)sip_custom.conf al agregarle #include additional_a2billing_sip.conf hacemos que Asterisk reconozca los clientes SIP de A2Billing. 3)iax_custom.conf al agregarle; #include additional_a2billing_iax.conf hacemos que Asterisk reconozca los clientes IAX2 de A2Billing. 4)extensions_custom.conf al agregarle; #include extensions_a2billing.conf hace que A2billing pueda tener acceso a las lneas troncales. 5)extensions_a2billing.conf donde dice (a2billing.php|1) cambiarlo por (a2billing.php,1), esto soluciona el problema de que las llamadas no encuentran la ruta de salida. Nota: Supuestamente en vez de cambiar lo que dice el paso 5 uno debera editar a2billing.conf donde dice asterisk_version y dejarlo con la versin correspondiente, en nuestro caso asterisk_version = 1_6 y con eso se soluciona la incompatibilidad, pero no funciona!, No veo que ocurra algn cambio, debe ser un bug dice ac www.asterisk2billing.org/cgi-bin/trac.cgi/ticket/853 por lo que entiendo recin lo arreglaron en alguna versin posterior, as que es absolutamente necesario el paso 5. Eso es todo, con esos "simples" pasos hemos integrado nuestro sistema de facturacin de llamadas en Elastix.