Instalación de A2Billing 2.2.0 en CentOS 7.1 64bit

A2billing es un clase 4 y clase 5 softswitch para Asterisk PBX distribuido bajo una licencia Open Source (GNU GPL) y basado en MySQL para las base de datos y PHP como lenguaje de programación.

Se puede utilizar:

  • Como sistema de tarjetas telefónicas a través de números de acceso telefónicos;

  • Como sistema de venta de trafico telefónico al por mayor (Wholesale)

  • Como sistema de venta de números geográficos (DID)

  • Como sistema para la gestión de revendedores

Para la instalación de Asterisk 11.X en CentOS 7 pueden seguir esta guía, actualizando oportunamente las versiones de los programas que aparecen.

A2billing requiere por lo menos la versión 5.3 de PHP. En la versión de CentOS 7.1 está disponible la versión 5.4 pues se instalará junto al servidor Web Apache y el modulo SSL (para conexiones seguras hacia el servidor Web):

yum install php php-gd php-mysql php-process httpd mod_ssl php-cli php-soap php-xml php-mcrypt -y

Si se va a utilizar el acceso cifrado al servidor Web, hay que modificar el archivo de configuración de apache para evitar que sea vulnerable a POODLE que aprovecha un error en el protocolo SSLv3. Se abre el archivo de configuración de mod_ssl:

nano +75 /etc/httpd/conf.d/ssl.conf

se modifica la línea para que quede:

SSLProtocol all -SSLv2 -SSLv3

Se guardan los cambios.

Terminada esta operación, se configura la zona horaria en el archivo de configuración de PHP (php.ini)

nano +878 /etc/php.ini

Se modifica la línea para que quede (personalizar con su zona horaria):

date.timezone = America/Bogota

En el mismo archivo se busca esta línea:

upload_max_filesize = 2M

y se modifica para que quede:

upload_max_filesize = 8M

De esta forma se podrán cargar los archivos de tarifas que tengan un tamaño de hasta de 8 MegaBytes

Siempre en el mismo archivo, se busca esta línea:

error_reporting = E_ALL & ~E_DEPRECATED

y se modifica para que quede:

error_reporting = E_ALL & ~E_NOTICE

Se guardan los cambios y se descarga la versión 2.2.0 de A2Billing:

cd /usr/local/src

wget https://github.com/Star2Billing/a2billing/archive/v2.2.0.tar.gz

Se descomprime:

tar -xf v2.2.0.tar.gz

se renombra la carpeta creada:

mv a2billing-2.2.0 a2billing

cd a2billing

A partir de la versión 2.1.1 se utiliza Composer para instalar toda las dependencias; como algunas se instalan utilizando el programa GIT, primero se instala este paquete:

yum install git -y

Para una correcta instalación de adodb, se modifica en este archivo:

nano composer.json

La línea:

"adodb/adodb-php": "dev-master",

para que quede

"adodb/adodb-php": "v5.20.0",

Se guardan los cambios y se continua con:

nano composer.lock

se cambia la línea:

"version": "dev-master",

para que quede:

"version": "v5.20.0",

Luego se utiliza Composer para instalar las dependencias:

curl -sS https://getcomposer.org/installer | php
php composer.phar update
php composer.phar install

Se inicia MariaDB y se pone en seguridad:

systemctl start mariadb.service
systemctl enable mariadb.service
mysql_secure_installation

a lo largo de la puesta en seguridad se configura la contraseña del usuario root de MariaDB (en este caso sesamo). Luego se accede al cliente:

mysql -u root -psesamo

se crea la base de datos a2billing:

MariaDB> create database a2billing;

Query OK, 1 row affected (0.00 sec)

se otorgan los permisos de acceso a la base de datos creada al usuario a2user identificado con la contraseña sesamo:

MariaDB> GRANT ALL PRIVILEGES ON a2billing.* TO 'a2user'@'localhost' IDENTIFIED BY 'sesamo';

Query OK, 0 rows affected (0.00 sec)

se actualizan los permisos:

MariaDB> flush privileges;

Query OK, 0 rows affected (0.00 sec)

