Desarrollo de plugins con paquetes OPM
Desarrollo de plugins con paquetes OPM
Sección titulada «Desarrollo de plugins con paquetes OPM»En esta sección aprenderás cómo crear, instalar y distribuir tus propios plugins como paquetes OPM para OTOBO.
1. Estructura de un .sopm
Sección titulada «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-mypackage</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: Identificador único del paquete y versión compatible de OTOBO.
- Filelist: Todos los archivos que se copiarán durante la instalación.
2. Archivos y estructura de directorios
Sección titulada «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 BD- Kernel/Config/Files/XML/: Registra módulos, menús o Dynamic Fields.
- Kernel/System/: Clase de lógica de negocio.
- Kernel/Modules/: Controlador del Frontend.
- Templates & Idioma: Archivos TT + .pm de traducción.
3. Construir e instalar el paquete
Sección titulada «3. Construir e instalar el paquete»3.1 Generar OPM
Sección titulada «3.1 Generar OPM»Utiliza la herramienta CLI para construir un OPM a partir de tu SOPM:
cd /ruta/a/MyExtensionbin/otobo.Console.pl Dev::Package::Build \ --sopm-file MyExtension.sopm \ --output /tmp/MyExtension.opm3.2 Instalación
Sección titulada «3.2 Instalación»Admin-UI: Sube el paquete en Admin → Configuración → Gestión de paquetes. Consola:
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opmPara desinstalar o actualizar:
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opmbin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm4. Puntos de extensión
Sección titulada «4. Puntos de extensión»4.1 Dynamic Fields
Sección titulada «4.1 Dynamic Fields»En Kernel/Config/Files/XML/MyExtension.xml registras un nuevo driver de Dynamic Field:
<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 driver en Kernel/System/DynamicField/Driver/MyCustomField.pm.
4.2 Event-Handler
Sección titulada «4.2 Event-Handler»Registra tu Event-Handler:
<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 handler en Kernel/System/Event/Handler/MyHandler.pm (método Run()).
4.3 Output-Filter
Sección titulada «4.3 Output-Filter»<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>Filtro en Kernel/System/Output/Filter/MyFilter.pm.
5. Deployment & OTOpar
Sección titulada «5. Deployment & OTOpar»-
Índice de repositorio: Genera
Packages.xmlpara tu propio repositorio:Ventana de terminal bin/otobo.Console.pl Dev::Package::RepositoryIndex \--directory /var/www/otobo-packages -
Añade la URL de tu repositorio en SysConfig bajo
Package::RepositoryList. -
OTOpar: Sube tu OPM a https://otopar.perl-services.de para que otros puedan instalarlo directamente.
6. Ejemplo: Paquete MyCalendar
Sección titulada «6. Ejemplo: Paquete MyCalendar»- Crear SOPM con el nombre
MyCalendar. - Script de BD
sql/create_calendar.sqlpara la tablacalendar_events. - XML de configuración define un nuevo campo de ticket “Cita”.
- Módulo Core
Kernel/System/CalendarEvent.pmcon métodos CRUD. - Módulos Frontend
Kernel/Modules/AgentCalendar.pm, plantillaAgentCalendar.tt. - Construir paquete y subir a OTOpar.
7. Consejos y mejores prácticas
Sección titulada «7. Consejos y mejores prácticas»- Ajustar el número de versión en el
sopm(SemVer). - Versionar correctamente las migraciones de BD en
sql/. - Crear Unit-Tests para las clases de sistema y módulos.
- Documentación en el README más POD en los módulos Perl.
- Traducciones en
Language/es_*.pmyen_*.pm.
Con esto tienes una base sólida para desarrollar, distribuir y mantener tus propios plugins de OTOBO en proyectos de clientes. ¡Diviértete!