Y este ya es para nota . Hace un tiempo se estuvo viendo como podríamos implementar un componente para notificar, en realidad se hablaba de CRM pero en esta ocasión vamos a intentar generalizar.
¿Qué se hizo? Muy facil son 3 líneas:
Obtenemos el jid (jabber_id) del usuario al que se está llamando.
Obtenemos información del llamante que queremos enviar.
Enviamos la información en un mensaje jabber.
Pasos previos o ¿Qué necesitamos?.
1. Almacenar en la BBDD el jid de los usuarios. En esta ocasión he usado la tabla users (la del voicemail). Añadimos el campo jid_username y aquí solamente va la parte del usuario del jid, esto es así ya que el sjap usa siempre el mismo servidor jabber (no lo tiene como parámetro, aunque eso se puede arreglar facilmente)
2. Crear un usuario jabber para que lo use el componente. Por ejemplo, igtcti@jabber.org.
3. Un pequeño script que encontré en Libertonia y que sirve para mandar mensajes vía jabber. http://libertonia.escomposlinux.org/sto ... 181459/780
Y ahora vamos al lío: cti.agi
Y esto como se usa, pues más facil todavía. Nos vamos al dialplan y hacemos lo siguiente:
exten => 215,3,AGI(cti.agi,$NumeroAlQueLlamamos,${CALLERIDN UM});
Aahhh se me olvidava. En las pruebas estoy usando el servidor jabber.org, hay que modificar el sjab.pl en la siguiente linea para poner lo que vayamos a usar:
my $SERVER = "jabber.org";
Cuando alguien llame al 215, me dejaría un mensajito jabber más bonico que toas las cosas.
Y esto es todo amigos, espero que les sirva de ayuda. Estaría bien adaptar este script para que funcionase con las Colas del Asterisk, pero ese es un tema que desconozco por el momento.
¿Qué se hizo? Muy facil son 3 líneas:
Obtenemos el jid (jabber_id) del usuario al que se está llamando.
Obtenemos información del llamante que queremos enviar.
Enviamos la información en un mensaje jabber.
Pasos previos o ¿Qué necesitamos?.
1. Almacenar en la BBDD el jid de los usuarios. En esta ocasión he usado la tabla users (la del voicemail). Añadimos el campo jid_username y aquí solamente va la parte del usuario del jid, esto es así ya que el sjap usa siempre el mismo servidor jabber (no lo tiene como parámetro, aunque eso se puede arreglar facilmente)
2. Crear un usuario jabber para que lo use el componente. Por ejemplo, igtcti@jabber.org.
3. Un pequeño script que encontré en Libertonia y que sirve para mandar mensajes vía jabber. http://libertonia.escomposlinux.org/sto ... 181459/780
Y ahora vamos al lío: cti.agi
Código:
#!/usr/bin/perl ## cti.agi, is an AGI script for sending via XMMP callers information to an user with jabberid ### ####################################################################### ### # ### Please note that this release is incredibly alpha. In fact, so # ### alpha, it probably shouldn't even be released. # ### # ####################################################################### ### ### Version : 0.01 ### ### Author : Antonio F. Cano (antonio@igestec.com) ### Credits : ### For sending jabber messages we use the Sjab perl script modified by atordo ([url]http://libertonia.escomposlinux.org/story/2004/9/29/181459/780[/url]) ### ### Usage : To send a message to a user from the dialplan ### exten => 215,3,AGI(cti.agi,${DNID},${CALLERIDNUM}); ### ####################################################################### ### ### This program is free software; you can redistribute it and/or ### modify it under the terms of the GNU General Public License as ### published by the Free Software Foundation; either version 2 of ### the License, or (at your option) any later version. ### ### This program is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with this program; if not, write to the ### ### Free Software Foundation, Inc., ### 59 Temple Place - Suite 330, ### Boston, MA 02111-1307, USA. ### ####################################################################### use Asterisk::AGI; use DBI; $AGI = new Asterisk::AGI; my %input = $AGI->ReadParse(); my ($dnid,$callerid)=@ARGV; #Obtiene el jid del usuario de la bbdd $jid_user = get_jid($dnid); if ( $jid_user ) { #Obtiene la información del callerid. Lo pongo en una función aparte, ya que esto puede ser todo lo complicado que nuestro sistema requiera. De forma que desde esta función se podría llamar a otro programa/script para que obtuviera esa información $caller_info = get_callerid_info( $callerid ); $mensaje = compose_msg( $caller_info ); my $execf="/var/lib/asterisk/agi-bin/sjab.pl -u igtcti -p password -t $jid_user -q 'iGesTec - cti' -m '$mensaje'"; system($execf); } sub compose_msg( $caller_info ) { my ($segundo,$minuto,$hora,$dia,$mes,$anio,$diaSemana) = (localtime(time))[0,1,2,3,4,5,6]; my @dias = ('Domingo','Lunes','Martes','Miércoles', 'Jueves','Viernes','Sábado'); my @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio', 'Agosto','Septiembre','Octubre','Noviembre','Diciembre'); my $hora = sprintf("%02d:%02d:%02d",$hora,$minuto,$segundo); my $fecha = "$dias[$diaSemana] $meses[$mes] $dia del $anio a las $tiempo"; #Aquí si tuvieramos una Web podríamos componer la URL que modificara la ficha de la persona que está llamando $mensaje = "$fecha - $hora \n\n Le esta llamando " . $callerid_info; return $mensaje; } sub get_callerid_info( $callerid ) { %MYSQL = ( hostname => "localhost", username => "root", password => "", database => "asterisk" ); my $dbh = DBI->connect("dbi:mysql:$MYSQL{database}:$MYSQL{hostname}","$MYSQL{username}","$MYSQL{password}") || die ("No pudo conectar\n"); my $query = "SELECT fullname, email FROM users WHERE mailbox=$callerid"; my $recordset = $dbh->prepare($query); $recordset->execute || die ("No pude ejecutar la consulta"); my $caller_info = $recordset->fetchrow_hashref; if ( $caller_info ) { $mensaje = "$callerid - $caller_info->{fullname} ($caller_info->{email})"; } else { $mensaje = "Usuario desconocido"; } return $mensaje; } sub get_jid( $dnid ) { %MYSQL = ( hostname => "localhost", username => "root", password => "", database => "asterisk" ); my $dbh = DBI->connect("dbi:mysql:$MYSQL{database}:$MYSQL{hostname}","$MYSQL{username}","$MYSQL{password}") || die ("No pudo conectar\n"); my $query = "SELECT jid_username FROM users WHERE mailbox=$dnid"; my $recordset = $dbh->prepare($query); $recordset->execute || die ("No pude ejecutar la consulta"); my $jid = $recordset->fetchrow_hashref; return $jid->{jid_username}; }
exten => 215,3,AGI(cti.agi,$NumeroAlQueLlamamos,${CALLERIDN UM});
Aahhh se me olvidava. En las pruebas estoy usando el servidor jabber.org, hay que modificar el sjab.pl en la siguiente linea para poner lo que vayamos a usar:
my $SERVER = "jabber.org";
Cuando alguien llame al 215, me dejaría un mensajito jabber más bonico que toas las cosas.
Y esto es todo amigos, espero que les sirva de ayuda. Estaría bien adaptar este script para que funcionase con las Colas del Asterisk, pero ese es un tema que desconozco por el momento.
Comentario