Configurar a2billing en menos de 10 minutos

Imagen de RazaMetaL

Ya sabemos [url=http://www.ecualug.org/?q=2006/07/19/comos/instalar_un_sistema_de_facturacion_para_asterisk]como instalar a2billing[/url], 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 difíciles (instalarlo es super fácil) es entender como manejar el sistema de facturación. 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 práctica, voy a explicar como lograr que a2billing funcione para tarificación del consumo telefónico. 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 código de país;
- Tengo instalado a2billing y su interfaz de usuario;
- Para hacer llamadas internacionales mis extensiones agregan el 00 antes del código de país.

En nuestro archivo de configuracion sip.conf debemos tener las líneas para la configuración 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:
[b]1.- Crear un proveedor:[/b]

TRUNK --> Create Provider

He creado el Proveedor ProveedorSIP en donde ingreso detalles informativos del proveedor.

[b]2.- Agregar un Trunk:[/b]

TRUNK --> Add Trunk

Un trunk es el canal por donde saldrán 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 dígitos 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 varía entre los diferentes proveedores, otros requieren que envies un 011 ó 00 antes del codigo de pais para poder terminar la llamada.

Mis usuarios marcarán:

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í debería 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 opción es bastante útil si tenemos mas de un proveedor. Podemos tener varios trunks que hagan terminación 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.

[b]3.- Creamos un grupo de tarifas (TariffGroup)[/b]

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 económica para el usuario.

[b]4.- Crear RATECARD[/b]

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.

[b]5.- Crear tarifas[/b]

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 0
DISCONNECT CHARGE 0
TRUNK internaciona-proveedorsip

Seguimos el procedimiento para cada destino que queramos agregar. Hacerlo para todos los paises del mundo sería 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.

[b]6.- Crear clientes[/b]

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 País
PHONENUMBER Telefono
FAXNUMBER Fax
SIP ACCOUNT Yes
IAX ACCOUNT Yes

A2billing nos genera automáticamente el numero de tarjeta, si quieremos darle a nuestro usuario un número que sea más fácil de recordar para el podemos usar el campo CARD ALIAS. En este ejemplo el usuario tiene un crédito de US$10,00 y la cuenta no puede ser usada simultáneamente.

A cada tarjeta podemos agregarles usuarios adicionales SIP e IAX. Esto se lo logra listando las tarjetas y dando click al botón 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

[b]7.- Agregar RATECARD al TARIFFGROUP[/b]

RATECARD --> LIST TARIFFGROUP

Escoger el tariffgroup Oro y agregar el ratecard internacional

Ahora debemos probar si nuestra configuración surte efecto. Configuramos un dispositivo SIP o IAX2 para que se registre con los datos de usuario sip ó iax friend y marcamos un número de USA. Si todo esta bien en el CDR veremos registrada la llamada, su Duración y precio.

[b][i]T-R-U-C-O-S - Y - T-I-P-S:[/i][/b]
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 ;)

[b]**** Modificar el campo Card Number del Cliente[/b]
Al editar un cliente no puedes modificar el número de tarjeta porque este campo esta protegido contra escritura, esto implica que una llamada entre usuarios del mismo servidor pueda ser hecha entre números de tarjeta y no entre alias de tarjetas, los números que se aprenden mis usuarios son los alias porque son más sencillos de aprender. Por otra parte en lo personal se me hace mas fácil asignar manualmente el número de tarjeta que será el número 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 línea en mención nos quedaría mas o menos así:
Antes:

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

Despues:

"size=20 $maxi maxlength=40",

[b] **** Escuchar saldo desde cualquier extension registrada[/b]
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.

[b] **** Habilitar VoiceMail entre usuarios SIP/IAX2 de a2billing[/b]
Esta es una opcion que no viene por defecto pero que se puede lograr modificando algunos parametros de configuracion.

Si la extension esta [b]no esta registrada[/b] 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 [b]no es contestada[/b] 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 [b]ocupada[/b] 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 [b]/etc/asterisk/voicemail.conf[/b] 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

[b]ACTUALIZACION[/b]: 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 solución 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 líneas en el archivo Class.A2Billing.php también es necesario para este método.

Que es lo que debemos hacer?

1.- Añadir 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 líneas del párrafo 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 líneas del párrafo 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 ejecución:

chmod a+x a2billingvoicemail.sh

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


vi /etc/crontab

Agregamos las siguientes líneas:

