Aller au contenu

Extension interne du système cœur OTOBO

Dans cet article, vous apprendrez à personnaliser OTOBO directement au niveau du cœur – via la configuration XML, les modules Perl et les templates. Nous vous montrons étape par étape comment intégrer votre propre module « HelloWorld » dans le système.


Toutes les personnalisations se trouvent sous votre clone OTOBO dans le répertoire Kernel/ :

Kernel/
├─ Config/Files/ # Enregistrements XML
│ └─ XML/
├─ System/ # Modules de logique métier (Core)
├─ Modules/ # Contrôleurs Frontend (Agent/Customer)
├─ Output/HTML/Standard/ # Templates Template Toolkit (TT)
└─ Language/ # Traductions

Les nouveaux modules et routes sont enregistrés via XML. Créez un fichier HelloWorld.xml dans Kernel/Config/Files/XML/ :

<?xml version="1.0" encoding="UTF-8"?>
<otobo_config version="2.0" init="Application">
<!-- 1. Enregistrer le module Frontend -->
<Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1">
<Navigation>Frontend::Agent::ModuleRegistration</Navigation>
<Value>
<Item ValueType="FrontendRegistration">
<Hash>
<Item Key="Group"><Array><Item>users</Item></Array></Item>
<Item Key="Description" Translatable="1">Module HelloWorld</Item>
<Item Key="Title" Translatable="1">HelloWorld</Item>
<Item Key="NavBarName">HelloWorld</Item>
</Hash>
</Item>
</Value>
</Setting>
</otobo_config>

Créez votre logique dans Kernel/System/HelloWorld.pm :

package Kernel::System::HelloWorld;
use strict;
use warnings;
our @ObjectDependencies = ();
sub new {
my ($Type, %Param) = @_;
return bless {}, $Type;
}
sub GetHelloWorldText {
my ($Self, %Param) = @_;
return $Self->_FormatText(String => 'Hello World');
}
sub _FormatText {
my ($Self, %Param) = @_;
return uc $Param{String};
}
1;

Dans Kernel/Modules/AgentHelloWorld.pm, vous intégrez votre logique dans le Frontend Agent :

package Kernel::Modules::AgentHelloWorld;
use strict;
use warnings;
sub new { bless {}, shift }
sub Run {
my ($Self, %Param) = @_;
my $HelloObj = $Kernel::OM->Get('Kernel::System::HelloWorld');
my $LayoutObj = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my %Data;
$Data{Text} = $HelloObj->GetHelloWorldText();
return
$LayoutObj->Header(Title => 'HelloWorld')
. $LayoutObj->NavigationBar()
. $LayoutObj->Output(
TemplateFile => 'AgentHelloWorld',
Data => \%Data,
)
. $LayoutObj->Footer();
}
1;

Créez le template suivant dans Kernel/Output/HTML/Standard/AgentHelloWorld.tt :

[% Data.Text %]
<p>Ceci est votre module HelloWorld créé par vous-même !</p>

  1. Recharger :

    Fenêtre de terminal
    bin/otobo.Console.pl Maint::Config::Rebuild
  2. Vider le cache :

    Fenêtre de terminal
    bin/otobo.Console.pl Maint::Cache::Delete
  3. Ouvrir le navigateur : Interface Agent → Menu → « HelloWorld »


  • Déclarer proprement les ObjectDependencies (ex: DB, Layout).
  • Ne pas oublier la documentation POD dans les modules Perl.
  • Gérer les traductions sous Kernel/Language/fr_*.pm.
  • Configurer des tests unitaires avec Mojolicious (optionnel).
  • Après chaque modification, effectuer un Config rebuild & vider le cache.

Vous disposez désormais d’un modèle solide pour réaliser d’autres extensions du cœur dans OTOBO. Bon développement !