GenericAgent und Webservice

Allgemein Fragen, deutsche News, Ankündigungen & Events zum OTRS
Post Reply
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

GenericAgent und Webservice

Post by GMC »

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
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: GenericAgent und Webservice

Post by RStraub »

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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

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.
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: GenericAgent und Webservice

Post by RStraub »

Okay. Erstell dir mal diese Datei in ~/Custom/GAModules/CreateRemoteTicket.pm :

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;
Dann trag im GenericAgent als Custom-Modul ein: 'GAModules::CreateRemoteTicket'

Hilft dir das weiter?
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

Danke für deine Unterstützung.
Muss ich das Script noch anpassen?
Also kann ich bei "Your System Command here" den Curl Befehl eintragen?
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: GenericAgent und Webservice

Post by RStraub »

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.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

OK, Danke viel Mals.
Schlage mich noch ein wenig mit SyntaxError's, aber ich denke ich kriege das irgendwie hin :)
Nochmals Danke
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

Ich krieg es leider doch nicht hin.
Ich habe in der Zeile bei "Your System Command here"

Code: Select all

   qx{ Your System Command here };
folgenden Curl Befehl hineinkopiert:

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'"}}"
Beim Apache log ist folgende Meldung ersichtlich:

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;
Wenn ich den Curl Befehl in der Shell eingebe, funktioniert dieser einwandfrei. Nur über dieses Modul nicht.
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: GenericAgent und Webservice

Post by RStraub »

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

Post by reneeb »

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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

Ich habe die Anpassungen vorgenommen, aber scheint immer noch nicht zu funktionieren.
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.
und auf dem Zielserver beim Webservice sind folgende Fehler beim Debugger ersichtlich:

Code: Select all

No data provided
Error while decoding request content.
Irgendwie werden meine " beim senden entfernt.
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"}}
und wenn ich es über den GenericAgent mache, kommen die Daten so an:

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}}
Mein Modul sieht momentan so aus:

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;
reneeb
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

Post by reneeb »

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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

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:

Code: Select all

Error while decoding request content.
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.
reneeb
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

Post by reneeb »

Mal als reine Perl-Lösung:

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 ) );

(ungetestet)
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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

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

Code: Select all

Can't call method "Get" on an undefined value at /opt/otrs/Custom/GAModules/CreateRemoteTicket.pm line 4
Aber das Ticket wird schon mal zu mindest erstellt :)
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: GenericAgent und Webservice

Post by RStraub »

Und was steht in Zeile 4 :) ?
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

Code: Select all

my $JSONObject = $Kernel::OM->Get('Kernel::System::JSON');
nur weiss ich nicht was diese Zeile machen sollte.
Kann es sein, dass ich noch ein Modul installieren muss?
reneeb
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

Post by reneeb »

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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

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?
reneeb
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

Post by reneeb »

Ah, Du hast meinen Code 1:1 übernommen und nicht in Dein Modul eingebunden...

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
GMC
Znuny newbie
Posts: 16
Joined: 27 Nov 2015, 10:32
Znuny Version: 4.0.14

Re: GenericAgent und Webservice

Post by GMC »

Ja, ich dachte das Script sei ein komplettes Modul.
Nun funktioniert es! Danke viel Mals für deine Unterstützung und Geduld.
Post Reply