Benötigen Sie einen eigenen Znuny-REST-Endpoint?
Softoft entwickelt sichere Generic-Interface-Operationen, Znuny-Pakete, automatisierte Tests, Deployment und wartbare API-Verträge.
In diesem Guide: Sichere eigene REST-Operationen zum Znuny Generic Interface hinzufügen – mit den Katalogoperationen des OpenTicketAIConnector als realem Paketbeispiel.
Verwandte Themen: Znuny REST API · Web Services · Plugin-Entwicklung
Das Znuny Generic Interface enthält Standardoperationen für Tickets. Integrationen benötigen jedoch häufig zusätzliche Daten oder Aktionen: Queue-Details, Auswahlwerte von Dynamic Fields, Konfigurationskataloge oder anwendungsspezifische Befehle. Eine wartbare Znuny-REST-API-Erweiterung verbindet Perl-Code, SysConfig-Registrierung, REST-Routing, Paket-Lifecycle und Berechtigungen.
Benötigen Sie einen eigenen Znuny-REST-Endpoint?
Softoft entwickelt sichere Generic-Interface-Operationen, Znuny-Pakete, automatisierte Tests, Deployment und wartbare API-Verträge.
Buchen Sie ein 15-minütiges Erstgespräch, um angebundenes System und benötigte Operationen zu besprechen.
flowchart LR client[IntegrationClient] --> transport["Generic Interface REST Transport"] transport --> mapping[WebserviceRoute] mapping --> operation[CustomPerlOperation] operation --> znunyCore["Znuny Kernel System APIs"] operation --> json[StableJSONContract]
Vier Bestandteile müssen zusammenpassen:
Die Beispiele verwenden den Controller TicketAICatalog aus OpenTicketAIConnector. Er stellt Katalogdaten bereit, die Standard-Ticketoperationen nicht ausreichend abdecken. Das eigene Paket sollte einen eigenen Controller- und Webservice-Namen verwenden.
Klasse: Kernel::GenericInterface::Operation::<Controller>::<Name>Datei: Kernel/GenericInterface/Operation/<Controller>/<Name>.pmTyp: <Controller>::<Name>Generic-Interface-Operationen erben von Kernel::GenericInterface::Operation::Common. Die Klasse stellt Authentifizierung und strukturierte Fehler bereit.
package Kernel::GenericInterface::Operation::TicketAICatalog::Base;
use strict;use warnings;use parent qw(Kernel::GenericInterface::Operation::Common);
our $ObjectManagerDisabled = 1;
sub new { my ( $Type, %Param ) = @_; my $Self = {}; bless $Self, $Type;
for my $Needed (qw(DebuggerObject WebserviceID)) { return if !$Param{$Needed}; $Self->{$Needed} = $Param{$Needed}; } return $Self;}
sub _AuthOrError { my ( $Self, %Param ) = @_; my ( $UserID, $UserType ) = $Self->Auth(%Param); return ( $UserID, undef ) if $UserID;
return ( undef, $Self->ReturnError( ErrorCode => 'TicketAICatalog.AuthFail', ErrorMessage => 'Authentication failed!', ), );}
1;$ObjectManagerDisabled = 1 ist für diese Operationsklassen erforderlich. Eine gemeinsame Basisklasse sollte nur tatsächlich geteiltes Verhalten enthalten.
Run lesenpackage Kernel::GenericInterface::Operation::TicketAICatalog::QueueList;
use strict;use warnings;use parent qw(Kernel::GenericInterface::Operation::TicketAICatalog::Base);
our $ObjectManagerDisabled = 1;
sub Run { my ( $Self, %Param ) = @_; my ( $UserID, $Error ) = $Self->_AuthOrError(%Param); return $Error if $Error;
my $QueueObject = $Kernel::OM->Get('Kernel::System::Queue'); my %Queues = $QueueObject->QueueList( Valid => 0 ); my @Items;
for my $QueueID ( sort { $a <=> $b } keys %Queues ) { my %Queue = $QueueObject->QueueGet( ID => $QueueID ); next if !%Queue; push @Items, { ID => $QueueID + 0, Name => $Queue{Name} // $Queues{$QueueID}, Comment => $Queue{Comment} // '', Valid => ( ( $Queue{ValidID} // 1 ) == 1 ) ? 1 : 0, }; }
return { Success => 1, Data => { Item => \@Items } };}
1;Gemappte Request-Felder stehen in $Param{Data}. Prüfen Sie Pflichtfelder vor dem Kernel-Aufruf und liefern Sie stabile Fehlercodes mit ReturnError.
my $Data = $Param{Data} || {};my $Name = $Data->{Name} // '';
return $Self->ReturnError( ErrorCode => 'TicketAICatalog.MissingName', ErrorMessage => 'Name is required.',) if !$Name;Lesende Katalogoperationen sind am sichersten. Schreibende Operationen benötigen Typ- und Werteprüfung, möglichst idempotentes Verhalten und eigene explizite Routen.
Znuny sucht nach Einstellungen dieses Musters:
GenericInterface::Operation::Module###<Controller>::<Name>Verwenden Sie die Znuny-/OTRS-kompatible Wurzel <otrs_config>:
<?xml version="1.0" encoding="utf-8"?><otrs_config version="2.0" init="Application"> <Setting Name="GenericInterface::Operation::Module###TicketAICatalog::QueueList" Required="0" Valid="1"> <Description Translatable="1">Catalogue: list queues.</Description> <Navigation>GenericInterface::Operation::ModuleRegistration</Navigation> <Value> <Hash> <Item Key="Name">QueueList</Item> <Item Key="Controller">TicketAICatalog</Item> <Item Key="ConfigDialog">AdminGenericInterfaceOperationDefault</Item> </Hash> </Value> </Setting></otrs_config>Nach Paketinstallation und Konfigurationsaufbau muss TicketAICatalog::QueueList unter Admin → Web Services auswählbar sein.
Definieren Sie Operation und Route im paketierten Webservice-YAML:
Provider: Operation: queue-list: Type: TicketAICatalog::QueueList Description: Lists queues with ID, name, comment, and validity. MappingInbound: Type: Simple Config: KeyMapDefault: MapTo: '' MapType: Keep ValueMap: UserLogin: ValueMapRegEx: .*: custom-api-user MappingOutbound: Type: Simple Config: KeyMapDefault: MapTo: '' MapType: Keep
Transport: Type: HTTP::REST Config: MaxLength: '1000000' RouteOperationMapping: queue-list: Route: /queue-list RequestMethod: - GET - POSTDie Schlüssel queue-list müssen übereinstimmen. Verwenden Sie einen dedizierten API-Agenten mit minimalen Gruppen- und Queue-Rechten. Der Login-Rewrite ergänzt HTTPS, starke Zugangsdaten, Netzwerkkontrollen und Eingabevalidierung – er ersetzt sie nicht.
Znuny-Paketmanifeste verwenden <otrs_package>. Deklarieren Sie nur Framework-Versionen, die mit den unterstützten Znuny-Releases getestet wurden. Jede Backend-, XML-, YAML- und Setup-Datei gehört in die Dateiliste:
<Filelist> <File Permission="644" Location="Kernel/GenericInterface/Operation/TicketAICatalog/Base.pm"/> <File Permission="644" Location="Kernel/GenericInterface/Operation/TicketAICatalog/QueueList.pm"/> <File Permission="644" Location="Kernel/Config/Files/XML/MyZnunyConnector.xml"/> <File Permission="644" Location="var/webservices/MyZnunyConnector.yml"/></Filelist>Install-, Reinstall- und Upgrade-Hooks rufen ein Znuny-spezifisches Setup-Modul auf:
<CodeInstall Type="post"><![CDATA[ $Kernel::OM->Get('Kernel::System::MyZnunyConnector::Setup')->Install();]]></CodeInstall><CodeReinstall Type="post"><![CDATA[ $Kernel::OM->Get('Kernel::System::MyZnunyConnector::Setup')->Install();]]></CodeReinstall><CodeUpgrade Type="post"><![CDATA[ $Kernel::OM->Get('Kernel::System::MyZnunyConnector::Setup')->Install();]]></CodeUpgrade><CodeUninstall Type="pre"><![CDATA[ $Kernel::OM->Get('Kernel::System::MyZnunyConnector::Setup')->Uninstall();]]></CodeUninstall>Das Setup-Modul erstellt oder aktualisiert den eingeschränkten API-Benutzer und importiert das YAML über Kernel::System::GenericInterface::Webservice. Bei Paket-Upgrades muss es den bestehenden Webservice aktualisieren statt einen zweiten anzulegen.
Der Installationspfad kann /znuny/ oder /otrs/ lauten. Verwenden Sie den Pfad Ihrer Umgebung:
https://helpdesk.example/znuny/nph-genericinterface.pl/Webservice/MyZnunyConnector/queue-listcurl -sS -u 'custom-api-user:API_PASSWORD' \ -X POST \ 'https://helpdesk.example/znuny/nph-genericinterface.pl/Webservice/MyZnunyConnector/queue-list'Testen Sie das Paket auf jeder angegebenen Znuny-Framework-Version: erfolgreiche Responses, Authentifizierungsfehler, fehlende Queue-Rechte, ungültige Eingaben, leere Daten, Response-Größe, Reinstall, Upgrade und Uninstall.
Data-Vertrag erstellen.<otrs_config>-SysConfig-XML-Datei registrieren.<otrs_package>-Manifest eintragen und getestete Framework-Versionen deklarieren.Controller, Name, Paket-Dateiliste und Konfigurationsaufbau prüfen.Valid-Flags sowie Gruppen- und Queue-Rechte prüfen.WebserviceUpdate aufrufen.Eine dauerhafte Erweiterung braucht mehr als einen Perl-Prototyp: Vertragsdesign, Least-Privilege-Zugriff, Paketkompatibilität, automatisierte Tests, Upgrade-Behandlung und Betriebsdokumentation.
Softoft entwickelt Ihre Znuny-Generic-Interface-Erweiterung
Operationsdesign, Perl-Implementierung, Webservice-Konfiguration, Paketierung, Deployment, Tests und laufende Wartung.
Buchen Sie ein 15-minütiges Gespräch, um Endpoints, Znuny-Version und angebundene Anwendung zu besprechen.
Ja. Entwickeln Sie eine Generic-Interface-Operation, registrieren Sie das Modul in SysConfig, ergänzen Sie einen REST-Provider und liefern Sie die Dateien als Znuny-Paket aus.
Das Paketmanifest verwendet otrs_package, SysConfig-XML verwendet otrs_config. Die Framework-Versionen müssen zu den tatsächlich unterstützten Znuny-Releases passen.
Ja. Softoft übernimmt Operationsdesign, Perl-Entwicklung, Webservice-Konfiguration, Paketierung, Tests, Deployment und Wartung.