se sale del cliente MySQL:

MariaDB> quit

Bye

Se crean las tablas en la base de datos a2billing utilizando el script presente en la siguiente carpeta:

cd DataBase/mysql-5.x/

se ejecuta:

./install-db.sh

Se insertan los datos como aparecen a seguir:

Database Name: a2billing

Hostname: localhost

Username: root

Password: sesamo

Se instalan las locuciones audio distribuidas con el programa (ingles, francés, español, portugués y ruso):

cd /usr/local/src/a2billing/addons/sounds/

utilizando el siguiente script:

./install_a2b_sounds.sh

Se continua con la instalación copiando el archivo de configuración de a2billing en la carpeta /etc:

cp /usr/local/src/a2billing/a2billing.conf /etc/

se abre con el editor:

nano /etc/a2billing.conf

se modifican estas líneas:

[database]
hostname = localhost
port =
user = a2billing_dbuser
password = a2billing_dbpassword
dbname = a2billing_dbname
; dbtype setting can either be mysql or postgres
dbtype = mysql

para que queden:

[database]
hostname = localhost
port = 3306
user = a2user
password = sesamo
dbname = a2billing
dbtype = mysql

Se guardan los cambios.

Por defecto A2billing trabaja con Asterisk en Realtime, es decir que las extensiones SIP y IAX2 se guardan en la base de datos a2billing y Asterisk accede a ellas a través de la configuración del modulo de Realtime. Existe también la posibilidad de guardarlas en un archivo de texto. Para este tipo de configuración se crean dos archivos que son los que a2billing utilizará para guardar las extensiones SIP y IAX2:

touch /etc/asterisk/additional_a2billing_iax.conf
touch /etc/asterisk/additional_a2billing_sip.conf

se asignan los permisos de escritura/lectura para estos dos archivos al usuario y grupo apache, es decir al servidor Web:

chown apache:apache /etc/asterisk/additional_a2billing_iax.conf
chown apache:apache /etc/asterisk/additional_a2billing_sip.conf

A2Billing para recargar la configuración de Asterisk (en el caso que las extensiones se guarden en los archivos que se acaban de crear) se apoya al AMI (Asterisk Manager Interface) de la PBX. Es por eso que hay que configurar el archivo manager.conf. Se abre:

nano /etc/asterisk/manager.conf

Se cambian las siguientes tres líneas:

enabled = no
;allowmultiplelogin = yes
;displayconnects = yes

para que queden:

enabled=yes
allowmultiplelogin = yes
dislplayconnects=yes

A2billing, para conectarse al AMI de Asterisk, se instala con un usuario y una contraseña predefinidos. Por este motivo al final del archivo se añaden las siguientes líneas:

[myasterisk]
secret=mycode
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.255
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate

Se guardan los cambios y se continua con los script AGI presentes en el paquete de A2Billing. Uno se utiliza para realizar las llamadas (a2billing.php) y el segundo para monitorear el servidor (a2billing_monitoring.php). Se entra en la carpeta que contiene los AGI:

cd /usr/local/src/a2billing/AGI

se crean dos enlaces simbólicos de los dos AGI en la carpeta /var/lib/asterisk/agi-bin donde Asterisk busca los AGI que se ejecuten:

ln -s /usr/local/src/a2billing/AGI/a2billing.php /var/lib/asterisk/agi-bin/a2billing.php
ln -s /usr/local/src/a2billing/AGI/a2billing_monitoring.php /var/lib/asterisk/agi-bin/a2billing_monitoring.php

Como los AGI se apoyan en una serie de librerías contenidas en la carpeta /lib, se crea un enlace simbólico también a esta carpeta:

ln -s /usr/local/src/a2billing/AGI/lib /var/lib/asterisk/agi-bin/lib

Se vuelven ejecutables los dos archivos:

chmod +x /var/lib/asterisk/agi-bin/a2billing.php
chmod +x /var/lib/asterisk/agi-bin/a2billing_monitoring.php

Una vez terminada esta parte se crean una series de carpetas. La primera es donde se instalará la parte web de A2Billing:

