Skip to content

【UiPath】OrchestratorのAPI経由で
ロボットを実行してみる

Posted in ノート

Last updated on 2022年8月11日

UiPath Orchestrator には API が用意されており、API からロボットを実行することができます。

今回はこのOrchestrator の API をPythonを利用し叩いてみたので共有したいと思います。


Orchestrator は難しいですね。


Orchestratorからロボットを実行する手順

APIからロボットを実行する手順ですがいくつかのAPIを順に叩いていく必要があります。

手順はざっと次のとおりです。

  1. 事前準備
  2. 認証APIを叩く
  3. 実行するプロセスを取得するAPIを叩く
  4. ジョブ実行のAPIを叩く

この記事では新しく追加された Automation Cloud の Orchestrator を利用しそれぞれ順番に見ていきます。


事前準備

APIを利用するにあたりあらかじめ Automation Cloud のポータルより次のキーを取得しておきます。

  • ユーザーキー
  • アカウント論理名
  • テナント名
  • クライアントID

取得する方法ですが、トップページの [管理] ⇛ [テナント] ⇛ [雲のマーク] をクリックすることで確認することができます。

クリックすると次のようなポップアップが開き適宜コピーすることができます。

これらは漏洩しないようにローカルにコピーしておいて下さい。

APIを叩く際に利用します。

Python のコードでは、これらは次の変数名で利用するので適宜読み替えてください。

プロセス名はジョブとして実行したいプロセスについている名前、フォルダ名はそのプロセスが所属しているフォルダの名称となります

これらも事前に把握しておいてください。


認証APIを叩く

ではさっそくAPIを叩いていきたいと思います。

まずは認証を取得するAPIです。

公式ドキュメントは次のリンク先にあります。参考に。

公式の内容を抜粋したものを次にまとめています。

これらの指定通りにPOSTメソッドを呼び出すコードを書いてあげればいいです。

コードは次のようになります。

import json
import requests

def auth():
    url = 'https://account.uipath.com/oauth/token'
    headers = {
       "Content-Type": "application/json",
       "X-UIPATH-TenantName": TENANT_NAME
    }
    data = {
        "grant_type": "refresh_token",
        "client_id": CLIENT_ID,
        "refresh_token": USER_KEY
    }
    result = requests.post(url,
                           headers=headers,
                           data=json.dumps(data))
    return result.json()['access_token']

リターンで後続のAPIを叩く際に必要となるアクセストークンを返してあげましょう。


実行するプロセスを取得するAPIを叩く

アクセストークンが取得できたのでOrchestratorの各情報にアクセスできるようになりました。

続いてこのアクセストークンを利用し実行するつもりのプロセスの情報を取得します。

公式ドキュメントは次のリンク先にあります。

まとめた表を次に記載します。

このAPIでは実行するプロセスのキーを取得したいので、プロセスの名前でフィルターをかけ取得する方法をとっています。

ヘッダーの “Authorization” の要素では、”Bearer” というワードのあとに半角スペースをおいて取得済みのアクセストークンを入れてあげます。

Pythonコードで書くと次のようになります。

import json
import requests

def get_process(access_token):
    ACCESS_TOKEN = access_token
    
    url = "https://cloud.uipath.com/{0}/{1}/odata/Releases?$filter=%20Name%20eq%20'{2}'".format(LOGICAL_NAME,TENANT_NAME,PROCESS_NAME)
    headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer {}'.format(ACCESS_TOKEN),
        'X-UIPATH-TenantName': TENANT_NAME
    }
    result = requests.get(url,headers=headers)

    return result.json()['value'][0]["Key"]

今回はGETなのでシンプルにURLに指定しています。

リターンではプロセスキーを取得するようにします。


ジョブ実行のAPIを叩く

いよいよ最後のAPIジョブの実行です。

これを叩くことでロボットを自動で実行させることができます。

公式ドキュメントは次を参考にしてください。

表にまとめると次のようになります。

引数を利用して、ロボットへわたした上で実行をすることもできますが今回は利用せずシンプルに実行してみたいと思います。

では、Pythonのコードです。

import json
import requests

def do_job(access_token,process_key):
    ACCESS_TOKEN = access_token
    PROCESS_KEY = process_key
    
    url = "https://cloud.uipath.com/{0}/{1}/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs".format(LOGICAL_NAME,TENANT_NAME)
    headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer {}'.format(ACCESS_TOKEN),
        'X-UIPATH-TenantName': TENANT_NAME,
        'X-UIPATH-FolderPath': FOLDER_NAME
    }
    data = {
        "startInfo": {
            "ReleaseKey": PROCESS_KEY,
            "RobotIds": [],
            "JobsCount": 1,
            "JobPriority": "Normal",
            "Strategy": "ModernJobsCount",
            "RuntimeType": "Unattended",
            "InputArguments": "{}"
        }
    }
    result = requests.post(url,
                           headers=headers,
                           data=json.dumps(data))

最後に


いかがだったでしょうか。
今回はシンプルにOrhchestratorにロボット実行について記事にしてみました。Orchestratorを活用し一歩先の自動化にチャレンジしてみて下さい。

今回も最後までお読みいただきありがとうございました。

では。