Cómo integrar Asterisk con eGroupWare
Una de las mejores alternativas al popular Microsoft Exchange, es sin duda eGroupWare entre otros motivos porque además de ser libre y gratuito (no hay que pagar licencias como el caso del software de Microsoft), se integra perfectamente con todo tipo de software utilizado normalmente en la empresa como el Outlook, Thunderbird, Evolution, Kontact, e incluso permite sincronización con BlackBerrys, PDAs y teléfonos móviles mediante SyncML.
Una de las ventajas de que sea libre (algo que mucha gente parece no entender o no interesar) es que cualquier persona puede desarrollar una aplicación que interactue con este software sin tener que dar explicaciones ni pagar licencias ocultas.
Pues bien, la empresa sevillana Ene Soluciones acaba de publicar un sencillo manual para integrar eGroupWare aplicación con nuestro Asterisk, permitiéndonos ver con nuestro softphone preferido el nombre de la persona que nos llama si previamente hemos introducido los datos de esta persona en la base de datos de eGroupWare con nuestro cliente de correo o desde el interfaz de la aplicación.
Esto, unido a uno de tantos click-to-dial para hacer llamadas desde nuestro cliente de email con nuestro Asterisk, nos permitirá tener al jefe contento y a los clientes aún más.
Enlace al manual para integrar Asterisk con eGroupWare.
Debate en este artículo
-
* Script en php para pasar el XML al teléfono por HTTP en vez de
usar el FTP: -
A ver si así me deja…borrar «//»
// -
Pues parece que no, podéis verlo en la lista:
http://groups.google.es/group/asterisk-es/browse_frm/thread/2698983dacb56fd0/b9e4708e538d763f?hl=es&lnk=gst&q=Actualizaci%C3%B3n+din%C3%A1mica#b9e4708e538d763f



