Expansión interna del sistema OTOBO
En este artículo, aprenderás a personalizar OTOBO directamente en el núcleo – mediante configuración XML, módulos Perl y plantillas. Te mostramos paso a paso cómo integrar un módulo "HelloWorld" personalizado en el sistema.
1. Estructura de directorios
Todas las personalizaciones se encuentran debajo de tu clon de OTOBO en el directorio Kernel/
:
Kernel/
├─ Config/Files/ # Registros XML
│ └─ XML/
├─ System/ # Módulos de lógica de negocio (Core)
├─ Modules/ # Controladores de frontend (Agente/Cliente)
├─ Output/HTML/Standard/ # Plantillas de Template Toolkit (TT)
└─ Language/ # Traducciones
2. Configuración XML
Los nuevos módulos y rutas se registran mediante XML. Crea un archivo HelloWorld.xml
en Kernel/Config/Files/XML/
:
<?xml version="1.0" encoding="UTF-8"?>
<otobo_config version="2.0" init="Application">
<!-- 1. Registrar módulo de 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">Módulo HelloWorld</Item>
<Item Key="Title" Translatable="1">HelloWorld</Item>
<Item Key="NavBarName">HelloWorld</Item>
</Hash>
</Item>
</Value>
</Setting>
</otobo_config>
3. Módulo Core (Lógica de negocio)
Crea en Kernel/System/HelloWorld.pm
tu lógica:
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;
4. Módulo de frontend (Controlador)
En Kernel/Modules/AgentHelloWorld.pm
integras tu lógica en el frontend del agente:
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;
5. Plantillas (TT)
Crea en Kernel/Output/HTML/Standard/AgentHelloWorld.tt
la siguiente plantilla:
[% Data.Text %]
<p>Este es tu módulo HelloWorld personalizado!</p>
6. Flujo de trabajo de ejemplo
Cargar nuevo:
bashbin/otobo.Console.pl Maint::Config::Rebuild
Vaciar caché:
bashbin/otobo.Console.pl Maint::Cache::Delete
Abrir navegador: Interfaz del agente → Menú → "HelloWorld"
7. Consejos y mejores prácticas
- Declarar ObjectDependencies de forma limpia (por ejemplo, DB, Layout).
- No olvidar la documentación POD en los módulos Perl.
- Mantener las traducciones en
Kernel/Language/de_*.pm
. - Configurar pruebas unitarias con Mojolicious (opcional).
- Después de cada cambio, reconstruir la configuración y vaciar la caché.
Con esto, tienes una plantilla sólida para realizar expansiones adicionales en el núcleo de OTOBO. ¡Disfruta desarrollando!