curl コマンドや外部プログラムからプロセスを開始する

Questetra BPM Suite で新しくプロセスを開始しようと思った時、ログインして「新規開始」ページを開いて……という手順を踏みます。しかしワークフローアプリの方でメッセージ開始イベント (HTTP) を設定しておくと、curl コマンドや自分で用意したプログラムから HTTP リクエストを送ることで、プロセスを開始することができるようになります。これにより、人の手を介さずにプロセスを自動開始したり、システム間での連携を図ったりといったことが可能になります。

メッセージ開始イベント (HTTP) は普通の開始イベントと同じように、ワークフロー図の中に設置して使用します。開始イベントはユーザが手動で「新規開始」をクリックすることでプロセスを開始しますが、メッセージ開始イベント (HTTP) は外部システムから HTTP リクエストを受信した場合にプロセスを開始します。各メッセージ開始イベント (HTTP) にはエンドポイントが与えられており、外部システムからの利用が可能になっています。

本連載では以下の内容を扱います。

  • メッセージ開始イベント (HTTP) の設定
  • IPアドレス制限の設定
  • ブラウザからの GET 送信による簡易的なプロセス開始
  • curl コマンドを用いたプロセス開始
  • Python を用いたプロセス開始

今回はこのうち、「ブラウザからの GET 送信による簡易的なプロセス開始」までを扱います。

メッセージ開始イベント (HTTP) の設定

メッセージ開始イベント (HTTP) の動作を確認するための簡単なアプリを作成しましょう。アプリを新規作成して、まず次のようなワークフロー図を描いてください。メッセージ開始イベント (HTTP) は advanced パレットの「開始イベント」カテゴリ内にあります。

データ項目はひとまず「件名」だけで構いません。データ編集許可はメッセージ開始イベント (HTTP) を「編集可」、「確認」タスクを「表示のみ」に設定してください。

スイムレーンの処理担当者は、デフォルトのあなたのアカウントのみのままで大丈夫です。

以上の設定が終わったら、保存してアプリをリリースしましょう。これによりエンドポイントが確定します。アプリ詳細画面にあるワークフロー図で、メッセージ開始イベント (HTTP) のプロパティを開いてください。URL・パラメータのボタンがクリックできるようになっているはずです。このメッセージ開始イベント (HTTP) 詳細でエンドポイントの URL や各種パラメータ名などが確認できるので、覚えておいてください。

「URL・パラメータ」ボタンがグレーアウトされていてクリックできない時は、リリース済のバージョンのアプリ詳細画面を開いているかどうか確認してください。開発中のバージョンだった時は、詳細画面の「バージョン一覧」でバージョンを切り替えられます。

ブラウザからの GET 送信による簡易的なプロセス開始

では、まずブラウザから特定の URL にアクセスすることで、プロセスを開始してみましょう。作成したアプリに設置したメッセージ開始イベント (HTTP) のエンドポイント URL などが必要になるので、「メッセージ開始イベント (HTTP) 詳細」を開いておいてください。

今回はプロセスを開始すると同時に、データ項目「件名」に入力する内容も送信することにします。エンドポイント URL の末尾にパラメータを付与し、アプリに送信したいデータを渡すことができます。例えば件名を「test」にするならば、次のようになります。

https://example.questetra.net/System/Event/MessageStart/8/0/start?key={API キー}&title=test

エンドポイント URL の末尾に ? を付け、その後ろに name=content の形式でデータを付与します。API キーは必須です。「メッセージ開始イベント (HTTP) 詳細」の受信パラメータ一覧に記載されているので、そこからコピー&ペーストしてください。受信パラメータ名も受信パラメータ一覧に列挙されています。

URL を組み立てたら、ブラウザからその URL にアクセスしてみましょう。403 エラーが返ってくると思います。Questetra BPM Suite の IP アドレス制限機能により、アクセスが遮断されたのです。外部ネットワークから API を利用する場合には、Questetra BPM Suite 側で IP アドレス制限を適切に緩和する必要があります。

これまでに IP アドレス制限の設定を変更したことがある方の場合、正常にプロセスが起動するかもしれません。403 エラーが返ってこなかった場合は、次の「IP アドレス制限の設定」は飛ばして「ブラウザからのプロセス開始を再試行」に進んでください。

IP アドレス制限の設定

エンドポイントへのアクセスに用いる IP アドレスを Questetra BPM Suite に登録しましょう。初期設定では、外部ネットワークからのメッセージ開始イベント (HTTP) へのアクセスはすべて拒否されてしまいます。

IP アドレス制限の設定はシステム設定 > セキュリティ内にあります。先ほど作成したアプリのメッセージ開始イベント (HTTP) に対するアクセス許可の設定をしましょう。

「システム設定」へはシステム管理権限を持ったアカウントでないと入れません。

パスプレフィックスの指定