mkdir /var/www/html/a2billing

La segunda donde se guardarán los archivos temporales y los script de A2Billing:

mkdir -p /var/lib/a2billing/script

la tercera donde se guardará el proceso del servicio de callback:

mkdir -p /var/run/a2billing

Ahora ya se puede crear un enlace simbólico a las carpetas que se necesitan para la parte Web de A2billing que son:

  • admin (para la conexión de los administradores)

  • customer (para la conexión de los clientes)

  • agent (para la conexión de los agentes/revendedores)

  • common (común a la demás tres)

ln -s /usr/local/src/a2billing/admin/ /var/www/html/a2billing/admin
ln -s /usr/local/src/a2billing/agent/ /var/www/html/a2billing/agent
ln -s /usr/local/src/a2billing/customer/ /var/www/html/a2billing/customer
ln -s /usr/local/src/a2billing/common/ /var/www/html/a2billing/common

Se cambian los permisos en estas tres carpetas donde se guardarán los archivos temporales para cada tipo de usuario:

chmod 775 /usr/local/src/a2billing/admin/templates_c
chmod 775 /usr/local/src/a2billing/customer/templates_c
chmod 775 /usr/local/src/a2billing/agent/templates_c

Se cambia el usuario y grupo que tiene acceso a todas las carpetas creadas (el servidor Web Apache):

chown -Rf apache:apache /var/www/html
chown -Rf apache:apache /var/www/html/a2billing/admin/
chown -Rf apache:apache /var/www/html/a2billing/agent/
chown -Rf apache:apache /var/www/html/a2billing/customer/
chown -Rf apache:apache /var/www/html/a2billing/common/

Los registros de las actividades de A2Billing se guardan en una serie de archivos que hay que crear antes de acceder por primera vez a la pagina de administración. Primero se crea la carpeta:

mkdir /var/log/a2billing

luego los archivos:

cd /var/log/a2billing

touch cront_a2b_alarm.log cront_a2b_autorefill.log cront_a2b_batch_process.log \
cront_a2b_archive_data.log cront_a2b_bill_diduse.log cront_a2b_subscription_fee.log \
cront_a2b_currency_update.log cront_a2b_invoice.log cront_a2b_check_account.log \
a2billing_paypal.log a2billing_epayment.log a2billing_api_ecommerce_request.log \
a2billing_api_callback_request.log a2billing_api_card.log a2billing_agi.log

Se cambian los permisos de los archivos creados:

chown apache:apache *

A2biblling necesita que se ejecuten una serie de script para monitorear el sistema y para elaborar algunas funciones (ejemplo: pagos, facturas, etc.). Estos script se añaden al cron del sistema:

crontab -e

Se pega el siguiente bloque de líneas:

# A2Billing
# Para actualizar la tasa de cambio de las monedas
0 6 * * * php /usr/local/src/a2billing/Cronjobs/currencies_update_yahoo.php
# Para el pago se servicios subscritos
0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_subscription_fee.php
# Para notificaciones cuando el credito del cliente es más bajo de lo indicado
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_notify_account.php
# Para el pago de los numeros geograficos asociados a los clientes
0 2 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_bill_diduse.php
# Para el pago de servicios periódicos
0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_process.php
# Para la generación de las facturas de los clientes
0 6 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_billing.php
# Para la generación de llamadas automáticas utilizadas en las campañas
# */5 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_batch_autodialer.php
# Para la gestión de las alarmas que se pueden configurar en A2Billing
0 * * * * php /usr/local/src/a2billing/Cronjobs/a2billing_alarm.php
# Para archivar los datos de las llamadas más viejos de lo indicado en la configuración de A2Billing
0 12 * * * php /usr/local/src/a2billing/Cronjobs/a2billing_archive_data_cront.php
# Para recargar el crédito de un cliente en automático
0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_autorefill.php

Se deja comentada la línea con a2billing_batch_autodialer.php ya que no se van a utilizar las campañas de llamadas (funcionalidad declarada obsoleta por los desarrolladores). Se guardan las modificaciones e se reinicia Cron:

