Business Bot Komponenten

Paket-Struktur

Das Java-Projekt hat eine Verzeichnisstruktur zur übersichtlichen Strukturierung der verschiedenen Inhalte. Eine Vorgabe ist, das Verzeichnis mit dem Quellcode und den übersetzten Klassendateien zu trennen. Die üblichen Ordnernamen für Java EE-Projekte sind src und bin.

Note

Anmerkungen für Eclipse: Entwicklungsumgebungen wie Eclipse übersetzen Java-Typen aus dem src- in den bin-Ordner und kopieren Ressourcen wie Bilder und Übersetzungsdateien bei jedem Build ebenfalls in den src-Ordner. Eclipse unterstützt diesen Aufbau standardmäßig, wenn beim Dialog für ein neues Java-Projekt unter Project layout die Option Create separate folders for source and class files aktiviert ist.

Note

Anmerkungen für NetBeans: Unter NetBeans ist die Standardstruktur etwas anders und eng mit dem Build-Tool Ant verbunden. Der Ordner src enthält die Standard-Klassen und Ressourcen, ein zweiter Ordner test die Test-Klassen und Ressourcen. Die übersetzten Java-Klassen nimmt der Ordner build/classes auf. Das Ergebnis des Builds, eine Jar-Datei im Fall eines einfachen Java-Projekts, steht im Ordner dist.

Die Verzeichnisstruktur hat zusätzlich einen lib und resource-Ordner. Im lib-Ordner werden die von Business Bot verwendeten Bibliothek abgelegt. Der resource-Ordner unterteilt sich nochmal in localization für Sprachdateien, media für multimediale Dateien, sowie templates für Nachrichten-Vorlagen. Die Projektstruktur schaut wie folgt aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
BusinessBot<Projectname>
|- src
   |- Package <country.company.businessbot.<application name>
   |- Package <country.company.businessbot.<common>
   |- Package <country.company.businessbot.<database> (optional)
   |- Package <country.company.businessbot.plugin (required)
      |- PluginClient.java (required) (Schnittstelle)
   |- Package <country.company.businessbot.<services>
|- classes
   |- extension.idx (Extension Point für den Klassenlader)
   |- MANIFEST.MF (META Informationen)
|- lib (Bibliotheken)
   |- de.citunius.businessbot.api-1.0.0.jar (Common API für die Business Bot Plattform)
   |- de.citunius.businessbot.api.messenger-1.0.0.jar (Generic Messenger API für die Business Bot Plattform)
   |- de.citunius.businessbot.api.sfb-1.0.0.jar (Skype for Business API für die Business Bot Plattform)
   |- de.citunius.businessbot.api.telegram-1.0.0.jar (Telegram Messenger API für die Business Bot Plattform)
|- resources
   |- localization
      |- string_de.properties (Sprachlabels für Deutsch)
      |- string_en.properties (Sprachlabels für Englisch)
      |- string.properties (Default-Sprachlabels)
   |- media
      |- images
         |- icon.png (Business Bot Icon)
   |- templates
      |- list.ftl (Vorlage für Instant-Nachrichten - Vorlage: Liste)
   build.xml (Apache Ant Build-Konfiguration)
       MANIFEST.MF (Default Projekt META-Informationen)
       plugin.properties (META-Informationen für das Plugin)

Warning

Wichtig: Ein Business Bot darf entweder die Bibliothek Skype for Business API ODER die Telegram Messenger API verwenden, jedoch dürfen NICHT beide Bibliotheken im lib–Verzeichnis des Projekts vorhanden sein.

Plugin Manager

Der Plugin Manager sucht nach den META-Informationen des Plugins, die in der Manifest-Datei unter classes/MANIFEST.MF festgelegt werden. Die MANIFEST.MF-Datei beinhaltet die Einträge wie im folgenden Beispiel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Manifest-Version: 1.0
Implementation-Title: calculator Plugin #1
Implementation-Version: 1.2.0-SNAPSHOT
Plugin-Id: de.citunius.telegram.calculator
Built-By: ME
Created-By: Apache Maven 3.3.9
Plugin-Version: 1.0.0
Plugin-Provider: Citunius GmbH
Plugin-Class: de.citunius.businessbot.plugin.PluginClient
Plugin-Dependencies:
Implementation-Vendor-Id: de.citunius.plugins
Build-Jdk: 1.7.0_67
Specification-Title: calculator Plugin #1
Specification-Version: 1.2.0-SNAPSHOT
Archiver-Version: Plexus Archiver

In der Beispiel-Manifest wurde ein Plugin mit der Id de.citunius.telegram.calculator beschrieben, mit der Klasse de.citunius.businessbot.plugin.PluginClient und Version 0.0.1. Die Plugin-Id muss eindeutig sein und den Konvensionen <Country>.<Company>.<Instant Messenger>.<Application Name> entsprechen, da sonst die Registrierung des Plugins abgelehnt wird. Zudem muss die Plugin-Version mit Semantic Versioning kompatibel sein (Die Business Bot Plattform benutzt jsemver als Implementation für SemVer, weil es den Vergleich von Versionen unterstützt).

