Desarrollo de plugins con paquetes OPM
En esta sección, aprenderás a crear, instalar y distribuir tus propios plugins como paquetes OPM para OTOBO.
1. Estructura de un .sopm
El archivo SOPM (*.sopm
) contiene todos los metadatos de tu paquete:
<?xml version="1.0" encoding="utf-8"?>
<otobo_package version="1.0">
<Name>MyExtension</Name>
<Version>1.0.0</Version>
<Framework>10.0.x</Framework> <!-- Versión mínima de OTOBO -->
<Vendor>TuNombre GmbH</Vendor>
<URL>https://github.com/tu-usuario/otobo-mipackage</URL>
<License>GPL-3.0</License>
<Description Lang="es">Extensión para funciones especiales</Description>
<ChangeLog Version="1.0.0" Date="13.06.2025 12:00:00">Publicación inicial</ChangeLog>
<Filelist>
<File Location="Kernel/Config/Files/XML/MyExtension.xml" Permission="644"></File>
<File Location="Kernel/System/MyExtension.pm" Permission="644"></File>
<File Location="Kernel/Modules/AgentMyPage.pm" Permission="644"></File>
<File Location="Kernel/Output/HTML/Standard/AgentMyPage.tt" Permission="644"></File>
<File Location="Kernel/Language/es_MyExtension.pm" Permission="644"></File>
</Filelist>
</otobo_package>
- Name/Version/Framework: Identificación única del paquete y versión compatible de OTOBO.
- Filelist: Todos los archivos que se copian durante la instalación.
2. Archivos y estructura de directorios
Crea tu paquete en un directorio propio, por ejemplo, MyExtension/
:
MyExtension/
├─ MyExtension.sopm
├─ Kernel/
│ ├─ Config/Files/XML/MyExtension.xml
│ ├─ System/MyExtension.pm
│ ├─ Modules/AgentMyPage.pm
│ ├─ Output/HTML/Standard/AgentMyPage.tt
│ └─ Language/es_MyExtension.pm
└─ sql/
└─ create_tables.sql # opcional, para migraciones de base de datos
- Kernel/Config/Files/XML/: Registra módulos, menús o campos dinámicos.
- Kernel/System/: Clase de lógica de negocio.
- Kernel/Modules/: Controlador de frontend.
- Plantillas y lenguaje: Archivos TT + archivos de traducción.pm.
3. Compilación e instalación del paquete
3.1 Crear OPM
Utiliza la herramienta de línea de comandos para crear un OPM a partir de tu SOPM:
cd /ruta/a/MyExtension
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MyExtension.sopm \
--output /tmp/MyExtension.opm
3.2 Instalación
Interfaz de administración: Carga el paquete en Admin → Configuración → Administración de paquetes. Consola:
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opm
Para desinstalar o actualizar:
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm
4. Puntos de extensión
4.1 Campos dinámicos
En Kernel/Config/Files/XML/MyExtension.xml
, registra un nuevo controlador de campo dinámico:
<Setting Name="DynamicFields::Driver###MyCustomField" Required="0" Valid="1">
<Navigation>DynamicFields::Driver</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="DriverName">MyCustomField</Item>
<Item Key="Module">Kernel::System::DynamicField::Driver::MyCustomField</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implementa el controlador en Kernel/System/DynamicField/Driver/MyCustomField.pm
.
4.2 Controladores de eventos
Registra tu controlador de eventos:
<Setting Name="Event::EventHandler###MyHandler" Required="0" Valid="1">
<Navigation>Event::EventHandler</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Event::Handler::MyHandler</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implementa el controlador en Kernel/System/Event/Handler/MyHandler.pm
(método Run()
).
4.3 Filtros de salida
<Setting Name="Output::Filter###MyFilter" Required="0" Valid="1">
<Navigation>Output::Filter</Navigation>
<Value>
<Array>
<Item><Hash>
<Item Key="Module">Kernel::System::Output::Filter::MyFilter</Item>
</Hash></Item>
</Array>
</Value>
</Setting>
Implementa el filtro en Kernel/System/Output/Filter/MyFilter.pm
.
5. Implementación y OTOpar
Índice de repositorio: Crea
Packages.xml
para tu propio repositorio:bashbin/otobo.Console.pl Dev::Package::RepositoryIndex \ --directory /var/www/otobo-packages
Agrega la URL de tu repositorio en SysConfig
Package::RepositoryList
.OTOpar: Carga tu OPM en https://otopar.perl-services.de para que otros puedan instalarlo directamente.
6. Ejemplo: Paquete MyCalendar
- SOPM crea con nombre
MyCalendar
. - Script de base de datos
sql/create_calendar.sql
para la tablacalendar_events
. - Configuración XML define un nuevo campo de ticket "Fecha".
- Módulo principal
Kernel/System/CalendarEvent.pm
con métodos CRUD. - Módulo de frontend
Kernel/Modules/AgentCalendar.pm
, plantillaAgentCalendar.tt
. - Compila el paquete y carga en OTOpar.
7. Consejos y mejores prácticas
- Número de versión en
sopm
actualiza (SemVer). - Migraciones de base de datos en
sql/
versiona de forma limpia. - Pruebas unitarias para clases de sistema y módulos.
- Documentación en README y POD en módulos Perl.
- Traducciones en
Language/es_*.pm
yen_*.pm
.
Con esto, tienes una base sólida para desarrollar, distribuir y mantener plugins de OTOBO en proyectos de clientes. ¡Disfruta!