Der Marktführer bei Open-Source-CRMs Sugar hat in seiner jüngsten Version Cloudkonnektoren und ein API für den Import von unstrukturierten Daten aus externen Quellen eingeführt. Damit lassen sich auch die Protokolle gängiger Instant-Messaging-Clients komfortabel einbinden.
Glaubt man Sales- und Marketingspezialisten, dann gewinnt neben der Cloud auch der Chat als Kommunikationskanal zum Kunden immer größere Bedeutung. Die Auftraggeber schätzen das Gefühl permanenter Verfügbarkeit der Ansprechpartner, sei es für Support oder einfach nur neue Produktinformationen.
Chat als direkter Draht zum Kunden, Cloud als Speicher
Zwar erweist sich dieser direkte Draht zwischen Kunde und Anbieter oft als sehr fruchtbar, aber die Daten über die Kommunikation sind meist an einen einzelnen Mitarbeiter und dessen Jabber-, ICQ- oder MSN-Account gebunden. Scheidet der aus, verliert das Unternehmen einen wichtigen, vielleicht den wertvollsten Kanal zum Kunden.
Jederzeit Vollzugriff auf die Daten in der Cloud, das verspricht der Hersteller des freien Customer Relationship Managements (CRM) Sugar [1] mit dem neu überarbeiteten API in seiner Version 6.4 [2]. Die Kombination aus den neuen Cloudfunktionen im Sugar-API, den Daten des Pidgin Messenger und den Clouddiensten von Dropbox macht es dabei zugleich möglich, im CRM automatisch ein Archiv (History) der Chat-Kommunikation vorzuhalten, sodass jeder neue Mitarbeiter mit einem Blick ins CRM auf dem aktuellen Stand ist, bevor er den Kontakt mit dem Kunden aufnimmt.
Pidgin mit Dropbox
Pidgin [3] beherrscht zahlreiche IM-Formate, das folgende Beispiel nutzt Yahoos Messaging [4] als Beispiel, doch funktioniert auch jedes andere Netzwerk (Abbildung 1). Dropbox [5] dient dazu, die Instant-Messaging-Protokolle automatisch zwischen der Maschine des Mitarbeiters und der Wolke zu synchronisieren, an der auch der Sugar-Server teilhat.

Abbildung 1: Unter Ubuntu 11.10 beherrscht Pidgin normalerweise 17 Instant-Messaging-Netzwerke. Mit Erweiterungen lässt sich das noch ausbauen, auch ein Facebook-Plugin steht bereit.
Der amerikanische Dienst ist bei sicherheitsbewussten Admins zwar umstritten und hat nach einigen entdeckten Sicherheitslücken keinen allzu guten Ruf, er findet sich dennoch (dank der Android- und iPhone-Unterstützung) in zunehmendem Maße auf den Rechnern der Anwender als zentraler Dienst für den Austausch von Daten und die Synchronisation mehrerer Rechner.
Auf der Webseite [6] schließlich findet sich das im Folgenden vorgestellte Sugar-Plugin nebst Installationsanleitung. Der Admin hat dabei nur vier Schritte abzuarbeiten:
- Dropbox installieren und für den gewünschten Pfad konfigurieren.
- Das Sugar-CRM-Plugin herunterladen, im Wurzelverzeichnis von Sugar entpacken und sich einen Überblick über die Funktionen verschaffen. Das Plugin ist bereits voll funktionsfähig.
- Jetzt muss er Pidgin anweisen, die Logfiles in den Dropbox-Pfad zu schreiben.
- Testweise chatten und den Erfolg in Sugars Webinterface kontrollieren.
Davon erweisen sich nur die Details des Sugar-Plugins als Handarbeit im Editor, denn sowohl Dropbox und Pidgin als auch Sugar CRM lassen sich fast komplett per Mausklicks in Menüs und Dialogen dazu überreden, ihren Teil beizutragen (siehe das Readme auf [6]).
Studio-Arbeit
Das im Folgenden beschriebene Plugin nutzt die Sugar Cloud Connectors des neuen API, die die Webseite [7] ausführlich beschreibt und die der Hersteller erstmals Anfang des Jahres mit der neuen Version 6.4 veröffentlichte. Mit ihnen will er Kunden und Entwicklern eine einfache Schnittstelle für externe, aber vor allem die trendigen “Social CRM”-Anwendungen bieten. Externe und vor allem unstrukturierte Daten sollen so den Weg ins Kundenmanagement finden.
Damit das klappt, bedarf es zuerst einer Verknüpfung zwischen einem bestehenden Sugar-Kontakt und einem Yahoo-Kontakt. Anlaufstelle für derartige Aufgaben ist das Sugar Studio (Abbildung 2), wo auch programmiertechnisch weniger versierte Anwender per Drag&Drop Felder und Beziehungen erstellen oder Layoutvorgaben anpassen. Um das Yahoo-Feld hinzuzufügen, wechselt der Admin in seinem Sugar-Webinterface zu »Admin | Studio | Contacts | Fields« .

