Tarifacion en FreeSWITCH con mod_lcr y mod_nibblebill

Justo hoy estuve mirando estos dos modulos y creo que se pueden poner a trabajar juntos para tener una tarifacion mas precisa.

Voy a mostrarles mi tesis:

mod_lcr es un modulo que permite, a traves de una base de datos, crear distintas rutas segun el numero a llamar. Puede ser que para la misma ruta tenemos mas de un gateway (proveedor VoIP) para efectuar la llamada. Dependiendo del tipo de calidad, costo y afidabilidad del proveedor, cada vez podremos elegir uno en lugar de otro.

La cosa interesante es que en la estructura de las tablas de lcr se pueden indicar, por cada ruta, el costo de la llamada. El modulo crea unas cuantas variables de canal entre las cuales "lcr_rate" donde almacena el valor de esa llamada.

Podemos usar esa variable (todavia no he hecho pruebas) cuando vamos a setear la variable "nibble_rate" en nuestro dialplan

Podria ser algo por el estilo:

<action application="lcr" data="$1"/>

con esta primera linea hacemos una consulta de la base de datos creada para el modulo lcr

<action application="bridge" data="${lcr_auto_route}"/>

con esta segunda linea usaremos la variable de canal lcr_auto_route que contendra algo por el estilo: sofia/gateway/provider1/numeroallamar

<action application="set" data="nibble_rate=${lcr_rate}"/>

Con esta tercera linea le decimos al modulo nibblebill que tiene que tarifar la llamada segun en valor de la variable lcr_rate

De esta forma tenemos una tarifacion mas detallada.

Un ejemplo:

Para llamadas a Colombia puedo tener distintas tarifas segun la ciudad y la compañia de celular que voy a llamar. De hecho muchos proveedores tienen una lista bastante larga para este pais. Con una sola entrada en el dialplan puedo manejar todas estas distintas tarifas usando conjuntamente el modulo nibblebill y lcr.

No se si me explique bien, espero que si. De todas formas en cuanto pueda escribire dos guias: una para moddlebill y una para lcr.

Me encantaria saber que opina nuestro amigo Diego que es el que hasta ahora ha trabajado mas que todos el tema de nibblebill.

Comentarios

Creo que esta muy bien

Creo que esta muy bien como lo haces, disculpa que tuve que sacar el codigo... actualmente estoy agregando esto de mod_lcr para A-Z rates a mi script, una vez que lo termine te envio la aplicacion completa para que lo subas.

No funciona con lcr_rate

He hecho pruebas y no funciona con la variable lcr_rate. La variable que hay que usar es lcr_rate_1 (he controlado con la aplicacion info que permite ver en la consola todas las variables seteadas para el canal activo).

Con lcr_rate_1 funciona perfecto. Ademas tuve que corregir el wiki porque no es variable_accountcode la que tiene almacenado el numero de la cuenta del usuario sino solamente accountcode.

Usando accountcode y lcr_rate_1 todo me ha funcionado bien.

Lo unico que no entiendo es porque la tarifacion es siempre por segundos.

Se puede modificar este comportamiento?

Hasta pronto y felicitaciones por tu trabajo.

Mi correo admin at freeswitch.es

 

Una pregunta

Admin, te anduvieron los ejemplos SQL (MySQL) de esta pagina: http://wiki.freeswitch.org/wiki/Mod_lcr ?

Yo probe pero algunos de esos SQL statements no funcionan...

Gracias,

Diego

Mysql y mod_lcr

Hola Diego,

antes que nada gracias por pegar el codigo aunque no esté completo. Le hecharé una miradita para ver si aprendo algo de programacion.

Para crear las tablas para el modulo yo modifiquè el archivo que encontrè en /usr/src/freeswitch/scripts/contrib/intralanman/C/lcr/sql/
 

Te lo pego

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

-- MySQL dump 10.11
--
-- Host: localhost    Database: freeswitchlcr
-- ------------------------------------------------------
-- Server version       5.0.79

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `carrier_gateway`
--

DROP TABLE IF EXISTS `carrier_gateway`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `carrier_gateway` (
  `id` int(11) NOT NULL auto_increment,
  `carrier_id` int(11) default NULL,
  `prefix` varchar(255) default NULL,
  `suffix` varchar(255) default NULL,
  `codec` varchar(255) default NULL,
  `enabled` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`id`),
  KEY `carrier_id` (`carrier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `carrier_gateway`
--

LOCK TABLES `carrier_gateway` WRITE;
/*!40000 ALTER TABLE `carrier_gateway` DISABLE KEYS */;
/*!40000 ALTER TABLE `carrier_gateway` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `carriers`
--

DROP TABLE IF EXISTS `carriers`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `carriers` (
  `id` int(11) NOT NULL auto_increment,
  `carrier_name` varchar(255) NOT NULL default '',
  `enabled` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `carriers`
--

LOCK TABLES `carriers` WRITE;
/*!40000 ALTER TABLE `carriers` DISABLE KEYS */;
/*!40000 ALTER TABLE `carriers` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `lcr`
--
DROP TABLE IF EXISTS `lcr`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `lcr` (
  `id` int(11) NOT NULL auto_increment,
  `digits` varchar(15) default NULL,
  `rate` float(11,5) unsigned NOT NULL,
  `carrier_id` int(11) NOT NULL,
  `lead_strip` int(11) default NULL,
  `trail_strip` int(11) default NULL,
  `prefix` varchar(16) default NULL,
  `suffix` varchar(16) default NULL,
  `lcr_profile` varchar(32) default NULL,
  `date_start` datetime NOT NULL default '1970-01-01 00:00:00',
  `date_end` datetime NOT NULL default '2030-12-31 00:00:00',
  `quality` float(10,6) NOT NULL,
  `reliability` float(10,6) NOT NULL,
  `cid` varchar(32) default '',
  `enabled` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`id`),
  KEY `carrier_id` (`carrier_id`),
  KEY `digits` (`digits`),
  KEY `lcr_profile` (`lcr_profile`),
  KEY `rate` (`rate`),
  KEY `digits_profile_cid_rate` USING BTREE (`digits`,`rate`),
  CONSTRAINT `carrier_id` FOREIGN KEY (`carrier_id`) REFERENCES `carriers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `lcr`
--

LOCK TABLES `lcr` WRITE;
/*!40000 ALTER TABLE `lcr` DISABLE KEYS */;
/*!40000 ALTER TABLE `lcr` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2009-05-31 15:45:01
-----------------------------------------------------------------------------------------------

Con esto me funcionó sin problemas.

En cuanto pueda escribiré una guia a la instalacion de los dos mudulos y el dialplan para aprovecharlos.

Chao

 

 

 

 

mod_lcr con mod_nibblebill para A-Z rates

Estoy queriendo usar mod_nibblebill con mod_lcr para tener A-Z rates en mi script, una vez que lo tenga listo lo publico aqui.

Saludos,

Diego

Ok, yo apenas agregue esto a mi app lo libero

Ok, yo apenas termine con esta aplicacion (fs_bill) para calling cards, y agregue esto de mod_lcr para A-Z rates, lo libero, y luego escribimos un manual para instalarlo y usarlo.

Ya falta muy poco, muchas gracias a todos ;).

Diego

Admin, gracias por la ayuda

Admin, gracias por la ayuda :).

Otra pregunta, como haces para insertar los datos en las tablas? Hay algun ejemplo de eso en algun lado?

Gracias,

Diego

Agregar datos

La parte de agregar datos a las tablas es quiza la parte más pesada.

Lo puedes hacer de dos formas:

  • usando webmin
  • Desde Micrsoft access (quizas tambien con openoffice) te conectas a la base de datos usando ODBC y luego manejas las tablas directamente desde ahi. Para hacerlo tienes que descargar el Mysql-Connector/ODBC

Para los datos hay ejemplos en esta pagina del wiki de FreeSWITCH

Solucionado

Ok la insercion de datos en MySQL no me estaba funcionando, asi que tome el SQL existente y lo corregi para que funcione en MySQL, aqui agregue "Sample data for MySQL" en el wiki.

http://wiki.freeswitch.org/wiki/Mod_lcr#Sample_Data

 Saludos.

Muy bien :)

A mi me funciona con las modificas que hice y que pegué. Ayer buscando en internet encontré una forma de cargar archivos .cvs en una tabla MySQL.

Mira si te puede ser util:

http://www.modwest.com/help/kb6-253.html

Chao

 

Distribuir contenido Distribuir contenido