Développement de plugins avec des paquets OPM
Dans cette section, vous apprendrez à créer, installer et distribuer vos propres plugins sous forme de paquets OPM pour OTOBO.
1. Structure d'un .sopm
Le fichier SOPM (*.sopm) contient toutes les métadonnées de votre paquet :
<?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> <!-- Version minimale OTOBO -->
<Vendor>VotreNom SARL</Vendor>
<URL>https://github.com/votre-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">Première publication</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: Identifiant unique du paquet et version OTOBO compatible.
- Filelist: Tous les fichiers qui seront copiés lors de l'installation.
2. Fichiers & Structure de répertoires
Créez votre paquet dans un répertoire dédié, par exemple 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 # optionnel, pour les migrations de base de données- Kernel/Config/Files/XML/ : Enregistre les modules, menus ou champs dynamiques.
- Kernel/System/ : Classe de logique métier.
- Kernel/Modules/ : Contrôleur frontend.
- Templates & Langues : Fichiers TT + fichier de traduction .pm.
3. Construction & Installation du paquet
3.1 Création de l'OPM
Utilisez l'outil CLI pour construire un OPM à partir de votre SOPM :
cd /chemin/vers/MyExtension
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MyExtension.sopm \
--output /tmp/MyExtension.opm3.2 Installation
Interface d'administration : Téléchargez le paquet sous Admin → Paramètres → Gestion des paquets. Console :
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opmPour désinstaller ou mettre à jour :
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm4. Points d'extension
4.1 Champs dynamiques
Dans Kernel/Config/Files/XML/MyExtension.xml, enregistrez un nouveau pilote de champ dynamique :
<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>Implémentez le pilote dans Kernel/System/DynamicField/Driver/MyCustomField.pm.
4.2 Gestionnaires d'événements
Enregistrez votre gestionnaire d'événements :
<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>Implémentez le gestionnaire dans Kernel/System/Event/Handler/MyHandler.pm (méthode Run()).
4.3 Filtres de sortie
<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>Filtre dans Kernel/System/Output/Filter/MyFilter.pm.
5. Déploiement & OTOpar
Index du dépôt : Créez
Packages.xmlpour votre propre dépôt :bashbin/otobo.Console.pl Dev::Package::RepositoryIndex \ --directory /var/www/otobo-packagesAjoutez l'URL de votre dépôt dans SysConfig sous
Package::RepositoryList.OTOpar : Téléchargez votre OPM sur https://otopar.perl-services.de afin que d'autres puissent l'installer directement.
6. Exemple : Paquet MyCalendar
- Créez le SOPM avec le nom
MyCalendar. - Script de base de données
sql/create_calendar.sqlpour la tablecalendar_events. - Le XML de configuration définit un nouveau champ de ticket "Rendez-vous".
- Module Core
Kernel/System/CalendarEvent.pmavec des méthodes CRUD. - Module Frontend
Kernel/Modules/AgentCalendar.pm, templateAgentCalendar.tt. - Construisez le paquet et téléchargez-le sur OTOpar.
7. Conseils & Bonnes pratiques
- Adaptez le numéro de version dans le
sopm(SemVer). - Versionnez proprement les migrations de base de données dans
sql/. - Créez des tests unitaires pour les classes système et modules.
- Documentation dans le README plus POD dans les modules Perl.
- Traductions dans
Language/de_*.pmeten_*.pm.
Vous avez ainsi une base solide pour développer, distribuer et utiliser vos propres plugins OTOBO de manière maintenable dans des projets clients. Amusez-vous bien !