Skip to content

Plugin-Entwicklung mit OPM-Paketen

In diesem Abschnitt lernst du, wie du eigene Plugins als OPM-Pakete für OTOBO erstellst, installierst und verteilst.


1. Aufbau einer .sopm

Die SOPM-Datei (*.sopm) enthält alle Metadaten deines Pakets:

xml
<?xml version="1.0" encoding="utf-8"?>
<otobo_package version="1.0">
  <Name>MyExtension</Name>
  <Version>1.0.0</Version>
  <Framework>10.0.x</Framework>   <!-- Mindestversion OTOBO -->
  <Vendor>DeinName GmbH</Vendor>
  <URL>https://github.com/dein-user/otobo-mypackage</URL>
  <License>GPL-3.0</License>
  <Description Lang="de">Erweiterung für spezielle Funktionen</Description>
  <ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Erstveröffentlichung</ChangeLog>
  <Filelist>
    <File Location="Kernel/Config/Files/XML/MyExtension.xml" Permission="644"></File>
    <File Location="Kernel/System/MyExtension.pm"            Permission="644"></File>
    <File Location="Kernel/Modules/AgentMyPage.pm"           Permission="644"></File>
    <File Location="Kernel/Output/HTML/Standard/AgentMyPage.tt" Permission="644"></File>
    <File Location="Kernel/Language/de_MyExtension.pm"       Permission="644"></File>
  </Filelist>
</otobo_package>
  • Name/Version/Framework: Eindeutige Paketkennung und kompatible OTOBO-Version.
  • Filelist: Alle Dateien, die beim Installieren kopiert werden.

2. Dateien & Verzeichnisstruktur

Lege dein Paket in einem eigenen Verzeichnis an, z.B. MyExtension/:

MyExtension/
├─ MyExtension.sopm
├─ Kernel/
│  ├─ Config/Files/XML/MyExtension.xml
│  ├─ System/MyExtension.pm
│  ├─ Modules/AgentMyPage.pm
│  ├─ Output/HTML/Standard/AgentMyPage.tt
│  └─ Language/de_MyExtension.pm
└─ sql/
   └─ create_tables.sql      # optional, für DB-Migrationen
  • Kernel/Config/Files/XML/: Registriert Module, Menüs oder Dynamic Fields.
  • Kernel/System/: Geschäftslogik-Klasse.
  • Kernel/Modules/: Frontend-Controller.
  • Templates & Sprache: TT-Dateien + Übersetzungs-.pm.

3. Paket bauen & installieren

3.1 OPM erzeugen

Nutze das CLI-Tool, um aus deiner SOPM ein OPM zu bauen:

bash
cd /pfad/zu/MyExtension
bin/otobo.Console.pl Dev::Package::Build \
  --sopm-file MyExtension.sopm \
  --output /tmp/MyExtension.opm

3.2 Installation

Admin-UI: Paket hochladen unter Admin → Einstellungen → Paketverwaltung. Konsole:

bash
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opm

Zum Deinstallieren bzw. Aktualisieren:

bash
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade   /tmp/MyExtension.opm

4. Erweiterungspunkte

4.1 Dynamic Fields

In Kernel/Config/Files/XML/MyExtension.xml registrierst du einen neuen Dynamic Field Driver:

xml
<Setting Name="DynamicFields::Driver###MyCustomField" Required="0" Valid="1">
  <Navigation>DynamicFields::Driver</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="DriverName">MyCustomField</Item>
        <Item Key="Module">Kernel::System::DynamicField::Driver::MyCustomField</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Implementiere den Driver in Kernel/System/DynamicField/Driver/MyCustomField.pm.

4.2 Event-Handler

Melde deinen Event-Handler an:

xml
<Setting Name="Event::EventHandler###MyHandler" Required="0" Valid="1">
  <Navigation>Event::EventHandler</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="Module">Kernel::System::Event::Handler::MyHandler</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Handler in Kernel/System/Event/Handler/MyHandler.pm implementieren (Run()-Methode).

4.3 Output-Filter

xml
<Setting Name="Output::Filter###MyFilter" Required="0" Valid="1">
  <Navigation>Output::Filter</Navigation>
  <Value>
    <Array>
      <Item><Hash>
        <Item Key="Module">Kernel::System::Output::Filter::MyFilter</Item>
      </Hash></Item>
    </Array>
  </Value>
</Setting>

Filter in Kernel/System/Output/Filter/MyFilter.pm.


5. Deployment & OTOpar

  • Repository-Index: Erzeuge Packages.xml für eigenes Repo:

    bash
    bin/otobo.Console.pl Dev::Package::RepositoryIndex \
      --directory /var/www/otobo-packages
  • Füge unter SysConfig Package::RepositoryList deine Repo-URL ein.

  • OTOpar: Lade dein OPM bei https://otopar.perl-services.de hoch, damit andere es direkt installieren können.


6. Beispiel: MyCalendar-Paket

  1. SOPM anlegen mit Name MyCalendar.
  2. DB-Skript sql/create_calendar.sql für Tabelle calendar_events.
  3. Konfig-XML definiert neues Ticket-Feld „Termin“.
  4. Core-Modul Kernel/System/CalendarEvent.pm mit CRUD-Methoden.
  5. Frontend-Module Kernel/Modules/AgentCalendar.pm, Template AgentCalendar.tt.
  6. Paket bauen und in OTOpar upladen.

7. Tipps & Best Practices

  • Versionsnummer im sopm anpassen (SemVer).
  • DB-Migrationen in sql/ sauber versionieren.
  • Unit-Tests für System- und Module-Klassen anlegen.
  • Dokumentation im README plus POD in Perl-Modulen.
  • Translations in Language/de_*.pm und en_*.pm.

Damit hast du eine solide Basis, um eigene OTOBO-Plugins zu entwickeln, zu verteilen und in Kundenprojekten wartbar einzusetzen. Viel Spaß!