Questetra BPM Suite の外からケースを開始する(Python編)

Python でメッセージ開始イベント (HTTP) にアクセスする

前回の記事では curl コマンドを用いて Questetra BPM Suite のメッセージ開始イベント (HTTP) にアクセスし、ケースを新規開始しました。今回は Python 3 で同じ処理をするコード例を紹介します。この記事では、HTTP リクエストの送信には Requests パッケージを用います。インストールしていない場合はインストールをお願いします。

ワークフローアプリは前回の curl 編と同じものを使用します。もし作成していない場合は、準備編と curl 編の「さまざまなデータを送信する > アプリの設定」を参照しながら、アプリを作成・リリースしておいてください。

まず、件名だけを入力した状態でケースを新規開始しましょう。サンプルコードは以下の通りです。

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

メッセージ開始イベント (HTTP) の API へ文字データを送信する場合、文字コードは UTF-8 を使用する必要があります。ただし、Python 3 はデフォルトで UTF-8 を使用するため、文字コードに関する設定は必要ありません。

このスクリプトを実行することで、件名が「テスト」のケースを新規開始できます。他のパラメータにも値を渡したい場合、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) の活用を検討してみましょう!

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む