PyOTRSを使ってOTRSのチケットを取得する

2018.03.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Introduction

REST APIを使用してOTRSにアクセスするPython wrapper PyOTRSを使ってみましたのでご紹介します。

System Requirements

Outline

PyOTRSでは以下操作が可能です。

* create a new Ticket
* get the data of a specific Ticket
* search for Tickets
* update existing Tickets

主なメソッド

* Client.session_create (Use credentials to "log in")
* Client.ticket_create
* Client.ticket_get_by_list  (takes a list)
* Client.ticket_get_by_id  (takes an int)
* Client.ticket_search
* Client.ticket_update

今回は以下メソッドを使用して担当者が未割り当てのチケット数自分が担当のチケットのタイトルとチケットリンクを取得します。

  • Client.session_create
  • Client.ticket_get_by_id
  • Client.ticket_search

Install

PyOTRSをインストール

$ pip install PyOTRS

sample code

from pyotrs import Client
from datetime import datetime, timedelta, timezone

# OTRS constant
URL = "https://your_otrs_domain"
USERNAME = "your_user_name"
PASSWORD = "your_password"
TICKET_LINK = URL + "/otrs/index.pl?Action=AgentTicketZoom;TicketID="

# Create session
client = Client(URL, USERNAME, PASSWORD)
client.session_create()

# Get my ticket (e.g. State:'new' or 'open'、Queue:'Raw'、OwnerIDs: 28)
ticket_ids = client.ticket_search(States=['new', 'open'], Queues=['Raw'], OwnerIDs=[28])

print("number of my tickets:" + str(len(ticket_ids)))

for ticket_id in ticket_ids:
    get_ticket = client.ticket_get_by_id(ticket_id)

    print(get_ticket.field_get("Title"))
    print(TICKET_LINK + ticket_id)

# Setting timezone
jst_time = timezone(timedelta(hours=+9), 'JST')
day = datetime.now(jst_time) - timedelta(days=1)

# Get ticket (e.g. younger than 1 day State:'new'、Queue:'Raw'、OwnerIDs: 1)
ticket_ids = client.ticket_search(TicketCreateTimeNewerDate=day, States=['new'], Queues=['Raw'], OwnerIDs=[1])

print("number of new tickets(younger than 1 day):" + str(len(ticket_ids)))

セッションを作る

Client.session_createを使用してセッションを作ります。

# Create session
client = Client(URL, USERNAME, PASSWORD)
client.session_create()

ステータスが'new' or 'open'で自分のチケットを取得する

Client.ticket_searchを使用して自分が担当のチケットを取得します。

# Get my ticket (e.g. State:'new' or 'open'、Queue:'Raw'、OwnerIDs: 28)
ticket_ids = client.ticket_search(States=['new', 'open'], Queues=['Raw'], OwnerIDs=[28])

print("number of my tickets:" + str(len(ticket_ids)))

Client.ticket_get_by_idを使用してticketの情報を取得します。

for ticket_id in ticket_ids:
    get_ticket = client.ticket_get_by_id(ticket_id)

    print(get_ticket.field_get("Title"))
    print(TICKET_LINK + ticket_id)

担当者が未割り当てのチケット数を確認する

ここでは、1日経過していないチケットで、ステータスが新規、担当者が未割り当てのチケット数を確認しています。

# Setting timezone
jst_time = timezone(timedelta(hours=+9), 'JST')
day = datetime.now(jst_time) - timedelta(days=1)

# Get ticket (e.g. younger than 1 day State:'new'、Queue:'Raw'、OwnerIDs: 1)
ticket_ids = client.ticket_search(TicketCreateTimeNewerDate=day, States=['new'], Queues=['Raw'], OwnerIDs=[1])

print("number of new tickets(younger than 1 day):" + str(len(ticket_ids)))

実行

$ python get-otrs-ticket-using-pyotrs.py
number of my tickets:2
ExampleTitle1
https://your_otrs_domain/otrs/index.pl?Action=AgentTicketZoom;TicketID=300**1
ExampleTitle2
https://your_otrs_domain/otrs/index.pl?Action=AgentTicketZoom;TicketID=300**2
number of new tickets(younger than 1 day):54

チケット情報を取得することができました。

まとめ

PyOTRSを使用してチケットを取得してみました。 取得した情報をChatWorkやSlackなどのコミュニケーションツールに通知することで、OTRSへログインしていない時でもチケットを確認することができるかと思います。

ではまた。

参考URL