Desenvolvimento de Plugins com Pacotes OPM
Nesta seção, você aprenderá como criar, instalar e distribuir plugins personalizados como pacotes OPM para o OTOBO.
1. Estrutura de uma .sopm
O arquivo SOPM (*.sopm
) contém todos os metadados do seu pacote:
<?xml version="1.0" encoding="utf-8"?>
<otobo_package version="1.0">
<Name>MinhaExtensao</Name>
<Version>1.0.0</Version>
<Framework>10.0.x</Framework> <!-- Versão mínima do OTOBO -->
<Vendor>NomeDaSuaEmpresa Ltda</Vendor>
<URL>https://github.com/seu-usuario/otobo-meu-pacote</URL>
<License>GPL-3.0</License>
<Description Lang="pt">Extensão para funções personalizadas</Description>
<ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Lançamento inicial</ChangeLog>
<Filelist>
<File Location="Kernel/Config/Files/XML/MinhaExtensao.xml" Permission="644"></File>
<File Location="Kernel/System/MinhaExtensao.pm" Permission="644"></File>
<File Location="Kernel/Modules/AgentMinhaPagina.pm" Permission="644"></File>
<File Location="Kernel/Output/HTML/Standard/AgentMinhaPagina.tt" Permission="644"></File>
<File Location="Kernel/Language/pt_MinhaExtensao.pm" Permission="644"></File>
</Filelist>
</otobo_package>
- Name/Version/Framework: Identificação única do pacote e versão compatível do OTOBO.
- Filelist: Todos os arquivos que serão copiados durante a instalação.
2. Arquivos e Estrutura de Diretórios
Coloque seu pacote em um diretório próprio, por exemplo, MinhaExtensao/
:
MinhaExtensao/
├─ MinhaExtensao.sopm
├─ Kernel/
│ ├─ Config/Files/XML/MinhaExtensao.xml
│ ├─ System/MinhaExtensao.pm
│ ├─ Modules/AgentMinhaPagina.pm
│ ├─ Output/HTML/Standard/AgentMinhaPagina.tt
│ └─ Language/pt_MinhaExtensao.pm
└─ sql/
└─ create_tables.sql # opcional, para migrações de banco de dados
- Kernel/Config/Files/XML/: Registra módulos, menus ou campos dinâmicos.
- Kernel/System/: Classe de lógica de negócios.
- Kernel/Modules/: Controlador de frontend.
- Templates & Idioma: Arquivos TT + arquivos de tradução .pm.
3. Construir e Instalar o Pacote
3.1 Criar OPM
Use a ferramenta CLI para criar um OPM a partir da sua SOPM:
cd /caminho/para/MinhaExtensao
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MinhaExtensao.sopm \
--output /tmp/MinhaExtensao.opm
3.2 Instalação
Interface de Admin: Faça o upload do pacote em Admin → Configurações → Gerenciamento de Pacotes. Console:
bin/otobo.Console.pl Admin::Package::Install /tmp/MinhaExtensao.opm
Para desinstalar ou atualizar:
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MinhaExtensao.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MinhaExtensao.opm
4. Pontos de Extensão
4.1 Campos Dinâmicos
No Kernel/Config/Files/XML/MinhaExtensao.xml
, registre um novo driver de campo dinâmico:
<Setting Name="DynamicFields::Driver###MeuCampoPersonalizado" Required="0" Valid="1">
<Navigation>DynamicFields::Driver</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="DriverName">MeuCampoPersonalizado</Item>
<Item Key="Module">Kernel::System::DynamicField::Driver::MeuCampoPersonalizado</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implemente o driver em Kernel/System/DynamicField/Driver/MeuCampoPersonalizado.pm
.
4.2 Manipulador de Eventos
Registre seu manipulador de eventos:
<Setting Name="Event::EventHandler###MeuManipulador" Required="0" Valid="1">
<Navigation>Event::EventHandler</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Event::Handler::MeuManipulador</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implemente o manipulador em Kernel/System/Event/Handler/MeuManipulador.pm
(método Run()
).
4.3 Filtro de Saída
<Setting Name="Output::Filter###MeuFiltro" Required="0" Valid="1">
<Navigation>Output::Filter</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Output::Filter::MeuFiltro</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implemente o filtro em Kernel/System/Output/Filter/MeuFiltro.pm
.
5. Implantação e OTOpar
Índice do Repositório: Crie
Packages.xml
para o seu repositório próprio:bashbin/otobo.Console.pl Dev::Package::RepositoryIndex \ --directory /var/www/otobo-pacotes
Adicione a URL do repositório em
Package::RepositoryList
no SysConfig.OTOpar: Faça o upload do seu OPM em https://otopar.perl-services.de para que outros possam instalá-lo diretamente.
6. Exemplo: Pacote MyCalendar
- SOPM crie com o nome
MyCalendar
. - Script de banco de dados
sql/create_calendar.sql
para a tabelacalendar_events
. - XML de configuração define um novo campo de ticket "Data".
- Módulo principal
Kernel/System/CalendarEvent.pm
com métodos CRUD. - Módulos de frontend
Kernel/Modules/AgentCalendar.pm
, templateAgentCalendar.tt
. - Construa o pacote e faça o upload para o OTOpar.
7. Dicas e Práticas Recomendadas
- Número de versão no
sopm
atualizado (SemVer). - Migrações de banco de dados em
sql/
versionadas corretamente. - Testes unitários para classes de sistema e módulos.
- Documentação no README e POD nos módulos Perl.
- Traduções em
Language/pt_*.pm
een_*.pm
.
Com isso, você terá uma base sólida para desenvolver, distribuir e manter plugins personalizados do OTOBO em projetos de clientes. Divirta-se!