Skip to content

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
<?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 :

bash
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 :

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

Pour désinstaller ou mettre à jour :

bash
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 :

xml
<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 :

xml
<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

xml
<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 :

    bash
    bin/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

  1. SOPM avec le nom MyCalendar.
  2. Script de base de données sql/create_calendar.sql pour la table calendar_events.
  3. Fichier de configuration XML définit un nouveau champ de ticket « Date ».
  4. Module principal Kernel/System/CalendarEvent.pm avec des méthodes CRUD.
  5. Modules frontal Kernel/Modules/AgentCalendar.pm, modèle AgentCalendar.tt.
  6. 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 et en_*.pm.

Avec cela, vous avez une base solide pour développer, distribuer et utiliser vos propres plugins OTOBO dans des projets clients. Bonne chance !