# 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 contraseña por defecto para cada usuario es 1234, él deberá cambiarla desde el mismo centro de mensajes de voz.

[b] **** A2billing esta facturando la llamada desde que el telefono timbra y no desde que contestan.[/b]
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 parámetro [i]dialcommand_param[/i] para agregar la letra [b]C[/b]

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 [i]/etc/asterisk/a2billing.conf[/i] buscamos el parametro [i]answer_call[/i] en la seccion [i]agi-conf[/i] y lo seteamos en NO:

answer_call=no

En [i]/etc/asterisk/extensions.conf[/i] modificamos el contexto a2billing para que luzca asi:

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

[b] **** La interfaz de mis usuarios sale en ingles, cuando doy cliente en la bandera de Espana el lenguaje no cambia. Estoy usando Debian.[/b]
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.

[b] **** Aumentar decimales en el registro de llamadas[/b]
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);
}

[b] **** Si tengo poco saldo y hago una llamada a2billing permite que yo termine la llamada y me da saldo en contra[/b]
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 [i]dialcommand_param[/i] en [i]/etc/asterisk/a2billing.conf[/i]:


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

[b] **** Permitir a los usuarios loguearse en la interfaz de administracion usando su e-mail o el numero de tarjeta[/b]
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 [i]/var/www/consumos/lib/module.access.php[/i]:

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."'";

Comentarios

hola de nuevo a ver si

