• No se han encontrado resultados

Preparación del sistema

In document Libro A2BSIP - version 1.0.pdf (página 47-73)

Capitulo I – VPS Linode

3.1 Preparación del sistema

A2billing requiere por lo menos la versión 5.2 de PHP. En la versión de CentOS 6.5 está disponible la versión 5.3 que es la que se instalará junto al servidor Web Apache y el modulo SSL (para conexiones seguras al servidor Web).

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

Luego se instala php-mcrypt activando el repositorio epel:

yum --enablerepo=epel install php-mcrypt -y

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

nano +946 /etc/php.ini

Se modifica la linea para que quede (en el caso de Colombia):

date.timezone = America/Bogota

En el mismo archivo se busca esta linea:

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 linea:

error_reporting = E_ALL & ~E_DEPRECATED

y se modifica para que quede:

error_reporting = E_ALL & ~E_NOTICE

de esta forma en los LOG del servidor web aparecerán solamente los errores, si presntes, relacionados con el lenguaje PHP. Se guardan los cambios y se descarga la ultima versión disponible de A2Billing:

cd /usr/local/src

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

Se descomprime:

tar -xf v2.1.0.tar.gz

se renombra la carpeta creada:

mv a2billing-2.1.0 a2billing

Se entra en el cliente MySQL:

mysql -u root -psesamo

se crea la base de datos a2billing: mysql> 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 desde local:

mysql> GRANT ALL PRIVILEGES ON a2billing.* TO 'a2user'@'localhost' IDENTIFIED BY

'sesamo';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

se sale del cliente MySQL: mysql> quit

Bye

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

cd a2billing/DataBase/mysql-5.x/

se ejecuta:

./install-db.sh

Se insertan los datos como mostrado en la imagen que sigue:

Para resumir:

Database Name: a2billing Hostname: localhost Username: root Password: sesamo

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

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

utilizando el siguiente script:

La verdad la calidad de las locuciones en español no son muy buenas y algunas faltan del todo. En la misma carpeta se encuentra el archivo Audio_text.info que contiene todos los nombres de las locuciones disponibles con relativas frases. Puede ser una buena ayuda para grabar las propias.

Se continua 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 lineas:

[database] hostname = localhost port = user = a2billing_dbuser password = a2billing_dbpassword dbname = a2billing_dbname 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 guardar la configuración de las extensiones en archivos 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 el servidor Web:

chown -Rf 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) y para generar las llamadas de callback 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 lineas:

enabled = no

;allowmultiplelogin = yes ;displayconnects = yes

para que queden:

enabled=yes

allowmultiplelogin = yes dislplayconnects=yes

El usuario predefinido en la configuración de A2billing para conectarse al AMI de Asterisk es myasterisk con contraseña mycode. Para evitar de trabajar con configuraciones predefinidas, se cambiaran estos datos respectivamente con asterisk y sesamo:

[asterisk] secret=sesamo 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 que es donde Asterisk los busca de manera predefinida:

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:

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 guardarán los archivos temporales y los script de A2Billing:

mkdir -p /var/lib/a2billing/script

la segunda 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 (librerías compartidas por los tres tipos de usuarios)

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

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

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

chmod 755 /usr/local/src/a2billing/admin/templates_c chmod 755 /usr/local/src/a2billing/customer/templates_c chmod 755 /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 -R apache:apache /var/www/html/

chown -R apache:apache /var/www/html/admin/ chown -R apache:apache /var/www/html/agent/ chown -R apache:apache /var/www/html/customer/ chown -R apache:apache /var/www/html/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 al programa. Primero se crea la carpeta:

luego los archivos: touch /var/log/a2billing/cront_a2b_alarm.log touch /var/log/a2billing/cront_a2b_autorefill.log touch /var/log/a2billing/cront_a2b_batch_process.log touch /var/log/a2billing/cront_a2b_archive_data.log touch /var/log/a2billing/cront_a2b_bill_diduse.log touch /var/log/a2billing/cront_a2b_subscription_fee.log touch /var/log/a2billing/cront_a2b_currency_update.log touch /var/log/a2billing/cront_a2b_invoice.log touch /var/log/a2billing/cront_a2b_check_account.log touch /var/log/a2billing/a2billing_paypal.log touch /var/log/a2billing/a2billing_epayment.log touch /var/log/a2billing/a2billing_api_ecommerce_request.log touch /var/log/a2billing/a2billing_api_callback_request.log touch /var/log/a2billing/a2billing_api_card.log touch /var/log/a2billing/a2billing_agi.log

