Benutzer-Werkzeuge

Webseiten-Werkzeuge


otrs-soap-python

Zugriff auf die OTRS-Klassen via SOAP und - natürlich Python, was sonst

Motivation

Ich möchte gerne Tickets in OTRS mit python anlegen und auslesen. Damit kann ich einfache Support-Schnittstellen in User-Portale einbauen.

Installation OTRS mit SOAP

1. OTRS ist Perl (uaaarg), bitte zunächst die Installationsanweisungen für OTRS befolgen und OTRS soweit testen.

  • Perl Module installieren
  • Perl SOAP installieren
    • siehe unten, Bug in Soap-lite!!
    • einige Perl-Module müssen installiert werden (Abhängigkeiten SoapLite)
  • SOAP in OTRS freischalten (Username und Passwort in Sysconfig setzen)

2. Ich habe OTRS-3.0.6 unter CentOS-5.6-x64 im Einsatz. Erste Versuche mit SOAPpy scheitern an dieser Fehlermeldung:

no element found at line 1, column 0, byte -1 at /usr/lib/perl5/XML/Parser.pm
line 187

das ist dieser Bug: http://bugs.otrs.org/show_bug.cgi?id=5467

und wird mit diesem Patch behoben:

http://users.otrs.com/~mb/SOAP-Lite-0.713_01.tar.gz

mittlerweile habe ich auf OTRS-3.1.4 geupgraded, alle nachfolgenden Codes funktionieren mit dieser Version

Weiter auf Client-Seite mit Python

wir gehen davon aus, das otrs mit SOAP funktioniert

1. OTRS kann KEIN WSDL!! Dh wir können keine Python-WSDL-Module verwenden (zB. suds), sondern brauchen die kompliziertere SOAPpy

2. Ich habe ein WSDL-File auf dem OTRS-Server abgelegt. Darin definiere ich die Services, dann können wir in SOAPpy auf WSDL umschalten. Das WSDL-File kann hier eingesehen werden und ist eine Kopie vom OTRS User Forum (http://forums.otrs.org/viewtopic.php?f=20&t=1257) mit den nötigen Änderungen für unser OTRS:

http://194.94.30.115/otrs.wsdl

erste Tests - endlich Code
#!/usr/local/bin/python
 
from SOAPpy import WSDL
wsdlfile='http://194.94.30.115/otrs.wsdl'
server=WSDL.Proxy(wsdlfile)
print server.methods.keys()
 
# dieses Ticket habe ich vorher in OTRS angelegt und mir die Ticketnummer kopiert:
TicketNr='2011030404000012'
 
tickets=server.Dispatch('soapusername',
                        'soapstrenggeheimespasswort',
                        'TicketObject',
                        'TicketSearch',
                        'TicketNumber',
                        TicketNr,
                        'UserID',
                        1)
 
 
print tickets

Als Ergebnis erhalte ich dieses Array:

<SOAPpy.Types.structType DispatchResponse at -1210679540>: {'s-gensym15': 2011030404000012L, 's-gensym13': 5}

das scheint ein Struct mit Typ DispatchResponse zu sein, es wird die TicketNr und die TicketID zurückgegeben, die suche nach dem Ticket war also erfolgreich.

soweit erstmal, SOAP funzt prinzipiell, jetzt gehts in die Details

ein neues Ticket anlegen
title    = "My Test Ticket 2 via SOAP and Python"
myfrom     = "me@fh-schmalkalden.de"
 
ticketID=server.Dispatch('soapuser',
                        'soappasswd',
"TicketObject", "TicketCreate", 
"Title",        title, 
"Queue",        "Postmaster", 
"Lock",         "Unlock", 
"PriorityID",   2, 
"State",        "new", 
"CustomerUser", myfrom, 
"OwnerID",      1, 
"UserID",       1,
"LockID",1
)
 
print ticketID
einen Artikel zu diesem Ticket anlegen
body="Bitte helfen sie mir, mei internet gäht nimmer".decode('utf-8')
 
artID=server.Dispatch('soapuser',
                        'soappasswd',
"TicketObject",   "ArticleCreate",
"TicketID",       ticketID,
"ArticleType",    "webrequest",
"SenderType",     "customer",
"HistoryType",    "WebRequestCustomer",
"HistoryComment", "created from Python",
"From",           myfrom,
"Subject",        title,
"ContentType",    "text/plain; charset=utf-8",
"Body",           body,
"UserID",         1,
"Loop",           0,
"AutoResponseType", 'auto reply',
"OrigHeader", (
        'From',myfrom,
        'To','Postmaster',
        'Subject',title,
        ),
 
)
 
print artID

die artID war aber None, keine Ahnung warum, jedenfalls habe ich jetzt ein neues Ticket im OTRS mit einem zugehörigen Record.

otrs-soap-python.txt · Zuletzt geändert: 2012/05/07 17:57 von 2007