systemctl restart crond

Se guardan los cambiosy se pasa a la configuración de Asterisk. Primero se modifica el archivo sip.conf:

nano /etc/asterisk/sip.conf

después de esta línea:

; jblog = no                  ; Enables jitterbuffer frame logging. Defaults to "no".

Se añade:

externaddr=IPPublica
localnet=10.128.178.0/255.255.255.0

en la primera línea se pone la IP publica del servidor y en la segunda la ip privada utilizando la misma sintaxis indicada en el parámetro de ejemplo.

Siempre en el mismo archivo se añaden los datos para configurar las troncales de los proveedores que se utilizarán para sacar las llamadas. Un ejemplo de troncal con autenticación de usuario y contraseña:

[proveedor]
type=peer
port=5060
host=sip.proveedor.com
defaultuser=usuario
fromuser=usuario
secret=contraseña
dtmfmode=rfc2833
disallow=all
context=from-trunk
canreinvite=no
allow=ulaw
allow=alaw
qualify=yes

Para terminar, se incluye el archivo que se ha creado en el primer párrafo y que contendrá las extensiones creadas en A2Billing en el caso que no se utilice el Realtime:

#include additional_a2billing_sip.conf

Se guardan los cambios y se hace lo mismo con el archivo iax.conf en el caso que se quiera configurar también extensiones IAX2:

echo "#include additional_a2billing_iax.conf" >> /etc/asterisk/iax.conf

Se sigue con el dialplan. Se renombra el archivo extensions.conf predefinido:

mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.old

Se crea uno nuevo:

nano /etc/asterisk/extensions.conf

se pegan la líneas que siguen:

[general]
static = yes
writeprotect = no
autofallthrough = yes
extenpatternmatchnew = true
clearglobalvars = no
userscontext=default

[globals]
; Variables globales

y se incluye el contexto para las llamadas con el AGI de a2billing (básico):

[a2billing]
exten => _X.,1,NoOp(A2Billing Start)
same => n,Agi(a2billing.php,1)
same => n,Hangup
exten => h,1,Hangup

Se guardan los cambios y se averigua que efectivamente el dialplan englobado esté presente. Se entra en la consola de Asterisk:

asterisk -rvvvvvvvvvvvvvv

se recarga el dialplan:

CLI> dialplan reload

y se escribe el comando:

CLI> dialplan show a2billing

debe aparecer:

[ Context 'a2billing' created by 'pbx_config' ]
'h' => 1. Hangup() [pbx_config]
'_X.' => 1. NoOp(A2Billing Start) [pbx_config]
2. Agi(a2billing.php,1) [pbx_config]
3. Hangup() [pbx_config]
-= 2 extensions (4 priorities) in 1 context. =-

CLI> quit

Se sale de la consola de Asterisk. Las extensiones creadas a través del sistema de facturación se guardarán en la base de datos de A2Billing. Para que Asterisk las pueda leer y actualizar, hay que configurar Asterisk utilizando su funcionalidad, llamada Realtime, que le permite interactuar con base de datos para la configuración, en este caso, de las extensiones SIP e IAX. El primer paso es configurar Asterisk para que cargue los módulos ODBC antes de todos los demás. Esto cambio se efectúa modificando el archivo /etc/asterisk/modules.conf. Se abre:

nano /etc/asterisk/modules.conf

Se modifican estas dos líneas:

;preload => res_odbc.so
;preload => res_config_odbc.so

para que queden:

preload => res_odbc.so
preload => res_config_odbc.so

Como no se va a escribir el dialplan en los lenguajes AEL y LUA, es mejor desactivar los dos módulos. Al final de archivo se pone:

noload => pbx_lua.so
noload => pbx_ael.so

Se guardan los cambios.

Luego se configura ODBC para la conexión a MySQL:

mv /etc/odbcinst.ini /etc/odbcinst.old

nano /etc/odbcinst.ini

se añaden las siguientes líneas:

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc5.so
Setup = /usr/lib64/libodbcmyS.so
FileUsage = 1

