AUTORO REST APIを使用する
この記事では、AUTORO REST APIの使用方法を紹介します。
以下操作が可能です。
・認証トークンを生成する
・実行キューを作成する
・実行キューの一覧を取得する
・実況キューをキャンセルする
・ワークフロー一覧を取得する
AUTORO REST API
AUTOROではREST APIを準備しています。
このAPIを使用すると、上述の「AUTORO REST APIで可能な操作」を、以下のような様々な環境から実行できるようになります。
- Windowsのコマンドプロンプト
- macのターミナル
- AUTOROのHTTPRequestアクション
- JavaScriptのfetchまたはXMLHttpRequest
- ChromeDevTools
- スプレッドシート(GoogleAppsScript)
- WordPress(php)
- 何らかのアプリ内におけるHTTPリクエスト送信機能
この記事では、AUTORO REST APIへの直接的なリクエストの送信方法を紹介します。
※APIキーが発行できていない方は、こちらから発行方法をご確認ください。
認証トークン(JWT)の生成方法
AUTORO REST APIにて諸々の操作を実行するにあたっては、まず最初にAUTORO REST APIの認証トークン(JWT)を生成する必要があります。
JWTは、あるプロジェクトで発行したAPIキー2種(ACCESS KEY ID, SECRET ACCESS KEY)と、任意指定が可能なトークンの有効期限(expires)から生成される認証情報となります。
このJWTをリクエストヘッダに挿入することによって、AUTORO REST APIの実行が可能になります(※JWT生成メソッドではリクエストヘッダにJWTを入れる必要はありません)
以下に、JWTの代表的な生成方法を紹介します。
https://developer.autoro.io/#token
メソッド:POST
エンドポイント:https://api.roboticcrowd.com/v1/token
APIキー2種(ACCESS KEY IDとSECRET ACCSESS KEY)があれば、以下のコピペでJWTトークンを生成できます。
# 変数に保存_ACCSESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'アクセスキー' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'シークレットアクセスキー' # HTTPリクエストでトークンを取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false
AUTORO REST APIの公式ドキュメントに、cURLの実行例が記載されています。ご確認ください。
https://developer.autoro.io/#token
curl --location --request POST "https://api.roboticcrowd.com/v1/token" \ --header "content-type: application/json" \ --data "{ \"access_key_id\": \"アクセスキー\", \"secret_access_key\": \"シークレットアクセスキー\", \"expires\": 3600 }"
Windowsのコマンドプロンプトから実行する場合、cURLは1行である必要があります。
以下をご使用ください。
curl -XPOST https://api.roboticcrowd.com/v1/token -H "Content-Type:application/json" -d "{\"access_key_id\": \"アクセスキー\", \"secret_access_key\": \"シークレットアクセスキー\", \"expires\": 3600}"
expiresは「秒」となります。
例えば、2022/10/24の14:00に、expiresが3600のJWTを発行するリクエストを実行したのであれば、そのJWTは10/24の15:00まで使用可能です。
JWTは手動で生成することも可能です。方法は以下となります。
- https://jwt.io/ を開きます。
- HEADERに以下をコピペします。
{ "alg": "HS256", "typ": "JWT" }
- PAYLOADに以下をコピペします。
{ "iss": "console.roboticcrowd.com", "sub": "発行済のACCESS KEY ID", "aud": "https://api.roboticcrowd.com/", "nbf": トークンの有効化が開始されるunix時間(10桁の数字), "exp": トークンが無効になるunix時間(10桁の数字), "scopes": "session_queue.write session_queue.read access_token.create" }
- subに発行済のACCESS KEY IDをペーストします。
- nbf,expにunix時間を入力します。
※unix時間はこちらから容易に生成できます。
※expは、上述のexpiresの秒数指定とは異なります。
※入力した数値にマウスカーソルを合わせると、実際の日時が表示されます。 - scopesに、APIキーの発行時にチェックを入れたAPIキーのスコープを入力します。
- VERIFY SIGNATUREの「your-256-bit-secret」を削除し、SECRET ACCSESS KEYをペーストします。
(secret base 64 encodedのチェックは不要です)
ここまでの操作を完了した時点でEncodedに表示されている記号文字列が、JWTです。
どこかにコピペする等して保持しておいてください。
# 変数に保存_ACCSESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'ACCESS KEY ID' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'SECRET ACCESS KEY' # HTTPリクエストでトークンを取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false
既存のワークフロー一覧を取得する
ここでは「APIキーを発行したプロジェクトに存在するワークフローの一覧」を取得する方法を紹介します。
https://developer.autoro.io/#workflow-2
メソッド:GET
エンドポイント:https://api.roboticcrowd.com/v1/workflows?page=1&per_page=300
# 変数に保存_ACCESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'アクセスキー' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'シークレットアクセスキー' # HTTPリクエストでトークンを取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false # 変数に保存_jwt +store_value_jwt: action>: StoreValue key: jwt value: +h_t_t_p_request_getAutoroJWT # テキストを作成_JWTトークンをリクエスト用の形式に加工 +text_jwt: action>: Text text: 'Bearer ${jwt}' # リクエストヘッダーを作成 +create_object_requestHeader: action>: CreateObject object: Authorization: +text_jwt # HTTPリクエスト_ワークフロー一覧を取得 +h_t_t_p_request_getWorklofws: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/workflows?page=1&per_page=5' params: '' method: GET headers: +create_object_requestHeader multipart: false
以下はワークフローを10件取得するcURLです。
curl --location --request GET "https://api.roboticcrowd.com/v1/workflows?page=1&per_page=10" \
--header "Authorization: Bearer ここにJWT"
Windowsのコマンドプロンプトを使用する場合はこちらをご使用ください。以下はワークフローを5件取得するcURLです。
curl --location --request GET "https://api.roboticcrowd.com/v1/workflows?page=1&per_page=5" \ --header "Authorization: Bearer ここにJWT"
取得するワークフローの数を調整する場合は、エンドポイントURIのpageとpage_perを調整してください。
pageは、取得するページ数です。
per_pageは、1ページあたりの取得上限数です。デフォルトは300です。
例えばエンドポイントURIをhttps://api.roboticcrowd.com/v1/workflows?page=2&per_page=5
とした場合、10件のワークフローが取得されます。
ワークフローを実行する(実行キューを作成)
AUTORO REST APIからワークフローを実行する方法を紹介します。
これはAddToQueue(ワークフローを実行する)アクションに相当します。
https://developer.autoro.io/#8229a87602
メソッド:POST
エンドポイント:https://api.roboticcrowd.com/v1/session_queues
AddToQueue(ワークフローを実行する)アクションで全く同じ事が簡単に実現可能です。
しかし折角なのでHTTPRequestでの実行方法を紹介しておきます。
# 変数に保存_ACCESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'アクセスキー' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'シークレットアクセスキー' # HTTPリクエストでトークンを取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false # 変数に保存_jwt +store_value_jwt: action>: StoreValue key: jwt value: +h_t_t_p_request_getAutoroJWT # テキストを作成_JWTトークンをリクエスト用の形式に加工 +text_jwt: action>: Text text: 'Bearer ${jwt}' # リクエストヘッダーを作成 +create_object_requestHeader: action>: CreateObject object: Authorization: +text_jwt # HTTPリクエスト_ワークフローを実行する +h_t_t_p_request_addToQueue: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/session_queues' params: workflow_id: 40589 params: hoge: 'ほげー' method: POST headers: +create_object_requestHeader multipart: false
以下で実行できます。
curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" \
--header "Authorization: Bearer ここにJWT" \
--header "content-type: application/json" \
--data "{
\"workflow_id\": [workflow_id]
}"
–dataにparamsを追加することで、実行するワークフローに変数を渡せます。
下記の例では、ワークフロー内に存在する「var1」「var2」という2つの変数に値を渡しています。
curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" \
--header "Authorization: Bearer ここにJWT" \
--header "content-type: application/json" \
--data "{
\"workflow_id\": [workflow_id],
\"params\": {
\"var1\": \"this is string\",
\"var2\": [\"this\", \"is\", \"array\"]
}
}"
Windowsのコマンドプロンプトからワークフローを実行する場合は以下をご使用ください。(※変数未使用時)
curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" -H "Authorization: Bearer ここにJWT" -H "Content-Type:application/json" -d "{\"workflow_id\": 実行したいワークフローのID}"
curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" --header "Authorization: Bearer ここにJWT" -H "Content-Type:application/json" -d "{\"workflow_id\": 40589,\"params\":{\"hoge\":\"hello\",\"fuga\":[\"this\", \"is\", \"array\"]}}"しかし、変数の名前や値に日本語が含まれている場合、上記方法では実行が成功しません。以下の方法をご検討ください。
- リクエストボディをメモ帳などで作成します。
- 作成したリクエストボディのファイル名を
任意の半角英数字.json
として保存します。
- Windows Explorerから。上述のjsonファイルを保存したフォルダに移動します。
- Windows Explorerのパス欄からフォルダパスをコピーします。
- コマンドプロンプトを起動します。
- コマンドプロンプトに
cd コピーしたフォルダパス
と入力してEnterします。 - 以下をコマンドプロンプトにコピペしてください。
curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" -H "Authorization: Bearer ここにJWT" -H "Content-Type:application/json" -d @ファイル名.json
以下のテキストをメモ帳等にコピーし、アクセスキー等を置換後、batファイルとして保存してご使用ください。
1. 変数を使用しない
@echo off rem 1. jwtをcurlで取得 curl -XPOST https://api.roboticcrowd.com/v1/token -H "Content-Type:application/json" -d "{\"access_key_id\": \"ここにアクセスキー\", \"secret_access_key\": \"ここにシークレットキー\", \"expires\": 3600}" > autoroResponse.json set /p JWT=<autoroResponse.json rem 2. jwtを変数として保持 rem 3. jwtを埋め込む curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" -H "Authorization: Bearer %JWT%" -H "Content-Type:application/json" -d "{\"workflow_id\": ワークフローID}" rem ファイル実行後に一時ファイルを削除 del autoroResponse.json
2. 変数を使用する(変数key1, 変数key2に値を入れています)
@echo off rem 1. jwtをcurlで取得 curl -XPOST https://api.roboticcrowd.com/v1/token -H "Content-Type:application/json" -d "{\"access_key_id\": \"アクセスキー\", \"secret_access_key\": \"シークレットキー\", \"expires\": 3600}" > autoroResponse.json set /p JWT=<autoroResponse.json rem 2. jwtを変数として保持 rem 3. jwtを埋め込む curl --location --request POST "https://api.roboticcrowd.com/v1/session_queues" --header "Authorization: Bearer %JWT%" -H "Content-Type:application/json" -d "{\"workflow_id\": ワークフローID,\"params\":{\"key1\":\"hello\",\"key2\":[\"this\", \"is\", \"array\"]}}" rem ファイル実行後に一時ファイルを削除 del autoroResponse.json
セッションキューを取得する
ここでは「APIキーを発行したプロジェクトに存在するセッションの一覧」を取得する方法を紹介します。
使用例としては、実行中のセッションのみを抽出したあとで、そのセッションをキャンセルすることが挙げられます(後述)
https://developer.autoro.io/#7f75472535
メソッド:GET
エンドポイント:https://api.roboticcrowd.com/v1/session_queues?page=1&per_page=50&query=
セッションを取得する際、クエリを使用して取得するセッションのフィルタリングをすることが可能です。
このクエリは、AUTOROのセッション画面から手軽に作成できます。
セッション検索後のURLのうち、sessions?から右をコピーし、エンドポイントURLのsession_queues?の右にペーストする形となります。
以下にて「現在実行中」のセッションが取得できます。
# 変数に保存_ACCESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'アクセスキー' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'シークレットアクセスキー' # HTTPリクエストでトークン(JWT)を取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false # 変数に保存_jwt +store_value_jwt: action>: StoreValue key: jwt value: +h_t_t_p_request_getAutoroJWT # テキストを作成_JWTトークンをリクエスト用の形式に加工 +text_jwt: action>: Text text: 'Bearer ${jwt}' # リクエストヘッダーを作成 +create_object_requestHeader: action>: CreateObject object: Authorization: +text_jwt # HTTPリクエスト_起動中のセッション一覧を取得 +h_t_t_p_request_getSessions: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/session_queues?per_page=50&page=1&query=is%3Arunning' params: '' method: GET headers: +create_object_requestHeader multipart: false
以下にて「現在実行中」のセッションが取得できます。
curl --location --request GET "https://api.roboticcrowd.com/v1/session_queues?page=1&per_page=3&query=is:running" \
--header "Authorization: Bearer ここにJWT"
Windowsのコマンドプロンプトからは、以下で「現在実行中のセッション」を取得できます。
curl --location --request GET "https://api.roboticcrowd.com/v1/session_queues?per_page=50&page=1&sort_by=created_at&descending=true&query=is:running" --header "Authorization: Bearer ここにJWT"
実行中のセッションをキャンセルする
ここでは実行中のワークフローをキャンセルする方法を紹介します。
具体的な使用例としては、「特定時刻に、現在実行中のセッションを全てキャンセルする」が挙げられます。
メソッド:DELETE
エンドポイント:https://api.roboticcrowd.com/v1/session_queues/セッションキューID/cancel
実行中のセッションをキャンセルするためには、リクエストのエンドポイントに実行中のセッションのID(session_queue_id)を挿入する必要があります。
これらは以下2つの方法で確認できます。
1. セッションキュー一覧取得のレスポンスから確認
取得したセッションキュー(JSON)のidが、セッションキューID(session_queue_id)となります。
2. AUTOROのセッション画面から確認
セッション一覧中、最も左のセッションID列の値がセッションキューID(session_queue_id)となります。
以下にて「現在実行中」のセッションをすべてキャンセルできます。
アクセスキー、シークレットアクセスキーの箇所をご自身のものに変更いただくと、すぐに使用できます。
スケジュール機能との併用も可能です。
# 変数に保存_ACCESS_KEY_ID +store_value_accessKey: action>: StoreValue key: accessKey value: 'アクセスキー' # 変数に保存_SECRET_ACCESS_KEY +store_value_secretAccessKey: action>: StoreValue key: secretKey value: 'シークレットアクセスキー' # HTTPリクエストでトークンを取得 +h_t_t_p_request_getAutoroJWT: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/token' params: access_key_id: ${accessKey} secret_access_key: ${secretKey} expires: 3600 method: POST headers: Content-Type: 'application/json' multipart: false # 変数に保存_jwt +store_value_jwt: action>: StoreValue key: jwt value: +h_t_t_p_request_getAutoroJWT # テキストを作成_JWTトークンをリクエスト用の形式に加工 +text_jwt: action>: Text text: 'Bearer ${jwt}' # リクエストヘッダーを作成 +create_object_requestHeader: action>: CreateObject object: Authorization: +text_jwt # HTTPリクエスト_起動中のセッション一覧を取得 +h_t_t_p_request_getSessions: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/session_queues?per_page=50&page=1&query=is%3Arunning' params: '' method: GET headers: +create_object_requestHeader multipart: false # オブジェクトのキーの値を取得_条件を満たすセッションの総数 +get_value_with_key_totalCount: action>: GetValueWithKey object: +h_t_t_p_request_getSessions key: total_count meta: display: null # 変数に保存_条件を満たすセッションの総数 +store_value_totalCount: action>: StoreValue key: totalCount value: +get_value_with_key_totalCount # 繰り返し_セッションキューは1リクエストあたり50件までしか取れない仕様のためloopを設定 +loop_sessionQueue: loop>: ${Math.ceil(totalCount / 50)} _do: # HTTPリクエスト_起動中のセッション一覧を取得_isRunning +h_t_t_p_request_getSessions_2: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/session_queues?per_page=50&page=${i+1}&query=is%3Arunning' params: '' method: GET headers: +create_object_requestHeader multipart: false # オブジェクトのキーの値を取得_セッションキュー +get_value_with_key_sessionQueue: action>: GetValueWithKey object: +h_t_t_p_request_getSessions_2 key: session_queues # 各要素について繰り返す_実行中の各セッションキュー +for_each_sessionQueue: for_each>: sQue: +get_value_with_key_sessionQueue _do: # 真のとき_このワークフローでなければセッションをキャンセルする(WORKFLOW_IDにはこのワークフローのIDが入ってます) +if_isNotThisWorkflow: if>: ${sQue.workflow.id != WORKFLOW_ID} _do: # HTTPリクエスト_セッションをキャンセル +h_t_t_p_request_kill: action>: HTTPRequest url: 'https://api.roboticcrowd.com/v1/session_queues/${sQue.id}/cancel' params: '' method: DELETE headers: +create_object_requestHeader multipart: false
以下で「現在実行中」のセッションをキャンセルできます。
curl --location --request DELETE "https://api.roboticcrowd.com/v1/session_queues/セッションキューID/cancel" \
--header "Authorization: Bearer ここにJWT" \
--header "content-type: application/json"
以下で「現在実行中」のセッションをキャンセルできます。
curl --location --request DELETE "https://api.roboticcrowd.com/v1/session_queues/セッションキューID/cancel" --header "Authorization: Bearer ここにJWT" --header "content-type: application/json"
セッション画面にqueuedやrunningのセッションが大量に存在してしまっている場合、HTTPリクエストアクションを使用したAUTOROワークフローでキャンセルすることは、ロボットの空きが無いために不可能となります。
このような場合は、詳細なCSSセレクタを取得する際にもお馴染みのGoogleChrome DevToolsからAPIリクエストを叩くことによって、比較的お手軽にAUTOROのセッションをキャンセルすることができます。
方法は以下となります。
- 手元のChromeから以下URLにアクセスします。(corsの回避のためです。Unahthorizedと出ますが気にしないでください)
https://api.roboticcrowd.com/v1/workflows?page=1&per_page=5 - ↑のURLのタブからChrome DevToolsを起動します。(Ctrl + Shift + Iまたは適当な箇所を右クリック→検証)
- Consoleタブを開きます
- 下記コードを貼り付けます
// ************************** // 以下3行を手動指定************* const accesskey = 'あくせすきー'; const secret = 'しーくれっとあくせすきー'; const sessionQuery = 'query=is:running'; //is:queuedにすると処理待ちを全て消せます // ************************** // ************************** const tokenEndpoint = 'https://api.roboticcrowd.com/v1/token'; const jwtEndpoint = ''; const jwtReqBody = { access_key_id: accesskey, secret_access_key: secret, expires: 3600 }; // セッションキャンセル関数 const canceler = async (jwt, sessionQueueIds) =>{ const reqedIds = ["処理済session_queue_ID"]; for (const sQue of sessionQueueIds) { const delEndpoint = `https://api.roboticcrowd.com/v1/session_queues/${sQue.id}/cancel` const hoge = await fetch(delEndpoint, { method: 'DELETE', mode: 'cors', headers: { 'Authorization': jwt } }) reqedIds.push(sQue.id); } return reqedIds; } //Quota回避のための待機関数 const sleep = function(ms) { //msに指定したミリ秒だけ待つ関数、sleepを定義します return new Promise(resolve => setTimeout(resolve, ms)); }; //ここから本処理開始 //JWT取得 const jwtResponse = await fetch('https://api.roboticcrowd.com/v1/token', { method: 'POST', // mode: 'cors', headers : { 'Content-Type': 'application/json' }, body: JSON.stringify(jwtReqBody) }); const jwtRespText = await jwtResponse.text(); const jwt = 'Bearer ' + jwtRespText; console.log("-----↓JWT↓-----"); console.log(jwt); //セッション取得 const endpoint = 'https://api.roboticcrowd.com/v1/session_queues?page=1&per_page=50&' + sessionQuery; const sessionsResponse = await fetch(endpoint, { method: 'GET', mode: 'cors', headers: { 'Authorization': jwt } }); const sessionsRespJSON = await sessionsResponse.json(); const totalCount = sessionsRespJSON.total_count; const loopCount = Math.ceil(sessionsRespJSON.total_count / 50); console.log("-----↓セッション↓-----"); console.log(sessionsRespJSON); console.log("該当セッション数:" + sessionsRespJSON.total_count); console.log("ループ回数:" + loopCount); //キャンセル開始 console.log(await canceler(jwt, sessionsRespJSON.session_queues)); //初回以降のキャンセル if (totalCount > 50) { let i = 2; while (loopCount+1 > i) { const endpoint = `https://api.roboticcrowd.com/v1/session_queues?page=${i}&per_page=50&${sessionQuery}`; const sessionsResponse = await fetch(endpoint, { method: 'GET', mode: 'cors', headers: { 'Authorization': jwt } }); const sessionsRespJSON = await sessionsResponse.json(); console.log(sessionsRespJSON); const reqedIds = await canceler(jwt, sessionsRespJSON.session_queues); console.log(reqedIds); i++; //Quotaは1分につき60までなのでなので待機 await sleep(60500); } }
- コード上部の「アクセスキー」「シークレットアクセスキー」を自身の環境のものに変更します。
- コード上部の変数「sessionQuery」の値を任意のものに変更します。(デフォルトではis:running)
- Enterやreturnキーを押下して、キャンセルを実行します。