Docly Child

AUTORO REST APIを使用する

201 views

この記事では、AUTORO REST APIの使用方法を紹介します。

 

AUTORO REST APIで可能な操作

以下操作が可能です。
・認証トークンを生成する
・実行キューを作成する
・実行キューの一覧を取得する
・実況キューをキャンセルする
・ワークフロー一覧を取得する

 AUTORO REST API

AUTOROではREST APIを準備しています。

https://developer.autoro.io/

この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

先ほど作成したJWTをリクエストヘッダの形に加工し、リクエストを送信しています。
# 変数に保存_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内部に日本語が含まれていなければ、以下でワークフローに変数を渡して実行できます。
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

 セッションキューを取得する

ここでは「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キーを押下して、キャンセルを実行します。
<API>AUTORO REST API

このページは役に立ちましたか?