Web-MeetMe

De Asterisk Wiki
Saltar a: navegación, buscar

La aplicación Web-MeetMe Control, esta diseñada, para ofrecer una interfaz gráfica de gestión completa, para salas de conferencias MeetMe integradas como Asterisk Realtime, para su gestión dínamica en tiempo real.

Conferencias en Web-MeetMe

Principios Básicos

Esta aplicación fue diseñada por Areski Belaid, mismo creador de la aplicación CDR-Stats y amplio colaborador de la empresa Star2Billing Inc., en 2005, y basada en el lenguaje de programación PHP.

Con esta aplicación es posible, controlar, administrar y además programar de una forma sencilla, las salas de conferencias disponibles en el sistema MeetMe.

La introducción de esta aplicación trae las siguientes mejoras:

  • Impedimos la creación de salas de conferencias con la misma denominación que suelen derivar en problemas
  • Podemos programar salas de conferencias recurrentes en el tiempo
  • Podemos tomar el control de conferencias programadas en el futuro, y conferencias ya finalizadas
  • Existe una interfaz para llevar el control de las grabaciones de las conferencias de forma sencilla
  • Es posible habilitar funcionalidades adicionales de control, que no permite el sistema de administración por DTMF dentro de la sala, como la posibilidad de expulsar determinados participantes
  • También podemos extender el tiempo total de una conferencia si tenemos un tiempo máximo programado
  • Podemos realizar una llamada saliente, cuyo propósito sera interconectar a un llamado externo con nuestra conferencia, muy práctico si no queremos que el llamado consuma económicamente en su teléfono.

Instalación

El procedimiento de instalación del sistema Web-MeetMe es el siguiente

Preparación Inicial

En primer lugar, vamos a crear dentro de nuestro directorio raiz web, un directorio donde contener nuestra aplicación:

# sudo mkdir /var/www/web-meetme


# sudo chown asterisk:asterisk /var/www/web-meetme/


Es relativamente importante que al directorio lo llamemos web-meetme, porque el codigo PHP no esta demasiado adaptado para utilizar otros nombres de directorios, y tendremos que estar modificando luego en la configuración específica varios parámetros para que todo funcione bien.

Por otro lado, vamos a descargar las fuentes de Web-Meetme que luego traspasaremos a este directorio recien creado:

# cd /usr/src


# wget http://sourceforge.net/projects/web-meetme/files/latest/download -O web-meetme.tgz


Las descomprimimos:

# tar -xvf web-meetme.tgz


Y las copiamos al directorio en consecuencia:

# cp -r web-meetme/* /var/www/web-meetme/


Sistema de Base de Datos

Ahora tenemos que configurar la estructura de la base de datos donde se gestiona este sistema, para ello necesitamos crear una nueva base de datos, por ejemplo, si estamos utilizando MySQL:

# mysqladmin -u root -p create meetme


Y dentro de este, cargar la estructura de tablas de Web-Meetme:

Archivo: ./tablaswebmeetme
connect meetme;

