Expansão Interna do Sistema de Núcleo OTOBO
Neste artigo, você aprenderá como personalizar o OTOBO diretamente no núcleo – por meio de configuração XML, módulos Perl e templates. Mostraremos passo a passo como integrar um módulo "HelloWorld" personalizado no sistema.
1. Estrutura de Diretórios
Todas as personalizações estão localizadas abaixo do seu clone OTOBO no diretório Kernel/
:
Kernel/
├─ Config/Files/ # Registros XML
│ └─ XML/
├─ System/ # Módulos de lógica de negócios (Core)
├─ Modules/ # Controladores de frontend (Agente/Cliente)
├─ Output/HTML/Standard/ # Templates do Template Toolkit (TT)
└─ Language/ # Traduções
2. Configuração XML
Novos módulos e rotas são registrados por meio de XML. Crie um arquivo HelloWorld.xml
em 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 Negócios)
Crie sua lógica em 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;
4. Módulo de Frontend (Controlador)
Em Kernel/Modules/AgentHelloWorld.pm
, você vincula sua lógica ao frontend do 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. Templates (TT)
Crie o seguinte template em Kernel/Output/HTML/Standard/AgentHelloWorld.tt
:
[% Data.Text %]
<p>Este é o seu módulo HelloWorld personalizado!</p>
6. Fluxo de Trabalho de Exemplo
Carregar novo:
bashbin/otobo.Console.pl Maint::Config::Rebuild
Limpar cache:
bashbin/otobo.Console.pl Maint::Cache::Delete
Abrir navegador: Interface do agente → Menu → "HelloWorld"
7. Dicas e Práticas Recomendadas
- ObjectDependencies declarados corretamente (por exemplo, DB, Layout).
- Documentação POD nos módulos Perl não esquecida.
- Traduções mantidas em
Kernel/Language/de_*.pm
. - Testes unitários configurados com Mojolicious (opcional).
- Após cada alteração, reconstruir config e limpar cache.
Com isso, você tem um modelo sólido para realizar expansões adicionais no núcleo do OTOBO. Divirta-se desenvolvendo!