Développement de plugins avec des paquets OPM
Dans cette section, vous apprendrez à créer, installer et distribuer vos propres plugins en tant que paquets OPM pour OTOBO.
1. Structure d'un fichier .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>MonExtension</Name>
<Version>1.0.0</Version>
<Framework>10.0.x</Framework> <!-- Version minimale d'OTOBO -->
<Vendor>VotreNom SAS</Vendor>
<URL>https://github.com/votre-utilisateur/otobo-monpaquet</URL>
<License>GPL-3.0</License>
<Description Lang="fr">Extension pour des fonctions spécifiques</Description>
<ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Première publication</ChangeLog>
<Filelist>
<File Location="Kernel/Config/Files/XML/MonExtension.xml" Permission="644"></File>
<File Location="Kernel/System/MonExtension.pm" Permission="644"></File>
<File Location="Kernel/Modules/AgentMaPage.pm" Permission="644"></File>
<File Location="Kernel/Output/HTML/Standard/AgentMaPage.tt" Permission="644"></File>
<File Location="Kernel/Language/fr_MonExtension.pm" Permission="644"></File>
</Filelist>
</otobo_package>
- Name/Version/Framework : Identification unique du paquet et version d'OTOBO compatible.
- Filelist : Tous les fichiers qui seront copiés lors de l'installation.
2. Fichiers et structure de répertoire
Placez votre paquet dans un répertoire propre, par exemple MonExtension/
:
MonExtension/
├─ MonExtension.sopm
├─ Kernel/
│ ├─ Config/Files/XML/MonExtension.xml
│ ├─ System/MonExtension.pm
│ ├─ Modules/AgentMaPage.pm
│ ├─ Output/HTML/Standard/AgentMaPage.tt
│ └─ Language/fr_MonExtension.pm
└─ sql/
└─ create_tables.sql # facultatif, pour les migrations de base de données
- Kernel/Config/Files/XML/ : Enregistre les modules, les menus ou les champs dynamiques.
- Kernel/System/ : Classe de logique métier.
- Kernel/Modules/ : Contrôleur frontal.
- Modèles et langues : Fichiers TT + fichiers de traduction .pm.
3. Construction et installation du paquet
3.1 Génération d'OPM
Utilisez l'outil CLI pour générer un OPM à partir de votre SOPM :
cd /chemin/vers/MonExtension
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MonExtension.sopm \
--output /tmp/MonExtension.opm
3.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/MonExtension.opm
Pour désinstaller ou mettre à jour :
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MonExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MonExtension.opm
4. Points d'extension
4.1 Champs dynamiques
Dans Kernel/Config/Files/XML/MonExtension.xml
, enregistrez un nouveau pilote de champ dynamique :
<Setting Name="DynamicFields::Driver###MonChampPersonnalisé" Required="0" Valid="1">
<Navigation>DynamicFields::Driver</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="DriverName">MonChampPersonnalisé</Item>
<Item Key="Module">Kernel::System::DynamicField::Driver::MonChampPersonnalisé</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implémentez le pilote dans Kernel/System/DynamicField/Driver/MonChampPersonnalisé.pm
.
4.2 Gestionnaire d'événements
Enregistrez votre gestionnaire d'événements :
<Setting Name="Event::EventHandler###MonGestionnaire" Required="0" Valid="1">
<Navigation>Event::EventHandler</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Event::Handler::MonGestionnaire</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implémentez le gestionnaire dans Kernel/System/Event/Handler/MonGestionnaire.pm
(méthode Run()
).
4.3 Filtre de sortie
<Setting Name="Output::Filter###MonFiltre" Required="0" Valid="1">
<Navigation>Output::Filter</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Output::Filter::MonFiltre</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implémentez le filtre dans Kernel/System/Output/Filter/MonFiltre.pm
.
5. Déploiement et OTOpar
Index de référentiel : Générez
Packages.xml
pour votre propre référentiel :bashbin/otobo.Console.pl Dev::Package::RepositoryIndex \ --directory /var/www/otobo-packages
Ajoutez l'URL de votre référentiel à
Package::RepositoryList
dans SysConfig.OTOpar : Téléchargez votre OPM sur https://otopar.perl-services.de pour que les autres puissent l'installer directement.
6. Exemple : Paquet MyCalendar
- SOPM avec le nom
MyCalendar
. - Script de base de données
sql/create_calendar.sql
pour la tablecalendar_events
. - Fichier de configuration XML définit un nouveau champ de ticket « Date ».
- Module principal
Kernel/System/CalendarEvent.pm
avec des méthodes CRUD. - Modules frontal
Kernel/Modules/AgentCalendar.pm
, modèleAgentCalendar.tt
. - Construction du paquet et téléchargement sur OTOpar.
7. Conseils et bonnes pratiques
- Numéro de version dans
sopm
(SemVer). - Migrations de base de données dans
sql/
versionnées proprement. - Tests unitaires pour les classes système et de modules.
- Documentation dans le fichier README et les POD dans les modules Perl.
- Traductions dans
Language/fr_*.pm
eten_*.pm
.
Avec cela, vous avez une base solide pour développer, distribuer et utiliser vos propres plugins OTOBO dans des projets clients. Bonne chance !