Ir al contenido

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.


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.

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.

Utiliza la herramienta CLI para construir un OPM a partir de tu SOPM:

Ventana de terminal
cd /ruta/a/MyExtension
bin/otobo.Console.pl Dev::Package::Build \
--sopm-file MyExtension.sopm \
--output /tmp/MyExtension.opm

Admin-UI: Sube el paquete en Admin → Configuración → Gestión de paquetes. Consola:

Ventana de terminal
bin/otobo.Console.pl Admin::Package::Install /tmp/MyExtension.opm

Para desinstalar o actualizar:

Ventana de terminal
bin/otobo.Console.pl Admin::Package::Uninstall /tmp/MyExtension.opm
bin/otobo.Console.pl Admin::Package::Upgrade /tmp/MyExtension.opm

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.

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()).

<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.


  • Índice de repositorio: Genera Packages.xml para 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.


  1. Crear SOPM con el nombre MyCalendar.
  2. Script de BD sql/create_calendar.sql para la tabla calendar_events.
  3. XML de configuración define un nuevo campo de ticket “Cita”.
  4. Módulo Core Kernel/System/CalendarEvent.pm con métodos CRUD.
  5. Módulos Frontend Kernel/Modules/AgentCalendar.pm, plantilla AgentCalendar.tt.
  6. Construir paquete y subir a OTOpar.

  • 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_*.pm y en_*.pm.

Con esto tienes una base sólida para desarrollar, distribuir y mantener tus propios plugins de OTOBO en proyectos de clientes. ¡Diviértete!