IP アドレス制限はパスプレフィックスごとに設定することができます。特定のメッセージ開始イベント (HTTP) への IP アドレス制限をするためには、メッセージ開始イベント (HTTP) – 特定ノードの設定項目を追加してください。「メッセージ開始イベント/メッセージ受信中間イベント設定」のプルダウンメニューから選択できます。特定のノードを示すためのパスプレフィックスは以下のようになります。

/System/Event/MessageStart/(processModelInfoId)/(nodeNumber)/

processModelInfold はそれぞれのアプリに振られた番号、nodeNumber はワークフロー図上のそれぞれのノードに振られた番号を指しています。この 2 つの番号はメッセージ開始イベント (HTTP) のエンドポイント URL にも使われているので、それで確認することをおすすめします。たとえば、エンドポイント URL が

https://example.questetra.net/System/Event/MessageStart/8/0/start

であるときは、processModelInfold が 8 、nodeNumber が 0 になります。エンドポイント URL はアプリ詳細画面のワークフロー図から確認してください。

他にも、processModelInfold はアプリ ID の頭から m を取ったものと一致するので、「アプリ詳細」でアプリ ID を確認して把握する、という方法もあります。nodeNumber は、ワークフロー図における各ノードのプロパティウインドウ内に「ノード番号」として記載されています。

アクセスを許可する IP アドレスの指定

各パスプレフィックスに対して、アクセスを許可する IP アドレスを指定できます。IP アドレスは次のように入力してください。

  • グローバル IP アドレスで入力してください。
  • IPv4 を使用してください。IPv6 には対応していません。
  • IP アドレスは単独指定/範囲指定、どちらも可能です。
    • 範囲指定にはサブネットマスクを使用してください(例: 69.208.0.0/22
  • 0.0.0.0/0を指定するとすべてのグローバル IP アドレスからのアクセスを許可します。
  • 空にすると外部ネットワークからの全アクセスを拒否します。

また、IP アドレス制限設定はパスプレフィックスが長いものが優先して適用されます。例えば「全体設定」やパスプレフィックス /System/ に対して 0.0.0.0/0 が許可されていたとしても、特定ノードに対してより厳しい IP アドレス制限が設けられていれば、そのノードへのアクセス制限へはそちらの設定が適用されます。設定項目の並び順は優先度に影響しません。試しに先ほど作成したアプリのメッセージ開始イベント (HTTP) に対して、単独 IP アドレスなど狭い範囲のアクセス許可設定をしてみましょう。そしてワークフロー図からメッセージ開始イベント (HTTP) 詳細」を開いて、「接続が許可されているネットワーク」を確認してください。パスプレフィックスが他の設定項目より長いので、優先して設定値が適用されているはずです。

設定を変更したら「保存」ボタンを押すのを忘れないように!

ブラウザからのプロセス開始を再試行

エンドポイントへのアクセスに用いる IP アドレスを登録したら、もう一度ブラウザからメッセージ開始イベント (HTTP) にアクセスしてみましょう。今度は数字だけが表示されるページが開いたかと思いますが、それは無視してかまいません。あなたのアカウント(処理担当者)で Questetra BPM Suite にログインすれば、プロセスが開始され「確認」タスクが届いているはずです。このとき、件名がパラメータに渡したものになっているかどうか確認してください。

403 Forbidden エラーが返ってきた場合は IP アドレス制限設定を確認してください。お使いのグローバル IP アドレスに対して、メッセージ開始イベント (HTTP) へのアクセス許可がされていません。

このように、Questetra BPM Suite を開かなくてもプロセスを開始することができるのです。次の記事ではブラウザも使わず、curl コマンドを用いてコマンドラインからプロセスを開始する方法を取り上げます。

付録: IP アドレス制限の設定方法詳細

IP アドレス制限の有効化/無効化

「IP アドレス制限を有効にする」のチェックボックスで行えます。無効にすると IP アドレスによるアクセス制限を行わなくなるため、以下の設定項目もなくなります。基本的には無効にしないでください。

全体設定

お使いの Questetra BPM Suite 環境全体にアクセス可能な IP アドレスを指定できます。ここでのアクセス許可は、メッセージ開始イベント/メッセージ受信中間イベント以外にも及びます。

メッセージ開始イベント/メッセージ受信中間イベント設定

全体設定よりも細かくアクセス許可範囲を指定できます。今回使用するのは「メッセージ開始イベント (HTTP)」なので、

  • 全て
  • メッセージ開始イベント (HTTP) – 全アプリ
  • メッセージ開始イベント (HTTP) – 特定アプリ
  • メッセージ開始イベント (HTTP) – 特定ノード

のいずれかを追加することになります。

「特定アプリ」を利用する場合は当該のアプリを新規作成するまで、「特定ノード」を利用する場合は当該のアプリをリリースするまで、パスプレフィックスが確定しません。パスプレフィックスは以下のようになります。

アクセス許可範囲 パスプレフィックス
全て /System/
全アプリ /System/Event/MessageStart/
特定アプリ /System/Event/MessageStart/(processModelInfoId)/
特定ノード /System/Event/MessageStart/(processModelInfoId)/(nodeNumber)/