Se cambian los permisos para que el usuario apache (el servidor Web) pueda escribir en ellos:

chown apache:apache /var/log/a2billing/*

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 para el usuario root:

crontab -e

Al final del archivo se pega el siguiente bloque de lineas:

# 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 periodicos

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 automaticas 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 automatico

0 6 1 * * php /usr/local/src/a2billing/Cronjobs/a2billing_autorefill.php

Se deja comentada la linea 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:

/etc/init.d/crond restart

3.2 Instalación del demonio CallBack

El demonio para el Callback es el que permite utilizar el sistema de rellamada de A2Billing. El programa es escrito en el lenguaje de programación Python y es por eso que primero hay que instalar unos paquetes que se necesitan para la compilación:

yum install python-setuptools MySQL-python python-devel -y

Luego, a través de easy_install, se instala el programa sqlalchemy:

easy_install sqlalchemy

Una vez satisfechas estas dependencias, se puede empezar con la compilación y instalación del programa de callback:

cd /usr/local/src/a2billing/CallBack/callback-daemon-py/dist/ tar -xf callback_daemon-1.0.prod-r1528.tar.gz

cd callback_daemon-1.0.prod-r1528

se compila:

python setup.py build python setup.py bdist_egg

easy_install dist/callback_daemon-1.0.prod_r1528-py2.6.egg

Compilado el programa se instala come servicio a través de uno script presente en el paquete de A2Billing:

cd /usr/local/src/a2billing/CallBack/callback-daemon-py/callback_daemon

cp a2b-callback-daemon.rc /etc/init.d/a2b-callback-daemon

Se vuelve ejecutable:

chmod +x /etc/init.d/a2b-callback-daemon

Se añade a la lista de servicios:

chkconfig --add a2b-callback-daemon

Por defecto el servicio guarda los registros en la carpeta /var/log y tiene que arrancar después de MySQL y Asterisk. Para ese efecto hay que abrir el archivo:

nano /etc/init.d/a2b-callback-daemon

y cambiar estas lineas:

# chkconfig: 2345 40 60

LOG='/var/log/a2b-callback-daemon.log'

para que queden:

# chkconfig: 2345 95 60

LOG='/var/log/a2billing/a2b-callback-daemon.log'

Se guardan las modificaciones y se configura para que arranque en automático con el sistema:

chkconfig a2b-callback-daemon on

Ahora ya se puede iniciar el servicio:

/etc/init.d/a2b-callback-daemon start a2b_callback_daemon está parado

Starting a2b-callback-daemon: [ OK ]

y controlar que esté funcionando:

tail -f /var/log/a2billing/a2b-callback-daemon.log

"2011-04-23 19:10:52,297 - root - MainThread - INFO - waiting..." "2011-04-23 19:10:57,308 - root - MainThread - INFO - waiting..." "2011-04-23 19:11:02,322 - root - MainThread - INFO - waiting..." "2011-04-23 19:11:07,355 - root - MainThread - INFO – waiting..."

IMPORTANTE: cada vez que se reinicia Asterisk hay que reiniciar el servicio de callback ya que pierde la conexión a la AMI de Asterisk.

3.3 Configuración de Asterisk

Como ya se ha dicho anteriormente, en esta guía no se explicarán las configuraciones de Asterisk pero es importante saber que los archivos que se modifican son solamente los que se necesitan para que A2Billing funcione.

3.3.1 sip.conf

En el archivo sip.conf se configurará la troncal para sacar las llamadas hacia el proveedor VoIP. Se renombra el sip.conf predefinido:

mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.old

se crea uno nuevo:

nano /etc/asterisk/sip.conf

se pegan las siguientes lineas:

[general] context=default allowguest=no allowtransfer=no match_auth_username=yes realm=asterisk udpbindaddr=0.0.0.0:5090 tcpenable=no tcpbindaddr=0.0.0.0:5090 tcpauthtimeout=30 tcpauthlimit=100 transport=udp srvlookup=yes pedantic=yes maxexpiry=3600 minexpiry=60 defaultexpiry=120 mwiexpiry=3600 maxforwards=70 qualifyfreq=20 qualifygap=200 keepalive=yes

disallow=all allow=ulaw allow=alaw mohinterpret=default mohsuggest=default language=es relaxdtmf=no sendrpid = yes prematuremedia=no progressinband=no useragent=VozToVoice 2.0 promiscredir=no dtmfmode = rfc2833 videosupport=yes maxcallbitrate=384 callevents=yes alwaysauthreject=yes rtptimeout=60 rtpholdtimeout=300 allowsubscribe=yes subscribecontext=subscribe notifyringing=yes notifyhold=yes callcounter = yes t38pt_udptl = yes,fec,maxdatagram=400 faxdetect=yes directmedia=no sdpsession=A2Billing sdpowner=a2billing externaddr=IPservidor localnet=192.168.160.0/255.255.255.0

Antes de guardas los cambio, personalizar las siguientes Lineas: • useragent: nombre que se quiere dar a la PBX

• externaddr: IP publica del servidor

• localnet: rango de IP locales en el caso que en el servidor se haya configurado la IP privada (como es el caso)

• importante saber que el puerto de escucha de Asterisk UDP y TCP será el 5090 ya que el 5060 lo utilizerá OpenSIPs

Siempre en el mismo archivo se añaden los datos para configurar las troncales. En este caso se crean dos de ejemplo con el mismo proveedor; una utilizando un servidor, otra utilizando otro servidor de respaldo. En las dos la autenticación será con usuario y contraseña. Para un sistema en producción configurar las troncales de sus proveedores). Si quieren utilizar una cuenta de prueba, pueden abrir una con la empresa VozToVoice. Recibirán un dólar de crédito para las pruebas.

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

defaultuser: nombre de usuario de la cuenta creada

fromuser: nombre de usuario de la cuenta creada

secret: contraseña asociada al nombre de usuario de la cuenta creada

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:

3.3.2 extensions.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 las lineas 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:

[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

aparecerán muchas lineas porque hay partes de dialplan escritas en otros lenguajes que son leídas por Asterisk. Si no se van a utilizar, es mejor desactivar los respectivos módulos. Se sale de la consola de Asterisk:

Se abre el siguiente archivo:

nano /etc/asterisk/modules.conf

y al final se añaden las lineas que siguen:

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

Se guardan los cambios y se reinicia Asterisk y luego el sistema de callback:

service asterisk restart

service a2b-callback-daemon restart

Luego se revisa el contexto recién creado. Para acceder a la consola de Asterisk se utiliza el alias creado a lo largo del párrafo 1.3:

aste

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.

3.3.3 Asterisk Realtime

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.

En este libro la configuración se realizará utilizando ODBC en lugar de utilizar directamente MySQL. Esto con el objetivo de obtener un mejor rendimiento y una más alta estabilidad. El primer paso es configurar ODBC para la conexión a MySQL:

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

se añaden las siguientes lineas:

[MySQL]

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

Si el sistema CentOS instalado es de 32bit, la configuración del bloque sería:

[MySQL]

Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/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 prueba la conexión utilizando los datos configurados en odbc.ini (base de datos, usuario, contraseña del usuario):

isql a2billing a2user sesamo

Tiene que aparecer:

+---+ | Connected! | | |

| sql-statement | | help [tablename] | | quit | | | +---+ SQL> Para salir: SQL> quit

Se pasa a Asterisk. En la PBX la configuración Realtime con ODBC se efectúa en dos archivos: • extconfig.conf

• res_odbc.conf

El 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 en 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 lineas:

[a2b]

enabled => yes dsn => a2billing username => a2user password => sesamo

pre-connect => yes

In document Libro A2BSIP - version 1.0.pdf (página 47-73)

Documento similar