Abbildung 2: Das Sugar CRM Studio ist die zentrale Anlaufstelle für den Admin, der sein CRM an die Bedürfnisse des Unternehmens anpassen möchte.
Die IM-Felder hinzufügen
Dort findet er eine Liste der Felder, die im Kontaktmodul derzeit verfügbar sind. Ein Klick auf »Add Field« fügt ein weiteres hinzu, wobei für den Yahoo-Account der Datentyp »TextField« , der Feldname »yahoo_id« und als Anzeigename »Yahoo ID« als Einstellungen ausreichen. Jetzt noch das Feld dem gewünschten Layout hinzufügen: »Edit View« im »Layouts« -Bereich lässt sich per Drag&Drop bedienen, eine neue Reihe und dort das neue Feld legt der Admin mit der Maus fest.
Nach dem abschließenden Speichern wiederholt er diese Schritte für die Detailansicht (»DetailView« ). Hat er Dropbox und Pidgin bereits richtig konfiguriert, zeigt sich jetzt die Detailansicht der Kontakte wie in Abbildung 3, sobald er einen Yahoo-Kontakt eingetragen und gespeichert hat.
Neben dem Feld für die Yahoo-ID zeigt sich das Dropbox-Icon mit der offenen Schachtel, doch auch dieser Verweis ist konfigurierbar. In der aus dem Sugar-Plugin [6] stammenden Datei »custom/modules/Connectors/connectors/sources/ext/rest/dropboxpidgin/dropboxpidgin.php« finden sich die Einträge:
class ext_rest_dropboxpidgin extends ext_rest {
protected $_enable_in_wizard = false;
protected $_enable_in_hover = true;
protected $_has_testing_enabled = false;
»hover = true« definiert hier, ob Sugar die offene Schachtel neben dem Eintrag anzeigt oder nicht. »$_enable_in_wizard« definiert, ob der Konnektor auch im Import-Wizard verfügbar ist, »$_has_testing_enabled« legt fest, ob Unit-Tests erwünscht sind oder nicht. Wenn ja, bedarf es im Plugin einer »test()« -Funktion. Das Icon für »hover« bestimmt
public function getIconFilePath() {
return 'custom/modules/Connectors/connectors/formatters/ext/rest/dropboxpidgin/tpls/dropbox.gif';
}
in der Datei »custom/modules/Connectors/connectors/formatters/ext/rest/dropboxpidgin/dropboxpidgin.php« .
Sugar CRM trennt Format und Inhalt
Die beiden Verzeichnisse unter »connectors« (»formatters« und »sources« ) dienen übrigens dazu, Inhalt und Präsentationsschicht voneinander zu trennen. Die »formatters« -Klasse formatiert die Inhalte, »sources« verarbeitet die Daten.
Hat bis hierhin alles geklappt, dann erscheint beim Mouseover über dem Dropbox-Icon eine Liste aller für diese Person verfügbaren Instant-Messaging-Protokolle.
Der Formatierer zeigt eine aus dem Template »custom/modules/Connectors/connectors/ formatters/ext/rest/dropboxpidgin/tpls/default.tpl« generierte Ansicht an, für den Hover-Befehl sind die folgenden Zeilen zuständig:
function show_ext_rest_dropboxpidgin(event) {if(dropboxpidginHoverActivated == true) return;
dropboxpidginHoverActivated = true;
}
Diese Funktion ist mit dem »hover« -Event verknüpft, der Code hier prüft einfach, ob er im Rahmen eines API-Call aufgerufen wurde. Anschließend löst (immer noch in »default.tpl« ) der Code in Listing 1 einen Ajax-Aufruf aus.
Listing 1
default.tpl
01 YAHOO.util.Connect.asyncRequest('GET', 'index.php?module=Connectors&action=CallConnectorFunc&source_id=ext_rest_dropboxpidgin&source_func=getLogs&yahoo_id='+dropboxpidginYahooIdValue, {
02 success: function (o) {
03 var data = YAHOO.lang.JSON.parse(o.responseText);
04 Y_DBP.one("#dropboxpidgin_loading").hide();
05 dropboxpidginHoverActivated = false;
06 //build out the popup list
07 var html = '';
08 if(data.logs) {
09 var logLength = data.logs.length;
10 for(var i=0; i < logLength; i++) {
11 //if(i % 50 == 0) {alert(data.logs[i].path);}
12 html += '<li class="dp_listitem">';
13 html += '<strong>Conversation:</strong>'+data.logs[i].path+'<br/>';
14 html += '<strong>Size:</strong>'+data.logs[i].size+'<br/>';
15 html += '<button onclick="archiveLog(\''+data.logs[i].path+'\')">Archive</button>';
16 html += '</li>';
17 }
18 }
19 document.getElementById("dropboxpidgin_container").innerHTML = '<ul id="dropboxpidgin_list"></ul>';
20 document.getElementById("dropboxpidgin_list").innerHTML += html;
21 },
22 failure: function(){
23 Y_DBP.one("#dropboxpidgin_loading").hide();
24 dropboxpidginHoverActivated = false;
25 }
26 });
Wie die URL zeigt, bringt Sugar einen handlichen Mechanismus mit, um Funktionen direkt aus einem angepassten Konnektor heraus aufzurufen. Ohne diese müsste ein Entwickler selbst eine speziell angepasste Custom-Funktion schreiben und einbinden. Der Ajax-Aufruf findet sich in der Funktion
public function ext_getLogs( )
if(empty($_REQUEST['yahoo_id'])) {
return array('success'=>FALSE,'errorMessage'=>'No Yahoo ID found');
}
$this->initEAPM();
return $this->_eapm->getLogs($_ REQUEST['yahoo_id']);
}
in der Datei »custom/modules/Connectors/connectors/sources/ext/rest/dropboxpidgin/dropboxpidgin.php« .
Ajax, Dropbox, Open Auth
Abschließend ruft »custom/include/externalAPI/DropboxPidgin/ExtAPI/DropboxPidgin.php« Dropbox auf mit
$params = array('file_limit'=>'10');
//ignore Apps/DropboxPidgin
$urlPath = 'metadata/sandbox/.purple/logs/yahoo/'.$current_user->messenger_id.'/'.$yahoo_id.'/';
$response = $this->makeRequest("GET", $urlPath, $params);
$logs = $this->formatLogList($response);
return array('success'=>TRUE,'logs'=>$logs);
und verlangt eine Liste der Yahoo-Logs für diese ID.
Weil Sugar dabei gleich auch die Authentifizierung mit Open Auth [8] an Dropbox übernimmt, braucht sich der Admin damit eigentlich nicht weiter zu beschäftigen. Doch gibt es einige Dropbox-spezifische Teile des Handshake, die er durch Workarounds erzwingen muss. In »ExtAPI/DropboxPidgin.php« sind die notwendigen Änderungen bereits vorgenommen, ein Artikel auf Linux-Magazin Online Plus erklärt, was die betreffenden Hacks genau machen. Achtung: Wer Sugar mit der »site_url« als »localhost« betreibt, bekommt bei Open Auth mit Dropbox Probleme, die sich in Sugars »config.php« oder durch einen Eintrag in »/etc/hosts« beheben lassen.
Jetzt kann der Connector mit dem Dropbox-API [9] kommunizieren. Das Sugar-Plugin formatiert die Protokolle der IM-Kommunikation ein wenig um und verringert ihr Datenvolumen. Sugar selbst enkodiert sie nach Json-Art, damit es sie leichter parsen und darstellen kann (Abbildung 4).
Das Ergebnis ist vielleicht noch nicht ansehnlich, ermöglicht es einem Mitarbeiter aber bereits, die IM-Kommunikation nachzuvollziehen. Wie die Schaltfläche »Archive« in Abbildung 4 zeigt, kann der Sugar-Anwender die Kommunikation auch gezielt archivieren, also auf dem Sugar-Server permanent vorhalten (Abbildung 5). Welche Einträge in den Templates und Skripten dafür zuständig sind, erklärt ebenfalls der Artikel auf Linux-Magazin Online Plus.
Jetzt kann jeder andere Sugar-Anwender innerhalb kurzer Zeit nachvollziehen, was Kollegen mit dem Kunden im Yahoo-Chat besprochen haben, ohne sich erst auf die Suche zu machen oder die IM-Protokolle vom Admin aus Backups wiederherstellen zu lassen, etwa wenn der Kollege mittlerweile ausgeschieden ist.
Verbesserungsfähig
Das Pidgin-Dropbox-Plugin reizt die Fähigkeiten des Sugar-API [11] bei Weitem nicht aus. Zahlreiche Verbesserungen sind denkbar, so ließe sich der seit Sugar 6.3 enthaltene Konnektor für den Import-Wizard einbinden und die komplette IM-Kommunikation mit einem Kontakt auf einen Rutsch ins CRM importieren. Auch Previews oder ein freundliches Label für die IM-Protokolle sind denkbar. So mancher Eintrag im Pidgin-Konnektor ist hard-coded und vielerorts könnte das Plugin noch Detailpflege erhalten. Dennoch erweist es sich bereits in dieser Fassung als hilfreich.
Infos
- Sugar CRM: http://www.sugarcrm.com
- Sugar-API: http://apidocs.sugarcrm.com
- Pidgin: http://www.pidgin.im
- Yahoo Messaging: http://de.messenger.yahoo.com
- Dropbox: http://www.dropbox.com
- Dropbox-Pidgin-Plugin: https://github.com/eggsurplus/DropboxPidgin
- Sugar Cloud Connectors: http://www.sugarcrm.com/feature/platform
- Open Auth: http://oauth.net
- Dropbox-API: https://www.dropbox.com/developers/reference/api