CREATE TABLE `booking` (
`bookId` int(10) unsigned NOT NULL auto_increment,
`clientId` int(10) unsigned default '0',

`confno` varchar(30) default '0',
`pin` varchar(30) NOT NULL default '0',
`adminpin` varchar(30) NOT NULL default '0',
`starttime` datetime NOT NULL default '0000-00-00 00:00:00',
`endtime` datetime NOT NULL default '0000-00-00 00:00:00',
`dateReq` datetime NOT NULL default '0000-00-00 00:00:00',
`dateMod` datetime NOT NULL default '0000-00-00 00:00:00',
`maxUser` varchar(30) NOT NULL default '10',
`status` varchar(30) NOT NULL default 'A',
`confOwner` varchar(30) NOT NULL default ,
`confDesc` varchar(100) NOT NULL default
,
`adminopts` varchar(10) NOT NULL default ,
`opts` varchar(10) NOT NULL default
,
`sequenceNo` int(10) unsigned default '0',
`recurInterval` int(10) unsigned default '0',
`recordingfilename` varchar(128) default NULL,
PRIMARY KEY (`bookId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=145 ;

CREATE TABLE `cdr` (
`bookId` int(11) default NULL,
`duration` varchar(12) default NULL,
`CIDnum` varchar(32) default NULL,
`CIDname` varchar(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `notifications` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`book_id` int(11) NOT NULL default '0',
`ntype` char(10) default NULL,
`ndate` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `participants` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`book_id` int(10) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=782 ;

CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`email` varchar(100) NOT NULL default ,
`password` varchar(25) default NULL,
`first_name` varchar(50) default NULL,
`last_name` varchar(50) default NULL,
`telephone` varchar(15) default NULL,
`admin` varchar(5) NOT NULL default 'User',
PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;


Cargamos este fichero dentro de nuestra base de datos recien creada:

# mysql -u root -p meetme < tablaswebmeetme.sql


Y si queremos por seguridad, podemos otorgarle privilegios a un usuario diferente a "root" por ejemplo llamado Asterisk:

# mysql -u root -p meetme -e "mysql -u root -p -e "GRANT ALL PRIVILEGES ON meetme.* TO 'asterisk'@'localhost';"


Necesitamos crear un usuario que va a hacer las veces de administrador del sistema. Para esto tenemos varias opciones:

  • Podemos dejar el sistema abierto sin autetificación
  • Por otro lado si tenemos un servidor LDAP, podriamos sincronizarlo con nuestro sistema Web-Meetme como veremos más adelante
  • Tambien podemos utizar la tabla "user" que hemos creado anteriormente para utilizar un sistema de autentificación basado en SQL, para ello necesitamos crear un usuario administrador de la siguiente forma:
# mysql -u root -p meetme -e "INSERT INTO meetme.user (first_name, last_name, email, telephone, password, admin)
VALUES ('Asterisk', 'Administrator', 'admin@wikiasterisk.com', '912345678', 'asterisk', 'Admin');"


Considerar que en este caso el usuario será: admin@wikiasterisk.com y la contraseña será: asterisk

Configuración Asterisk Realtime

Ahora necesitaríamos configurar el sistema Asterisk Realtime considerando concretamente que la base de datos a la que tenemos que conectar se llamara meetme y la tabla donde están almacenadas las salas de conferencias, según hemos especificado en las anteriores consultas SQL, se llamara booking, por lo demas, todo es igual que cualquier otra implantación basada en Asterisk Realtime.

Configuración Específica

Ahora necesitamos configurar algunos parámetros especificos del sistema Web-Meetme. Por un lado tenemos que concretar los parámetros para que este pueda conectar a nuestra base de datos. Para ello editamos dentro de nuestro directorio raiz web, dentro del directorio donde hayamos instalado web-meetme (ejemplo /var/www/web-meetme), editamos el fichero dentro del directorio /lib/database.php:

Archivo: /var/www/web-meetme/lib/database.php
include_once 'DB.php';
$database = 'meetme';
$host = 'localhost';
$username = 'asterisk';
$password = 'asterisk';


Observamos que hace referencia a un fichero php, llamado DB.php. Este script hace referencia a las librerías PHP-PEAR con lo cual hemos de instalarlas:

# sudo aptitude install php-pear


# sudo pear install db


Con esto ya el sistema funcionaría bajo mínimos, sería recomendable introducir configuración adicional para que quede mejorado

Configuración PHP-AGI

Resulta que tambien podemos entralazar nuestro sistema Web-MeetMe con la interfaz AMI, aplicando algunas funciones de AGI concretamente para el lenguaje PHP, con PHP-AGI [1] y asi poder ver en tiempo real por ejemplo, los usuarios conectados a una sala de conferencias a traves de la interfaz.

Considerando que aunque es muy posible que ya tengamos phpagi instalado, según podemos ver en el apartado de AGI instalado en el directorio /var/lib/asterisk/agi-bin/phpagi, el sistema Web-Meetme ya incorpora una versión dentro de su directorio raíz adaptada al mismo.

Concretamente Web-Meetme utiliza una clase llamada AGI_AsteriskManager que entralaza código PHP con el sistema AMI. Para que esto funcione, simplemente tenemos que preparar un fichero de configuración dentro del directorio de configuraciones de Asterisk, llamado phpagi.conf. Existe un fichero de ejemplo para este cometido dentro del directorio /web-meetme/phpagi/:

Archivo: /etc/asterisk/phpagi.conf
[phpagi]
debug=true
error_handler=true
admin=sir.louen@gmail.com
hostname=wikiasterisk.com
tempdir=/var/spool/asterisk/tmp/
[festival]
text2wave=/usr/bin/text2wave
[asmanager]
server=localhost
port=5038
username=meetme
secret=meetme
[cepstral]
swift=/opt/swift/bin/swift
voice=David


Tampoco vamos a entrar en detalles en este fichero de ejemplo, debido a que esto debe quedar mejor explicado dentro de AGI en el apartado específico de PHPAGI.

Por otro lado configurar el fichero de configuración de AMI para que realice esta conexión según los parámetros que hemos especificado en phpagi.conf:

Archivo: /etc/asterisk/manager.conf
[meetme]
secret = meetme
read = call
write = command,originate


Configuración Adicional

La mayor parte de la configuración adicional se realiza en el fichero dentro del directorio web de web-meetme/lib llamado defines.php. Sería recomendable cambiar los siguientes parámetros de configuración

Parámatros Globales

Existen unos parámetros globales que afectan a todo el sistema Web-Meetme si no estan bien configurados:

Archivo: /var/www/web-meetme/lib/defines.php
define ("WEBROOT", "http://<hostname_servidor_webmeetme>/web-meetme/");
define ("FSROOT", "/var/www/web-meetme/");
define ("LIBDIR", FSROOT."lib/");


  • WEBROOT: Tenemos que especificar la URL exacta de nuestro servidor ya que existen algunos scripts que pueden dejar de funcionar.
  • FSROOT: En caso que el sistema web-meetme al que hacemos referencia constantemente, no este en esta ruta.
  • LIBDIR: Si queremos cambiar el directorio con las librerías del sistema Web-Meetme.

Invitaciones Salientes

Es posible realizar llamadas de invitación como llamadas salientes. Para ello hay que editar el apartado:

Archivo: /var/www/web-meetme/lib/defines.php
//Outcall defaults
define ("CHAN_TYPE", "Local");
define ("OUT_CONTEXT", "extensiones");
define ("OUT_PEER", "");
define ("OUT_CALL_CID", "Invitación Meetme <102>");


  • Para CHAN_TYPE: Podemos elegir que tipo de canal será el que realizará la llamada, si dejamos Local, dejaremos que sea la marcación que este definida en el DialPlan la que decida.
  • Para OUT_CONTEXT: En este caso hemos elegido como contexto extensiones, pero puede ser cualquier contexto que decidamos, donde el sistema pueda dirigirse para mandar llamadas salientes.
  • Para OUT_PEER: Podemos definir concretamente que Par del CHAN_TYPE, sera el que realice la llamada directamente
  • Para OUT_CALL_CID: Podemos decidir el CallerID que tendrá la llamada de invitación cuando se ejecute.

Por otro lado, con las últimas versiones de Asterisk, han habido algunas modificaciones en el formato de los comandos AMI, en este caso el Originate que es el encargado de lanzar la llamada a un tercero para establecer la conexión de invitación a la sala de conferencias. Existe un script que es el que realiza esta gestión en el directorio principal de Web-Meetme (/var/www/web-meetme/call_operator.php), llamado call_operator.php. Para ello es necesario modificar la linea del mismo:

  • if ( CHAN_TYPE == "Local") { $channel = CHAN_TYPE . "/" . $invite_num; }

Por la linea:

  • if ( CHAN_TYPE == "Local") { $channel = CHAN_TYPE . "/" . $invite_num . "@" . OUT_CONTEXT; }

Y así funcionaría correctamente.

Autentificación de Usuarios

Existen tres formas de ser configurado, para ello se encuentra la siguiente parte:

Archivo: /var/www/web-meetme/lib/defines.php
define ("AUTH_TYPE", "sqldb");
define ("ADMIN_GROUP", "Domain Admins");
define ("AUTH_TIMEOUT", "3");


  • AUTH_TYPE: Aqui podemos definir dos opciones: adLDAP para autentificación por LDAP, o sqldb si queremos utilizar la tabla "user" que creamos antes en la base de datos SQL. Si esta linea la comentamos, no existiría opción de autentificación y el sistema quedaría abierto.
  • ADMIN_GROUP: Aqui podemos definir que grupo del LDAP será el equivalente a los administradores del sistema
  • AUTH_TIMEOUT: Tiempo que se guarda la sesión antes de que expire, y tengamos que volver a identificarnos en el sistema, se expresa en horas.

Parámetros Informativos

También podemos definir algunos parámetros informativos útiles durante el uso del sistema. Considerando que el sistema no esta traducido, puede que no sean demasiado utiles según nuestro proposito:

Archivo: /var/www/web-meetme/lib/defines.php
define("LOCAL_SUPPORT", "Departmento Soporte");
define("LOCAL_PHONE", "918765432");define("PHONENUM", "912345678");


  • LOCAL_SUPPORT: Nombre del departamento de Soporte, o incluso de la persona encargada del mismo.
  • LOCAL_PHONE: Numero de teléfono Direct-Dial In al que es posible llamar para entrar dentro del sistema de conferencias
  • PHONENUM: Número de teléfono del departamento de Soporte.

Referencias

  1. Proyecto PHP-AGI Matthew Asham (2003)

Véase también

Enlaces Externos