hola de nuevo :) a ver si alguien me puede ayudar, estoy tratando de que 2 anexos en el contexto de a2billing se puedan llamar entre si, me dice cuantos minutos tengo y parece como si hiciera la llamada, mas no timbra el anexo y me aparece este mensaje luego se corta la llamada, solo tengo esa troncal q ven ahi , que me falta :( porque no timbra :?

-- Called TroncalSIP/3310
-- SIP/TroncalSIP-09273198 is making progress passing it to SIP/3311-b72053c0
-- SIP/TroncalSIP-09273198 is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
a2billing.php|1: file:Class.RateEngine.php - line:1095 - [USEDRATECARD - FAIL =0]
-- Playing 'prepaid-dest-unreachable' (escape_digits=#) (sample_offset 0)
a2billing.php|1: file:Class.RateEngine.php - line:848 - [CC_asterisk_stop QUERY = INSERT INTO cc_call (uniqueid,sessionid,username,nasipaddress,starttime,sessiontime, calledstation, terminatecause, stoptime, calledrate, sessionbill, calledcountry, calledsub, destination, id_tariffgroup, id_tariffplan, id_ratecard, id_trunk, src, sipiax, buyrate, buycost, id_card_package_offer) VALUES ('1262974777.46', 'SIP/3311-b72053c0', '7443556469', '', CURRENT_TIMESTAMP - INTERVAL 0 SECOND , '0', '3310', 'CONGESTION', now(), '0.004', '-0', '', '', 'llamada local lima', '1', '1', '1', '2', '3311', '0', '0.004', '0', '0')]
a2billing.php|1: file:Class.RateEngine.php - line:851 - [CC_asterisk_stop 1.1: SQL: DONE : result=1]
a2billing.php|1: file:a2billing.php - line:338 - [a2billing account stop]
a2billing.php|1: file:Class.A2Billing.php - line:634 - [CARD STATUS UPDATE : UPDATE cc_card SET inuse=inuse-1 WHERE username='7443556469']
-- AGI Script a2billing.php completed, returning 0

Raza porque me sale

Raza :( porque me sale Unspecified, esos son mis usuarios del a2billing y su acountcode, preciso de ayuda pofa. :(

[root@elastix asterisk]# asterisk -rx "sip show peers"
Name/username Host Dyn Nat ACL Port Status
5497428438/5497428438 (Unspecified) D N 0 UNKNOWN
8372196201/8372196201 (Unspecified) D N 0 UNKNOWN
TroncalSIP/tami2009 194.120.0.198 5060 Unmonitored
6363/6363 192.168.3.4 D N A 5060 OK (18 ms)
6060/6060 192.168.3.4 D N A 5060 OK (20 ms)
3311/3311 192.168.3.3 D N A 57482 OK (4 ms)
3310/3310 192.168.3.3 D N A 2754 OK (102 ms)
7 sip peers [Monitored: 4 online, 2 offline Unmonitored: 1 online, 0 offline]

cuando llamo de sip a la pstn hace la llamada pero no la hace a anexos y me aparece Everyone is busy/congested at this time .

crear clientes

Hola todos, estoy con el siguiente problema

actualize la version del a2b de elastix de la 1.3 para la 1.6

ahora me suecede queno me crea lis clientes. el mensaje es:

your new card hasn't been inserted.

alguna ayudar porfavor

gracias
Marcelo

Problemas con a2billing

Hola a todos, tengo un problema aver si me podeis ayudar.

tengo instalada la elastix 1.6 con a2billing 1.7,

e seguido la guia paso a paso y todo perfecto, pero cuando me conecto desde un softphone, me dice que marque el numero seguido de almoadilla, lo hago y me dice que el numero no esta disponible y asi susesibamente.

alguien sabe como solucionarlo????

Gracias de antemano

Un saludo

PD: me sale esto

-- Executing [34928820000@a2billing:1] Answer("SIP/5550000000-09cf9b30", "") in new stack
-- Executing [34928820000@a2billing:2] Wait("SIP/5550000000-09cf9b30", "1") in new stack
-- Executing [34928820000@a2billing:3] DeadAGI("SIP/5550000000-09cf9b30", "a2billing.php|1") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
-- Playing 'prepaid-you-have' (escape_digits=#) (sample_offset 0)
-- Playing 'digits/100' (language 'es')
-- Playing 'dollars' (escape_digits=#) (sample_offset 0)
-- Playing 'prepaid-enter-dest' (language 'es')
-- Playing 'prepaid-dest-unreachable' (escape_digits=#) (sample_offset 0)
-- Playing 'prepaid-enter-dest' (language 'es')
-- Playing 'prepaid-dest-unreachable' (escape_digits=#) (sample_offset 0)
-- Playing 'prepaid-enter-dest' (language 'es')
-- AGI Script a2billing.php completed, returning 0
-- Executing [34928820000@a2billing:1] Answer("SIP/5550000000-09cf9b30", "") in new stack
-- Executing [34928820000@a2billing:2] Wait("SIP/5550000000-09cf9b30", "1") in new stack
-- Executing [34928820000@a2billing:3] DeadAGI("SIP/5550000000-09cf9b30", "a2billing.php|1") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
-- Playing 'prepaid-you-have' (escape_digits=#) (sample_offset 0)
-- Playing 'digits/100' (language 'es')
-- Playing 'dollars' (escape_digits=#) (sample_offset 0)
-- Playing 'prepaid-enter-dest' (language 'es')
-- Remote UNIX connection
-- Remote UNIX connection disconnected

no puedo hacer que mis extensiones sean tarificadas...

He tenido ya unos meses instalando asterisk y a2billing al fin pude terminar de instalar el a2billing cree los trunk los rates y todo segun tu manual raza muy bueno, cuando creo una ext en a2billing no se me crea automaticamente en el asterisk, al hacerlo manualmente se registra el softphone, y puedo realizar las llamadas pero con otro contexto q usaba usualmente solo con el asterisk pero cuando le coloco el contexto de a2billing ni siquiera puedo llamar, ahora estoy haciendo otras pruebas y en la consola de asterisk me pide como un pin de prepago dicha extension esta configurada en el a2billing como postpago, le coloco tambien el contexto q tengo de a2billing en el extensions.conf

-- Registered SIP 'cabina1' at 192.168.20.104 port 5060
-- Executing [04241477001@phones-test:1] Answer("SIP/cabina1-08a81288", "") in new stack
-- Executing [04241477001@phones-test:2] Wait("SIP/cabina1-08a81288", "2") in new stack
-- Executing [04241477001@phones-test:3] AGI("SIP/cabina1-08a81288", "a2billing.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
-- Playing 'prepaid-enter-pin-number' (language 'es')
-- Playing 'prepaid-no-card-entered' (escape_digits=#) (sample_offset 0)
-- Playing 'prepaid-enter-pin-number' (language 'es')
== Spawn extension (phones-test, 04241477001, 3) exited non-zero on 'SIP/cabina1-08a81288'

aqui les copio completo el extensions.conf

general]
static=yes
writeprotect=yes
autofallthrough=yes
priorityjumping=no

[macro-mInternas]
exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n,Set(ID=${CALLERID(num)})
exten => s,n,Dial(SIP/${MACRO_EXTEN},10,tTwkKxX)
exten => s,n,Read(callbusy,/var/lib/asterisk/mismensajes/rellamada,1,,1,5)
exten => s,n,GotoIf($["${callbusy}" = "6"]?callfile)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(callfile),System(echo Channel:SIP/${MACRO_EXTEN} >> /tmp/callback${MACRO_E$
exten => s,n,System(echo Callerid:Rellamada "" >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo WaitTime:30 >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo Maxretries:10 >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo RetryTime:30 >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo Account:${ID} >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo Application:Dial >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo Data: SIP/${ID} >> /tmp/callback${MACRO_EXTEN})
exten => s,n,System(echo Archive: yes >> /tmp/callback${MACRO_EXTEN})
exten => s,n,Wait(1)
exten => s,n,System(mv /tmp/callback${MACRO_EXTEN} /var/spool/asterisk/outgoing)
exten => s,n,Hangup()
exten => h,1,hangup

[Internas]
exten => _5XX,1,Macro(mInternas)
exten => _5XX,n,Hangup()

[Internas-old]
exten => _5XX,1,Answer() ; contestamos la llamada
exten => _5XX,n,Set(NUM=${DB(CFI/${EXTEN})}) ; Verificar si la ext tiene forwa$
exten => _5XX,n,GotoIf($["${NUM}" = ""]?normal:forw) ; Si tiene, va a sin es una llam$
exten => _5XX,n(normal),Set(NUM=${EXTEN})
exten => _5XX,n,noop(${NUM})
exten => _5XX,n,Goto(interna)
exten => _5XX,n(forw),GotoIf($[${LEN(${NUM})}>=4]?externa:interna)
exten => _5XX,n(externa),Dial(DAHDI/g1/${NUM},25,Tt)
exten => _5XX,n,Hangup()
exten => _5XX,n(interna),Dial(SIP/${NUM},25,Tt)
exten => _5XX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => _5XX,n(unavail),Voicemail(${EXTEN}@default,u)
exten => _5XX,n,Hangup()
exten => _5XX,n(busy),VoiceMail(${EXTEN}@default,b)
exten => _5XX,n,Hangup()

[LlamarSiemens]
exten => _4XX,1,Dial(DAHDI/g2/${EXTEN},35,Tt)
exten => _4XX,n,Hangup()

[Llamar-*]
exten => _*7XXX,1,Dial(DAHDI/g2/${EXTEN},35,Tt)
exten => _*7XXX,n,Hangup()

[LlamarBB]
exten => _62XX,1,Dial(DAHDI/g2/${EXTEN},35,Tt)
exten => _62XX,n,Hangup()

[informacion]
exten =>_9XXX,1,Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_9XXX,n,Hangup()

[Salida500-800]
exten =>_90[58]0XXXXXXXX,1,Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_90[58]0XXXXXXXX,n,Hangup()

[SalidaLocal]
exten =>_9XXXXXXX,1,Set(cand=${DB(CANDADO/${CALLERID(NUM)})}); Verificar candado
exten =>_9XXXXXXX,n,GotoIf($["${cand}" = ""]?permitido:no-permitido)
exten =>_9XXXXXXX,n(permitido),Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_9XXXXXXX,n,Hangup()
exten =>_9XXXXXXX,n(no-permitido),Playback(/var/lib/asterisk/mismensajes/aviso-candado)
exten =>_9XXXXXXX,n,Hangup()

[SalidaCelular]
exten =>_904XXXXXXXXX,1,Set(cand=${DB(CANDADO/${CALLERID(NUM)})}); Verificar candado
exten =>_904XXXXXXXXX,n,GotoIf($["${cand}" = ""]?permitido:no-permitido)
exten =>_904XXXXXXXXX,n(permitido),AGI,(a2billing.php|1)
exten =>_904XXXXXXXXX,n,Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_904XXXXXXXXX,n,Hangup()
exten =>_904XXXXXXXXX,n(no-permitido),Playback(/var/lib/asterisk/mismensajes/aviso-cand$
exten =>_904XXXXXXXXX,n,Hangup()

[SalidaNacional]
exten =>_902XXXXXXXXX,1,Set(cand=${DB(CANDADO/${CALLERID(NUM)})}); Verificar candado
exten =>_902XXXXXXXXX,n,GotoIf($["${cand}" = ""]?permitido:no-permitido)
exten =>_902XXXXXXXXX,n(permitido),Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_902XXXXXXXXX,n,Hangup()
exten =>_902XXXXXXXXX,n(no-permitido),Playback(/var/lib/asterisk/mismensajes/aviso-cand$
exten =>_902XXXXXXXXX,n,Hangup()

[Asterisk-PBL01]
exten =>_2425XX,1,set(GROUP()=pbl)
exten =>_2425XX,n,Gotoif($[${GROUP_COUNT(pbl)}>1]?revento)
exten =>_2425XX,n,Dial(IAX2/PBL01/${EXTEN:3},35,Tt)
exten =>_2425XX,n,Hangup
exten =>_2425XX,n(revento),Dial(DAHDI/g1/2421,35,Tt)

[SalidaInternacional]
exten =>_900XXXXXXXXXXX,1,Set(cand=${DB(CANDADO/${CALLERID(NUM)})}); Verificar candado
exten =>_900XXXXXXXXXXX,n,GotoIf($["${cand}" = ""]?permitido:no-permitido)
exten =>_900XXXXXXXXXXX,n(permitido),Dial(DAHDI/g1/${EXTEN:1},35,Tt)
exten =>_900XXXXXXXXXXX,n,Hangup()
exten =>_900XXXXXXXXXXX,n(no-permitido),Playback(/var/lib/asterisk/mismensajes/aviso-ca$
exten =>_900XXXXXXXXXXX,n,Hangup()

[SalirxSiemens]
exten => _79XXXXXXX,1,Set(cand=${DB(CANDADO/${CALLERID(NUM)})}); Verificar candado
exten => _79XXXXXXX,n,GotoIf($["${cand}" = ""]?permitido:no-permitido)
exten => _79XXXXXXX,n(permitido),Dial(DAHDI/g2/${EXTEN:1},35,Tt)
exten => _79XXXXXXX,n,Hangup()
exten => _79XXXXXXX,n(no-permitido),Playback(/var/lib/asterisk/mismensajes/aviso-candad$
exten => _79XXXXXXX,n,Hangup()

[Abreviados-Sucursales]
exten => 2421,1,Dial(DAHDI/g1/02423617747,35,Tt) ; Master Servinave PBL
exten => 2422,1,Dial(DAHDI/g1/02423618234,35,Tt) ; Servicom (La zona)
exten => 2122,1,dial(DAHDI/g1/3315011,35,Tt) ; Master Servinave La Guaira
exten => 2411,1,dial(DAHDI/g1/02418236413,35,Tt) ; Servinave VAL (Carmen Duran)
exten => 2412,1,dial(DAHDI/g1/02418235578,35,Tt) ; Servinave VAL (Nestor Avila)
exten => 2413,1,dial(DAHDI/g1/02418234337,35,Tt) ; Servinave VAL (Lilibeth Herrera)
exten => 2611,1,dial(DAHDI/g1/,35,Tt) ; Servinave MBO

[Abreviados-Blohm]
exten => 3423,1,Dial(DAHDI/g1/02423616936,35,Tt) ; Alafletes(PBL)

[Abreviados-Otros]
exten => 4411,1,Dial(DAHDI/g1/04165483033,35,Tt) ; Elisaul Daal CANTV

[Faxes]
exten=> s,1,Dial(Iax2/iaxmodem/${DID},10,r)

[IVR-Ppal]
exten=>s,1,gotoiftime(7:30-16:30|mon-sat|*|*?EnHorario)
exten=>s,n,background(/var/lib/asterisk/mismensajes/saludo-noche)
exten=>s,n,voicemail(500,s)
exten=>s,n,hangup()
exten=>s,n,DigitTimeOut(7)
exten=>s,n,responsetimeout(10)
exten=>s,n(EnHorario),background(/var/lib/asterisk/mismensajes/bienvenida-dia)
exten=>s,n,waitexten(6)
exten=>2,1,queue(Mercadeo)
exten=>2,n,hangup
exten=>3,1,queue(Ofidemo)
exten=>3,n,hangup
exten=>4,1,queue(Operaciones)
exten=>4,n,hangup
exten=>6,1,goto(IVR-Areas-Adminis,s,1)
exten=>6,n,hangup
exten=>7,1,queue(Sistemas)
exten=>7,n,hangup
exten=>fax,1,Dial(Iax2/iaxmodem)
exten=>t,1,Dial(SIP/500,30,Tt)
exten=>i,1,playback(invalid)
exten=>i,n,goto(s,n(EnHorario))

[IVR-Areas-Adminis]
exten=>s,1,background(/var/lib/asterisk/mismensajes/areas-adminis)
exten=>s,n,waitexten(6)
exten=>1,1,queue(Admon)
exten=>1,n,hangup
exten=>2,1,queue(Analisis)
exten=>2,n,hangup
exten=>3,1,queue(Cobranza)
exten=>3,n,hangup
exten=>4,1,queue(Contab)
exten=>4,n,hangup
exten=>5,1,queue(Estadistica)
exten=>5,n,hangup
exten=>9,1,goto(bienvenida-dia,s,1)
exten=>9,n,hangup
exten=>t,1,goto(s,1)
exten=>t,n,hangup
exten=>i,1,playback(invalid)
exten=>i,n,goto(s,n(EnHorario))

[Servicios]
#include servicios.conf
include =>conferencia
include =>parqueo
include =>grabacion
include =>escucha-grabacion
include =>escucha-ivr
include =>invalidas
include =>prueba-eco
include =>voicemail
include =>musica
include =>activar-desvio
include =>desactivar-desvio
include =>operadora
include =>candado

[Abreviados]
include =>Abreviados-Sucursales
include =>Abreviados-Blohm
include =>Abreviados-Otros

[Sucursales]
include =>Asterisk-PBL01
[Hacia-siemens]
include =>LlamarSiemens
include =>LlamarBB
include =>Llamar-*

[SoloInternas]
include =>Servicios
include =>Abreviados
include =>Internas
include =>Sucursales
include =>informacion
include =>Salida500-800
include =>Hacia-siemens

[SoloLocal]
Include =>SoloInternas
include =>SalidaLocal

[SoloCelular]
include =>SoloLocal
include =>SalidaCelular

[SoloNacional]
include =>SoloLocal
include =>SalidaNacional

[Nacional-Celular]
include =>SoloCelular
include =>SalidaNacional

[Sin-restriccion]
include =>Nacional-Celular
include =>SalidaInternacional

[Entrantes]
include => IVR-Ppal
include => Internas

[a2billing]
exten =>_X.,1,Answer
exten =>_X.,2,wait,2
exten =>_X.,3,AGI,a2billing.php
exten =>_X.,4,wait,2
exten =>_X.,5,Hangup

[phones]
include =>invalidas
include =>Entrantes
include =>Servicios
include =>Abreviados
include =>Sucursales
include =>informacion
include =>Salida500-800
include =>LlamarSiemens
include =>LlamarBB
include =>SalidaLocal
include =>SalidaNacional
include =>SalidaCelular
include =>SalidaInternacional
include =>SalirxSiemens
include =>Llamar-*
include =>Faxes
include =>a2billing
[phones-test]
include =>invalidas
include =>Entrantes
include =>Servicios
include =>Abreviados
include =>Sucursales
include =>informacion
include =>Salida500-800
include =>LlamarSiemens
include =>LlamarBB
include =>SalidaLocal
include =>SalidaNacional
include =>SalidaCelular
include =>SalidaInternacional
include =>SalirxSiemens
include =>Llamar-*
include =>Internas
include =>a2billing

De verdad necesito ayuda me urge tarificar las extensiones. Gracias

he adelantado mas...

A pesar de que soy muy novato en esto, creo que he adelantado bastante estube leyendo y me di cuenta que una de las cosas que me faltaba era crear y configurar la base de datos de asterisk-addons, para poder llevar los CDR en una base de datos. Ahora sigo con otros puntos cuando trato de realizar la llamada y coloco mi numero de tarjeta me dice que el numero que estoy marcando no esta permitido.

Apreciaria su ayuda

gracias pero tengo otro problema ahora

Muchas gracias monica, ahora tengo otro problema coloco el numero del PIN y me dice que marque el numero de destino seguido de #, luego q lo marco me dice numero de destino no esta permitido, Quisiera primero eliminar lo del pin y solo marcar el numero de destino con su prefijo solo una vez.

Mil gracias de nuevo

Queres usar pin o no???

Imagen de monica

Usted quiere usar pin o directamente marcar el numero que desea llamar y ya conectar la llamada directo, sin tener que digitar nada.

si no queres usar el pin, entre un su a2billing.conf y ponga estas opciones:

answer_call=no
use_dnid = Yes
say_balance_after_auth = No
say_rateinitial = No

y el contexto asi:

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

:jawdrop:

Estoy buscando intercambio de link para mi nuevo projecto.
http://www.anunciossantafe.com.ar/
contacto con info@anunciossantafe.com.ar

Páginas