Eine andere interne Komponente des Plugin-Managers ist der ExtensionFinder der beschreibt, wie der Plugin-Manager die Erweiterung über den Extensionpoint findet. Der DefaultExtensionFinder sucht nach der Erweiterung mit einer Extension Annotation in der Datei META-INF/extensions.idx. Die Business Bot Plattform benutzt dabei Java Annotation Processing, um alle Klassen der Erweiterung zur Laufzeit zu kompilieren, die mit @Extension annotiert sind und erstellt dafür die entsprechende Extension Index-Datei.

Plugin Lebenszyklus

Jedes Plugin durchläuft die festgelegten Lebenszykluszustände. Der PluginState definiert dabei alle möglichen Zustände. Die primären Plugin-Zustände sind:

  • CREATED
  • DISABLED
  • STARTED
  • STOPPED

Der DefaultPluginManager enthält die folgende Logik:

  • Alle Plugins werden aufgelöst und geladen
  • DISABLED-Plugins werden NICHT automatisch von der Business Bot Plattform gestartet, ABER Sie können ein DISABLED-Plugin manuell starten (und damit aktivieren), indem Sie startPlugin auf der Business Bot Plattform ausführen, anstelle von enablePlugin() + startPlugin()
  • Nur STARTED Plugins können Erweiterungen beitragen. Jeder andere Zustand sollte nicht als betriebsbereit angesehen werden, da die Erweiterung nicht dem laufenden System hinzugefügt wird.

Die Unterschiede zwischen einem DISABLED Plugin und einem STARTED Plugin sind:

  • Ein STARTED Plugin hat die Methode Plugin.start() ausgeführt, ein DISABLED Plugin jedoch nicht.
  • Ein STARTED Plugin kann Erweiterungsinstanzen der Business Bot Plattform hinzufügen, ein DISABLED-Plugin kann dies nicht.

DISABLED-Plugins haben immer gültige Klassenlader und die Klassen können manuell geladen und untersucht werden, allerdings wird der Ressourcenlader - der für die Inspektion wichtig ist - durch die DISABLED-Prüfung blockiert.

Note

Anmerkungen für Eclipse: Wenn Sie Eclipse verwenden, vergewissern, dass die Annotationsverarbeitung für Plugin-Projekte aktiviert ist, die Objekte mit Annotationen registrieren. In den Eigenschaften des Eclipse-Projekts gehen Sie zu Java Compiler > Annotation Processing und überprüfen Sie das die Option Enable Project Specific Settings und Enable annotation processing eingeschaltet ist.

Schnittstelle

Der Übergabepunkt des Plugin-Managers zwischen der Business Bot Plattform und dem Business Bot erfolgt in der Klasse PluginClient im Paket de.citunius.businessbot.plugin. In der Klasse finden sich die Methoden start(), stop() sowie die Klasse BusinessBot die das Interface BusinessBotInterface implementiert. In dieser Klasse werden vom Benutzer eingehende Nachrichten durch die Methode handleIncomingMessage() und vom Geschäftssystem ausgehende Nachrichten in der Methode sendMessage() festgelegt. Die Übergabe von Parameter erfolgt über die HashMap pluginMap.

Business Bot Bibliothek

Folgende Business Bot Bibliotheken werden ausgeliefert:

  • de.citunius.businessbot.api-1.0.0.jar (Common API für die Business Bot Plattform)
  • de.citunius.businessbot.api.messenger-1.0.0.jar (Generic Messenger für die Business Bot Plattform)
  • de.citunius.businessbot.api.sfb-1.0.0.jar (Skype for Business API für die Business Bot Plattform)
  • de.citunius.businessbot.api.telegram-1.0.0.jar (Telegram Messenger API für die Business Bot Plattform)

Es darf nur eine der Messenger Bibliothek (Datei de.citunius.businessbot.api.<messenger>-<version>.jar) pro Business Bot verwendet werden, da es sonst zu Problemen mit den Klassenlader kommen kann. Die Messenger Bibliothek enthält spezifische Funktionen, die nur für den jeweiligen Messenger gültige sind, wie beispielsweise Menü-Struktur.

Datenbankzugriff

Business Bots müssen die Datenhaltung entweder Datei-basiert realisieren oder eine Datenbank verwenden. Der Datenbank-basierte Ansatz muss für jeden Business Bot individuell implementiert werden. Dazu muss die entsprechende Bibliothek für den Datenbankzugriff ins lib-Verzeichnis kopiert werden. Für weitere Information zwecks Implementierung entnehmen Sie bitte der Dokumentation der jeweiligen Hersteller.

National Language Processing (NLP)

Business Bots können um die Fähigkeit von National Language Processing (NLP) und KI (Künstliche Intelligenz) durch entsprechende Bibliotheken erweitert werden. Beispielsweise können hierbei Bibliotheken wie Apache OpenNLP und IBM Watson eingesetzt werden. Für mehr Informationen schauen Sie bitte in die Dokumentation der jeweiligen Hersteller.