Se guardan los cambios y se continua con la conexión a la base de datos a2billing:

nano /etc/odbc.ini

se añaden las siguientes lineas:

[a2billing]
Description = MySQL a2billing
Driver = MySQL
Database = a2billing
Server = localhost
User = a2user
Password = sesamo
Port = 3306
Option = 3

Se guardan los cambios y se pasa a Asterisk. En la PBX la configuración Realtime con ODBC se realiza en dos archivos:

  • extconfig.conf

  • res_odbc.conf

En el primero se define que las extensiones SIP e IAX deberán ser configuradas en Realtime utilizando ODBC y la base de datos a2billing:

nano /etc/asterisk/extconfig.conf

se modifican estas lineas:

;iaxusers => odbc,asterisk
;iaxpeers => odbc,asterisk
;sippeers => odbc,asterisk

para que queden:

iaxusers => odbc,a2b,cc_iax_buddies
iaxpeers => odbc,a2b,cc_iax_buddies
sippeers => odbc,a2b,cc_sip_buddies

Se guardan los cambios. cc_iax_buddies y cc_sip_buddies son las tablas de la base de datos a2billing donde están guardadas las extensiones creadas desde el sistema de facturación. a2b es el nombre de la etiqueta que se configurará en el archivo res_odbc.conf. Para terminar se configura el archivo res_odbc.conf:

nano /etc/asterisk/res_odbc.conf

al final del archivo se añaden las siguientes líneas:

[a2b]
enabled => yes
dsn => a2billing
username => a2user
password => sesamo
pre-connect => yes
sanitysql => select 1
idlecheck => 3600
connect_timeout => 10

La conexión funciona de la siguiente manera. En el archivo extconfig.conf se define la conexión a la base de datos utilizando el nombre que aparece como etiqueta del bloque presente en el archivo res_odbc.onf (en este caso el nombre es a2b). En el archivo res_odbc.conf en el parámetro dsn se define el nombre de la etiqueta del bloque configurado en el archivo odbc.ini (a2billing). En el archivo odbc.ini se define la conexión a la base de datos MySQL (en este caso la base de datos se llama a2billing).

Se reinicia Asterisk y se averigua que la conexión esté funcionando:

systemctl restart asterisk

asterisk -rvvvvvvvvvvvvvvvvv

CLI> odbc show

la respuesta debe ser:

ODBC DSN Settings
-----------------

Name: a2b
DSN: a2billing
Last connection attempt: 1969-12-31 19:00:00
Pooled: No
Connected: Yes

Se sale de la consola de Asterisk:

CLI> quit

Se configura el arranque automático también para el servidor Web:

systemctl enable httpd

Ahora que se ha terminado con la configuración del servidor y de A2Billing se reinicia el sistema para averiguar que todos los servicios arranquen correctamente:

reboot

Reiniciado el servidor se vuelve a entrar con el cliente SSH y se accede a la consola de Asterisk:

asterisk -rvvvvvvvvvvvvvv

desde un navegador web se entra a la pagina de administración de A2Billing:

http://IPservidor/a2billing/admin

o, mejor aún, la pagina segura:

https://IPservidor/a2billing/admin

Debe aparecer:

image

Los datos por defecto para registrarse son:

User: root

Password: changepassword

Lo primero que hay que hacer es crear un nuevo administrador y borrar el predefinido. Se entra en el menú ADMINS y luego en “Add Search”:

En la pagina que aparece se escoge “ADD Administrator”

En la nueva pagina se rellenan los campos indicados, personalizándolos; Se guardan presionando el botón “Confirm Data”. Se regresará a la pagina anterior y ya se podrá borrar el usuario root utilizando la X roja que aparece al final de la línea del mismo usuario. Se confirma con el botón “DELETE”.

Se sale del programa utilizando el enlace “LOGOUT” y se vuelve a entrar con los datos del nuevo administrador que se acaba de crear.

Para la configuración del cortafuegos consultar este comentario.

Es todo.

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Instalación de A2Billing 2.2.0 en CentOS 7.1 64bit" Suscribirse a VozToVoice - Todos los comentarios