GenericAgent und Webservice
GenericAgent und Webservice
Hallo Zusammen
Ich habe eine Frage zum GenericAgent, mit dem ich einen Webservice ansteuern möchte. Ich möchte zuerst etwas ausholen, damit ihr versteht was ich meine. Ich möchte wenn ich ein Ticket erstelle mit bestimmten Bedingungen, dass beim anderen Ticketsystem(momentan ebenfalls OTRS V.4) ein Ticket erstellt wird. Dazu habe ich einen Webservice als Provider erstellt. Wenn ich einen curl an das System absetze, funktioniert dieser auch, also das Ticket wird erstellt.
Nun habe ich mich gefragt, ob es mit dem GenericAgent möglich ist, ein curl Befehl zu generieren, der dann das Ticket beim anderen System erstellt?
Beim GenericAgent gibt es die Möglichkeit Ticket Commands und Custom Module. Da bin ich unsicher welches ich davon nutzen müsste, falls es möglich ist. Ich bin über jede Hilfe dankbar.
Gruss GMC
Ich habe eine Frage zum GenericAgent, mit dem ich einen Webservice ansteuern möchte. Ich möchte zuerst etwas ausholen, damit ihr versteht was ich meine. Ich möchte wenn ich ein Ticket erstelle mit bestimmten Bedingungen, dass beim anderen Ticketsystem(momentan ebenfalls OTRS V.4) ein Ticket erstellt wird. Dazu habe ich einen Webservice als Provider erstellt. Wenn ich einen curl an das System absetze, funktioniert dieser auch, also das Ticket wird erstellt.
Nun habe ich mich gefragt, ob es mit dem GenericAgent möglich ist, ein curl Befehl zu generieren, der dann das Ticket beim anderen System erstellt?
Beim GenericAgent gibt es die Möglichkeit Ticket Commands und Custom Module. Da bin ich unsicher welches ich davon nutzen müsste, falls es möglich ist. Ich bin über jede Hilfe dankbar.
Gruss GMC
-
- Znuny guru
- Posts: 2210
- Joined: 13 Mar 2014, 09:16
- Znuny Version: 6.0.14
- Real Name: Rolf Straub
Re: GenericAgent und Webservice
Wieso verschickst du nicht einfach eine Email? Das könnte etwas leichter sein als per WebService ein Ticket zu erstellen.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: GenericAgent und Webservice
Ich möchte das gerne als Webservice einrichten, da in Zukunft ein System von einem anderen Unternehmen angesprochen werden sollte.
Die haben einen Webservice eingerichtet, den ich ansprechen kann. Der Sinn sollte eigentlich sein, dass wir in unserem Ticketsystem Ticket erstellen können, die sie betreffen und so Tickets bei Ihnen automatisch generieren. Spätere Updates bei einem Ticket sollten dann auch bei denen aktualisiert werden. Darum das Ganze über einen Webservice.
Die haben einen Webservice eingerichtet, den ich ansprechen kann. Der Sinn sollte eigentlich sein, dass wir in unserem Ticketsystem Ticket erstellen können, die sie betreffen und so Tickets bei Ihnen automatisch generieren. Spätere Updates bei einem Ticket sollten dann auch bei denen aktualisiert werden. Darum das Ganze über einen Webservice.
-
- Znuny guru
- Posts: 2210
- Joined: 13 Mar 2014, 09:16
- Znuny Version: 6.0.14
- Real Name: Rolf Straub
Re: GenericAgent und Webservice
Okay. Erstell dir mal diese Datei in ~/Custom/GAModules/CreateRemoteTicket.pm :
Dann trag im GenericAgent als Custom-Modul ein: 'GAModules::CreateRemoteTicket'
Hilft dir das weiter?
Code: Select all
#!/usr/bin/perl
package GAModules::CreateRemoteTicket;
use strict;
use warnings;
use utf8;
use lib '/opt/otrs/';
use lib '/opt/otrs/Kernel/cpan-lib';
use lib '/opt/otrs/Custom';
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new(
'Kernel::System::Log' => {
LogPrefix => 'Custom-CreateRemoteTicket',
},
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
# Get some ticket information
# [...]
# Creat the ticket
qx{ Your System Command here };
}
1;
Hilft dir das weiter?
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: GenericAgent und Webservice
Danke für deine Unterstützung.
Muss ich das Script noch anpassen?
Also kann ich bei "Your System Command here" den Curl Befehl eintragen?
Muss ich das Script noch anpassen?
Also kann ich bei "Your System Command here" den Curl Befehl eintragen?
-
- Znuny guru
- Posts: 2210
- Joined: 13 Mar 2014, 09:16
- Znuny Version: 6.0.14
- Real Name: Rolf Straub
Re: GenericAgent und Webservice
Genau.
Du solltest das Script auch "standalone" ausführen können, also direkt von der Shell um zu testen ob es funktioniert. Der Aufruf aus dem GenericAgent ist dann eben wichtig wenn du dynamisch Parameter setzen willst.
Du solltest das Script auch "standalone" ausführen können, also direkt von der Shell um zu testen ob es funktioniert. Der Aufruf aus dem GenericAgent ist dann eben wichtig wenn du dynamisch Parameter setzen willst.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: GenericAgent und Webservice
OK, Danke viel Mals.
Schlage mich noch ein wenig mit SyntaxError's, aber ich denke ich kriege das irgendwie hin
Nochmals Danke
Schlage mich noch ein wenig mit SyntaxError's, aber ich denke ich kriege das irgendwie hin
Nochmals Danke
Re: GenericAgent und Webservice
Ich krieg es leider doch nicht hin.
Ich habe in der Zeile bei "Your System Command here"
folgenden Curl Befehl hineinkopiert:
Beim Apache log ist folgende Meldung ersichtlich:
Wenn ich den Curl Befehl in der Shell eingebe, funktioniert dieser einwandfrei. Nur über dieses Modul nicht.
Ich habe in der Zeile bei "Your System Command here"
Code: Select all
qx{ Your System Command here };
Code: Select all
curl -X POST -H "Content-Type:application/json" http://ServerIP/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket -d "{"UserLogin":"'UserName'","Password":"UserPasswort'","Ticket":{"Title":"'REST Create Test2'","Queue":"'IT Support'","State":"'open'","Priority":"'5 very high'","CustomerUser":"'A0495334'"},"Article":{"Subject":"'Rest Create Test2'","Body":"'This is only the test2'","ContentType":"'text/plain; charset=utf8'"}}"
Code: Select all
[Fri Dec 9 15:50:46 2016] CreateRemoteTicket.pm: Subroutine new redefined at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 20.
[Fri Dec 09 15:50:46 2016] [error] [client 10.128.41.27] Missing right curly or square bracket at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 40, at end of line\nsyntax error at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 40, at EOF\nCompilation failed in require at /opt/otrs/Kernel/cpan-lib/Apache2/Reload.pm line 179.\n, , referer: http://SourceServer/otrs/index.pl?Action=AdminGenericAgent;Subaction=Run;Profile=CreateTicketOTRSTestSystem;ChallengeToken=gxqR1QfX2W1b1ICNCGe1YZzL5midoDlz;
-
- Znuny guru
- Posts: 2210
- Joined: 13 Mar 2014, 09:16
- Znuny Version: 6.0.14
- Real Name: Rolf Straub
Re: GenericAgent und Webservice
Ganz so weit entfern bist du ja nicht. Probier's mal so:
Code: Select all
my $Command=<< 'EOF';
curl -X POST -H "Content-Type:application/json" http://ServerIP/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket -d "{"UserLogin":"'UserName'","Password":"UserPasswort'","Ticket":{"Title":"'REST Create Test2'","Queue":"'IT Support'","State":"'open'","Priority":"'5 very high'","CustomerUser":"'A0495334'"},"Article":{"Subject":"'Rest Create Test2'","Body":"'This is only the test2'","ContentType":"'text/plain; charset=utf8'"}}"
EOF
qx($Command);
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: GenericAgent und Webservice
Zeig mal Dein Modul... (die .pm-Datei)
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: GenericAgent und Webservice
Ich habe die Anpassungen vorgenommen, aber scheint immer noch nicht zu funktionieren.
Das Error.log sieht wie folgt aus:
und auf dem Zielserver beim Webservice sind folgende Fehler beim Debugger ersichtlich:
Irgendwie werden meine " beim senden entfernt.
Wenn ich den Befehl auf der Shell eingebe erscheinen die Daten beim Server so:
und wenn ich es über den GenericAgent mache, kommen die Daten so an:
Mein Modul sieht momentan so aus:
Das Error.log sieht wie folgt aus:
Code: Select all
[Fri Dec 9 18:06:36 2016] CreateRemoteTicket.pm: Subroutine new redefined at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 19.
[Fri Dec 9 18:06:36 2016] CreateRemoteTicket.pm: Subroutine Run redefined at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 29.
Code: Select all
No data provided
Error while decoding request content.
Wenn ich den Befehl auf der Shell eingebe erscheinen die Daten beim Server so:
Code: Select all
{"UserLogin":"UserName","Password":"UserPassword","Ticket":{"Title":"REST Create Test","Queue":"IT Support","State":"open","Priority":"3 normal","CustomerUser":"A0495334"},"Article":{"Subject":"Rest Create Test","Body":"This is only a test2","ContentType":"text/plain; charset=utf8"}}
Code: Select all
{UserLogin:UserName,Password:UserPassword,Ticket:{Title:REST Create Test2,Queue:IT Support,State:open,Priority:5 very high,CustomerUser:A0495334},Article:{Subject:Rest Create Test2,Body:This is only the test2,ContentType:text/plain; charset=utf8}}
Code: Select all
#!/usr/bin/perl
package GAModules::CreateRemoteTicket;
use strict;
use warnings;
use utf8;
use lib '/opt/otrs/';
use lib '/opt/otrs/Kernel/cpan-lib';
use lib '/opt/otrs/Custom';
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new(
'Kernel::System::Log' => {
LogPrefix => 'Custom-CreateRemoteTicket',
},
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
# Get some ticket information
# [...]
# Creat the ticket
my $Command=<< 'EOF';
curl -X POST -H "Content-Type:application/json" http://ZielServer/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket -d "{"UserLogin":"'UserName'","Password":"'UserPassword'","Ticket":{"Title":"'REST Create Test2'","Queue":"'IT Support'","State":"'open'","Priority":"'5 very high'","CustomerUser":"'A0495334'"},"Article":{"Subject":"'Rest Create Test2'","Body":"'This is only the test2'","ContentType":"'text/plain; charset=utf8'"}}"
EOF
qx($Command);
}
1;
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: GenericAgent und Webservice
Die URL muss *hinter* die ganzen Optionen! also curl -H ... -d ... URL
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: GenericAgent und Webservice
Das hab ich nun auch getestet, mit dem gleichen Ergebnis.
Die Daten kommen beim Webservice an, jedoch fehlen irgendwie die Hochkommas, sodass der Webservice die Daten nicht lesen kann.
Darum auch der Fehler:
Was ich jedoch nicht verstehe ist, dass beim normalen curl Befehl das Ticket erstellt wird und über das Modul wird der Curl Befehl nicht richtig übermittelt oder anders interpretiert.
Die Daten kommen beim Webservice an, jedoch fehlen irgendwie die Hochkommas, sodass der Webservice die Daten nicht lesen kann.
Darum auch der Fehler:
Code: Select all
Error while decoding request content.
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: GenericAgent und Webservice
Mal als reine Perl-Lösung: (ungetestet)
Code: Select all
use HTTP::Tiny;
my $URL = 'http://ZielServer/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket';
my $JSONObject = $Kernel::OM->Get('Kernel::System::JSON');
my $Data = {
UserLogin => 'UserName',
Password => 'UserPassword',
Ticket => {
Title => 'REST Create Test2',
Queue => 'IT Support',
State => 'open',
Priority => '5 very high',
CustomerUser => 'A0495334',
},
Article => {
Subject => 'Rest Create Test2',
Body => 'This is only the test2',
ContentType => 'text/plain; charset=utf8',
},
};
my $RestData = $JSONObject->Encode( Data => $Data );
my $ua = HTTP::Tiny->new;
my $Response = $ua->request(
'POST',
$URL,
{
headers => {
Accept => 'application/json',
'Content-Type' => 'application/json',
},
content => $RestData,
}
);
my $MainObject = $Kernel::OM->Get('Kernel::System::Main');
my $LogObject = $Kernel::OM->Get('Kernel::System::Log');
$LogObject->Log( Priority => error => Message => $MainObject->Dump( $Response ) );
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: GenericAgent und Webservice
Mit diesem Script sieht es sehr gut aus.
Das Ticket wird auf der anderen Seite mit den Angaben erstellt.
Der Server jedoch läuft in einen Error
Aber das Ticket wird schon mal zu mindest erstellt
Das Ticket wird auf der anderen Seite mit den Angaben erstellt.
Der Server jedoch läuft in einen Error
Code: Select all
Can't call method "Get" on an undefined value at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 4
-
- Znuny guru
- Posts: 2210
- Joined: 13 Mar 2014, 09:16
- Znuny Version: 6.0.14
- Real Name: Rolf Straub
Re: GenericAgent und Webservice
Und was steht in Zeile 4 ?
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: GenericAgent und Webservice
Code: Select all
my $JSONObject = $Kernel::OM->Get('Kernel::System::JSON');
Kann es sein, dass ich noch ein Modul installieren muss?
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: GenericAgent und Webservice
Diese Zeile muss in die Subroutine Run und nicht an den Anfang. Du lädst ja erst später Kernel::System::ObjectManager. Diese Zeile holt das JSON-Objekt aus dem Objektmanager.
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: GenericAgent und Webservice
Also ich bin mir schon bewusst, dass ich von Perl fast keine Ahnung habe.
Aber ich sehe beim besten Willen keine Subroutine die run heisst. Kannst du mir das bitte ein wenig genauer erklären?
Aber ich sehe beim besten Willen keine Subroutine die run heisst. Kannst du mir das bitte ein wenig genauer erklären?
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: GenericAgent und Webservice
Ah, Du hast meinen Code 1:1 übernommen und nicht in Dein Modul eingebunden...
Als eigenständiges Skript:
Als eigenständiges Skript:
Code: Select all
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use lib '/opt/otrs/';
use lib '/opt/otrs/Kernel/cpan-lib';
use lib '/opt/otrs/Custom';
use HTTP::Tiny;
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new(
'Kernel::System::Log' => {
LogPrefix => 'Custom-CreateRemoteTicket',
},
);
my $URL = 'http://ZielServer/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket';
my $JSONObject = $Kernel::OM->Get('Kernel::System::JSON');
my $Data = {
UserLogin => 'UserName',
Password => 'UserPassword',
Ticket => {
Title => 'REST Create Test2',
Queue => 'IT Support',
State => 'open',
Priority => '5 very high',
CustomerUser => 'A0495334',
},
Article => {
Subject => 'Rest Create Test2',
Body => 'This is only the test2',
ContentType => 'text/plain; charset=utf8',
},
};
my $RestData = $JSONObject->Encode( Data => $Data );
my $ua = HTTP::Tiny->new;
my $Response = $ua->request(
'POST',
$URL,
{
headers => {
Accept => 'application/json',
'Content-Type' => 'application/json',
},
content => $RestData,
}
);
my $MainObject = $Kernel::OM->Get('Kernel::System::Main');
my $LogObject = $Kernel::OM->Get('Kernel::System::Log');
$LogObject->Log( Priority => error => Message => $MainObject->Dump( $Response ) );
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: GenericAgent und Webservice
Ja, ich dachte das Script sei ein komplettes Modul.
Nun funktioniert es! Danke viel Mals für deine Unterstützung und Geduld.
Nun funktioniert es! Danke viel Mals für deine Unterstützung und Geduld.