Otra forma de hacerlo es sincronizar la «Asterisk CallerID database» y de paso te cree el XML para el teléfono.
Espero que os sirva, el código no está demasiado comentado, así que si tenéis alguna duda o alguna idea para mejorarlo…
El código a partir de una BBDD en MySQL, crea:
* el archivo XML: «gs_phonebook.xml» con la agenda para el teléfono, en mi caso un GPX2000. Sólo pasará los contactos cuyo nombre empiece por «*», no se cuanto es el límite de contactos para este teléfono, pero la agenda completa no me la acepta.
* el script «/tmp/phonebook.sh» que pasa los contactos al Asterisk CallerID database.
Los datos los guardará con lo siguiente al inicio de cada contacto:
* (T): Para los teléfonos fijos.
* (M): Para los teléfonos móviles.
* (F): Para los Faxes. (Estos por lógica no se pasarán al XML)
De esta forma que cuando nos llamen, añadiendo:
* «exten=> s,n,LookupCIDName(${CALLERIDNUM})» para Asterisk1.2
* «exten = s,n,Set(CALLERID(name)=
${DB(cidname/${CALLERID(num)})})» para Asterisk1.4
al dialplan tendremos el nombre de quien nos llama en la pantalla de
nuestro teléfono y lo guardará en el CDR.
*Podemos usar «cron» para automatizar la tarea:
crontab -l
# m h dom mon dow command
#0 4 * * * curl http://localhost/gs.php >/dev/null 2>&1 /dev/null
#15 4 * * * sh /tmp/phonebook.sh >/dev/null 2>&1 /dev/null
* Script en php principal: gs.php:
<?php
//Cambiar los **** por los datos de vuestra BBDD
$host = «******»;
$user = «******»;
$pass = «******»;
$database = «******»;
$linkID = mysql_connect($host, $user, $pass) or die(«Could not connect
to host.»);
mysql_select_db($database, $linkID) or die(«Could not find database.»);
//Cambiar los campos de vuestra BBDD,
//pero acordaros de hacerlo en todo el código
//fn: Nombre
//org_name: Empresa
//tel_work: Número fijo
//tel_cell: Número móvil
//tel_fax: Número de Fax
$query = «SELECT fn, org_name, tel_work, tel_cell, tel_fax FROM
egw_addressbook ORDER BY fn»;
$resultID = mysql_query($query, $linkID) or die(«Data not found.»);
print(«n»);
$xml_output = «n»;
$xml_output .= «n»;
$sh_output = «#!/bin/bashn»;
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
//le damos «forma» a los datos
$row = mysql_fetch_assoc($resultID);
$msg = trim($row[‘fn’]);
$msg = ereg_replace(«[[:space:]]»,»_»,$msg);
$msg = ereg_replace(«_+»,»_»,$msg);
$msg2 = trim($row[‘org_name’]);
$msg2 = ereg_replace(«[[:space:]]»,»_»,$msg2);
$msg2 = ereg_replace(«_+»,»_»,$msg2);
$msg3 = substr($msg,1);
$busqueda=array
(‘á’,’Á’,’é’,’É’,’í’,’Í’,’ó’,’Ó’,’ú’,’Ú’,’ñ’,’º’,’ª’,’&’,’ü’);
$reemplazar=array
(‘a’,’A’,’e’,’E’,’i’,’I’,’o’,’O’,’u’,’U’,’n’,’o’,’a’,’&’,’u’);
//comprobamos el campo del teléfono móvil
if(is_numeric($row[‘tel_cell’])){
$num = trim($row[‘tel_cell’]);
$cadena3='(M)’.$msg3.’-‘.$msg2;
$cadena='(M)’.$msg.’-‘.$msg2;
$cadena2 = htmlentities($cadena);
$cadena2 = str_replace($busqueda, $reemplazar, $cadena2);
//si empieza por «*» lo añadimos al XML sin el «*»
if (eregi(«^[*]»,$msg)){
$xml_output .= «tn»;
$xml_output .= «tt» . $cadena3 .
«n»;
$xml_output .= «tttntttt» .
$num . «n»;
$xml_output .= «ttt
t0n»;
$xml_output .= «tttn»;
$xml_output .= «tn»;
}else{}
$sh_output .= «/usr/sbin/asterisk -rx «database put cidname $num
$cadena2″n»;
}else{}
//comprobamos el campo del teléfono fijo
if(is_numeric($row[‘tel_work’])){
$num = trim($row[‘tel_work’]);
$cadena3='(T)’.$msg3.’-‘.$msg2;
$cadena='(T)’.$msg.’-‘.$msg2;
$cadena2 = htmlentities($cadena);
$cadena2 = str_replace($busqueda, $reemplazar, $cadena2);
//si empieza por «*» lo añadimos al XML sin el «*»
if (eregi(«^[*]»,$msg)){
$xml_output .= «tn»;
$xml_output .= «tt» . $cadena3 .
«n»;
$xml_output .= «tttntttt» .
$num . «n»;
$xml_output .= «ttt
t0n»;
$xml_output .= «tttn»;
$xml_output .= «tn»;
}else{}
$sh_output .= «/usr/sbin/asterisk -rx «database put cidname $num
$cadena2″n»;
}else{}
//comprobamos el campo del fax
if(is_numeric($row[‘tel_fax’])){
$num = trim($row[‘tel_fax’]);
$cadena='(F)’.$msg.’-‘.$msg2;
$cadena2 = htmlentities($cadena);
$cadena2 = str_replace($busqueda, $reemplazar, $cadena2);
$sh_output .= «/usr/sbin/asterisk -rx «database put cidname $num
$cadena2″n»;
}else{}
}
$xml_output .= «n»;
//creamos el archivo XML para el teléfono
$fp = fopen(‘gs_phonebook.xml’, ‘wb’);
fwrite($fp, $xml_output);
fclose($fp);
//creamos el script para actualizar «Asterisk CallerID database»
$fs = fopen(‘/tmp/phonebook.sh’, ‘wb’);
fwrite($fs, $sh_output);
fclose($fs);
echo $xml_output;
?>
* Script en php para pasar el XML al teléfono por HTTP en vez de
usar el FTP: