Confessioni di un consulente IT

Progetto GTalk Bot #2

Posted in Geek Corner, Programmazione by pigreco314 on 29 aprile, 2009

Dopo aver migrato il sistema operativo della linux box adibita a server ftp (che spreco!) da Slackware a Ubuntu 8.1 sono ritornato sul vecchio progetto di realizzare un bot GTalk che mi consenta di accedere da qualunque client google talk a informazioni disponibili sollo dall’interno della nostra rete aziendale (posta, informazioni anagrafiche, numeri di telefono, ecc.).

E così, lo scorso fine settimana ho sviluppato un prima versione del bot che, collegandosi a Google Talk con un account opportunamente creato, aspetta che il suo padrone gli invii i comandi ai quali è stato addestrato a rispondere.

Uno di questi comandi, che ho chiamato dir, fa sì che il bot acceda al server aziendale LDAP e restituisca informazioni pubbliche relative dipendenti. La sintassi è:

dir keyword [attribute]

dove keyword identifica la chiave di ricerca nella directory (per esempio il nome e cognome di un utente aziendale o una sua sottostringa) e [attribute] è l’attributo cercato (manager,mobile, location, title, ecc.)

Per esempio, se voglio conoscere il numero di cellulare del collega Mario Rossi, è sufficiente che chieda al mio fido assistente:

dir "Mario Rossi" mobile

Nel caso voglia reperire tutte le informazioni pubbliche di Mario Rossi, basterà invece digitare:

dir "Mario Rossi"

Ovviamente questa piccola magia funziona su qualunque dispositivo che supporti Jabber (il protocollo di IM su cui Google Talk è basato) e io ho potuto provarlo su un iPod Touch (sul quale GTalk gira in modo nativo) e un Nokia E65 con Fring installato.

Dopo essermi baloccato un paio d’ore con pygtalkrobot che ho avuto qualche problema a usare mi sono imbattuto nel progetto python-jabberbot che fornisce praticamente tutto quello che serve.

Il modulo jabberbot.py fornisce una classe JabberBot di cui ho modificato il costruttore per consentire di passare come parametri il server Jabber e la porta di connessione. Nel caso di Google Talk il server è talk.google.com. Dato che dall’interno della nostra rete la connessione con il server gtalk funziona solo attraverso la porta 443 (e non la 5222) e non essendo riuscito a forzare l’uso di questa porta nelle istanze della classe JabberBot ho tagliato corto e consentito di specificarne il valore come parametro.

La classe JabberBot fornisce le primitive per connettersi al server nonché ricevere e inviare messaggi. Il vostro bot deve essere definito come classe ereditata da JabberBot ed esporre metodi aggiuntivi per il trattamento dei messaggi. Il nome del metodo deve essere denominato come bot_<parola_chiave> (bot_ è il prefisso comune a tutti i metodi).

Quando il bot riceve un messaggio in cui la prima parola è <parola_chiave> invocherà il metodo corrispondente per il trattamento del messaggio.  Per esempio, per implementare un comando che restituisca il timestamp del server si può usare qualcosa del tipo:

def bot_time( self, mess, args):
"""Displays current server time"""
return str(datetime.datetime.now())

che verrà invocato digitando “time” nella chat con il vostro bot.

Pygtalkrobot usa un approccio simile ma i comandi sono definiti come espressioni regolari. In linea di principio questo approccio è più potente e flessibile ma per i miei scopi l’ho trovato inutilmente complicato.

Per accedere a LDAP ho usato la relativa libreria python-ldap e qualche esempio di query reperito in rete.

Le due revisioni successive dovranno implementare due importanti aggiunte:

  • l’interrogazione del mio file di posta tramite l’interfaccia WebOutlook, gentilmente resa disponibile dopo la migrazione della nostra infrastruttura da Lotus Notes a Outlook. Per questo utilizzerò un altro progetto python: weboutlook che va modificato per supportare la Basic HTTP Authentication usata dall’interfaccia web del nostro nuovo server Exchange
  • l’esecuzione del bot come demone. Di nuovo mi appoggio sulle spalle dei giganti e mi servo della Chris’ Python Page

Ad maiora!

Annunci

Una Risposta

Subscribe to comments with RSS.

  1. […] Quei quattro lettori che mi seguono sapranno senz’altro di che progetto sto parlando. Per gli ospiti di passaggio è disponibile la serie delle due puntate precedenti (parte #1 e parte #2) […]


Rispondi qui

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: