

- Questetra BPM Suite の外からケースを開始する(準備編)
- Questetra BPM Suite の外からケースを開始する(curl編)
- Questetra BPM Suite の外からケースを開始する(Python編)
- Questetra BPM Suite の外からケースを開始する(エラー対処編)
- Questetra BPM Suite の外からケースを開始する(デバッグ編)
Python でメッセージ開始イベント (HTTP) にアクセスする
前回の記事では curl コマンドを用いて Questetra BPM Suite のメッセージ開始イベント (HTTP) にアクセスし、ケースを新規開始しました。今回は Python 3 で同じ処理をするコード例を紹介します。この記事では、HTTP リクエストの送信には Requests パッケージを用います。インストールしていない場合はインストールをお願いします。
まず、件名だけを入力した状態でケースを新規開始しましょう。サンプルコードは以下の通りです。
import requests
if __name__ == '__main__':
# API エンドポイント
url = 'https://example.questetra.net/System/Event/MessageStart/{processModelInfoId}/{nodeNumber}/start'
params = { # 辞書型にパラメータと、それに渡す値を格納
'key': '{APIキー}',
'title': 'テスト',
}
try:
r = requests.post(url, data=params) # POST 送信
r.raise_for_status()
print(f'Status Code: {r.status_code}')
print(r.text)
except requests.exceptions.HTTPError: # HTTP エラーをキャッチ
print('Error')
print(f'Status Code: {r.status_code}')
print(r.text)
except requests.exceptions.Timeout: # タイムアウトをキャッチ
print('Timeout')
このスクリプトを実行することで、件名が「テスト」のケースを新規開始できます。他のパラメータにも値を渡したい場合、params に要素を追加してください。パラメータ名が key、渡す値が value です。ファイル型パラメータ以外では、例えば次のようになります。
params = {
'key': '{APIキー}',
'title': 'テスト',
'q_str': 'ケース開始テストです',
'q_float': 1.23,
'q_selects': 'false',
'q_date': '2018-04-01',
'q_datetime': '2018-04-01 12:34',
'q_email': 'questetra+Canarias@gmail.com',
'q_group': '10 管理部',
}curl 編と同じく、ファイル型パラメータへのデータ送信は少し手順が違います。
...
params = { # ファイル型以外のパラメータ
'key': '{APIキー}',
'title': 'テスト',
}
import mimetypes # MIMEタイプ判別のため
files = [ # ファイル型パラメータ
# (パラメータ名, (ファイル名, ファイルオブジェクト, MIMEタイプ))
('q_file', ('ques-kun-01.png', open('./ques-kun-01.png', 'rb'), mimetypes.guess_type('./ques-kun-01.png')[0])),
]
try:
r = requests.post(url, data=params, files=files) # POST 送信
...ファイル型とそれ以外のパラメータで、格納先を分ける必要があります。その上で requests.post() メソッドの data パラメータと files パラメータにそれぞれを渡してください。また、ファイルオープンはバイナリモードで行ってください。curl コマンドの場合と違って、送信する際のデータ形式を気にする必要はありません。Requests ライブラリによって、文字列のみの送信の場合は application/x-www-form-urlencoded 形式、ファイルを含む場合には multipart/form-data 形式に自動的に変換されます。
最後に、すべてのデータ項目にデータを入力してケースを開始するコードを例として挙げておきます。
import requests
import mimetypes
if __name__ == '__main__':
# API エンドポイント
url = 'https://example.questetra.net/System/Event/MessageStart/{processModelInfoId}/{nodeNumber}/start'
params = { # ファイル型以外のパラメータ
'key': '{APIキー}',
'title': 'テスト',
'q_str': 'ケース開始テストです',
'q_float': 1.23,
'q_selects': 'false',
'q_date': '2018-04-01',
'q_datetime': '2018-04-01 12:34',
'q_email': 'questetra+Canarias@gmail.com',
'q_group': '10 管理部',
}
files = [ # ファイル型パラメータ
# ファイルの複数送信もできます
('q_file', ('ques-kun-01.png', open('./ques-kun-01.png', 'rb'), mimetypes.guess_type('./ques-kun-01.png')[0])),
('q_file', ('ques-kun-02.png', open('./ques-kun-02.png', 'rb'), mimetypes.guess_type('./ques-kun-02.png')[0])),
]
try:
r = requests.post(url, data=params, files=files) # POST 送信
r.raise_for_status()
print('Headers: ')
print(r.request.headers)
print(f'Status Code: {r.status_code}')
print(r.text)
except requests.exceptions.HTTPError: # HTTP エラーをキャッチ
print('Error')
print(f'Status Code: {r.status_code}')
print(r.text)
except requests.exceptions.Timeout: # タイムアウトをキャッチ
print('Timeout')
このように Python では、パラメータと渡す値の組を用意すれば簡単にケースを新規開始できます。業務で用いるプログラムの中で API を利用すれば、状況に応じて自動でパラメータに渡す値を決定し、ケースを開始することもできるでしょう。業務の自動化への手法の一つとして、ぜひメッセージ開始イベント (HTTP) の活用を検討してみましょう!

