Google Apps ScriptからRobotic Crowd APIを叩く

先日Robotic Crowd APIが公開され、社内にいる自分が使い方わからないの嫌だなと思って早速実際に組み込んでみました。

「スプレッドシートをトリガーにしてRPAを起動したい」という要望は以前から多くいただいていたので今回はGoogle Apps Script(GAS)からAPIを実行してみようと思います。「GAS」を初めて聞く人がほとんどでしょう。GASを使うとスプレッドシートやGoogleカレンダー、GmailなどのGoogleが提供するサービスをお互いに連携したり、作業を自動化することができます。

GASの初歩的な使い方については下記のサイトなどを参考にすると良いでしょう。各アプリケーション内の「スクリプトエディタ」という項目をクリックすると開くことができます。

今回の手順は下記、見出しの通りです。

1. Robotic Crowdの設定

APIの実行にはアクセスキーシークレットキーの2つが必要です。
これらはRobotic Crowd側の設定で発行することができますが、このAPI設定は各プロジェクトごとに必要になります。

まずは、APIを実行したいプロジェクトの「設定」ページを開きます。

画像1

API設定項目があるので右上「作成する」のボタンを押すとAPIを新規設定することができます。テーブルには作成済みAPIが表示されています。

画像2

実際に作成ボタンを押して必要事項を入力すると、こちらの画面が表示されます。注意事項としてはシークレットキーはこの画面にしか表示されません。コピーせずにポップアップを消してしまうと2度とシークレットキーを確認することができないので必ずメモしましょう。

2.Tokenの取得

Robotic Crowdの設定が済んだら、早速Google Apps Scriptを作成していきます。GASの中でまず行うのはTokenの取得(または作成)です。先ほど取得したアクセスキーとシークレットキーを使ってToken情報をリクエスト(または自作)します。

GASでのTokenリクエストには「UrlFecthApp」を利用します。詳しくは下記ページを参考にしてください。API実行や外部連携する際には大体これを使っています。

function getToken(access_key_id,secret_access_key) {
 var data = {
     access_key_id: access_key_id,
     secret_access_key: secret_access_key,
     expires: 100000 //tokenの有効期限(ミリ秒)
   };
 var option = {
   method : "post", //メソッドの指定
   payload: JSON.stringify(data), //body情報
   contentType: "application/json",
   muteHttpExceptions: true
 };
 
 var req = UrlFetchApp.fetch("https://api.roboticcrowd.com/v1/token", option);
 var token = req.getContentText(); //.getContentTextでレスポンステキストを取得
 return token;
}

https://api.roboticcrowd.com/v1/token」にアクセスキーとシークレットキーの情報をリクエストすることでTokenが取得できます。fetchメソッドではリクエストURLの他にoptionに設定するmethod/payload/contentTypeの3つの情報がマストです。

・method = POST
・payload = Request bodyの情報をString型
 ・body => access_key_id/secret_access_key/expires
・contentType = application/json

今回は利便性を考えてToken取得のみの関数にしています。
getToken("アクセスキー","シークレットキー")の形で他の関数から呼び出して使うことができるようになっています。

3.RPAを実行する

次に取得したTokenを使ってRPAの実行をリクエストします。
RPA実行のリクエストにもUrlFetchAppを利用します。

function roboticCrowdMain(){
  var key = "アクセスキー",secret="シークレットキー";
  var token = getToken(key,secret); //tokenの取得

  var header = {
    Authorization: "Bearer "+ token //tokenをヘッダーにする
  };
  var body = {
   workflow_id: "9700" //ボディーに起動するワークフローID
  };
  var option = {
    method: "POST",
    headers: header,
    payload: JSON.stringify(body),
    contentType: "application/json",
    muteHttpExceptions: true
  };
  var queue = UrlFetchApp.fetch("https://api.roboticcrowd.com/v1/session_queues", option);
  Logger.log(queue.getContentText()); //実行結果
}

①headerには先ほど用意したToken情報をセット

var header = {
    Authorization: "Bearer "+ token //getToken(key,secret)の結果
};

②bodyには実行をリクエストするワークフローIDをセット
※ワークフローIDは各ワークフロー「設定」画面のURLから取得できる
console.roboticcrowd.com/projects/132/workflows/9700
であれば「9700」がワークフローID。

var body = {
    workflow_id: "9700"
};

③「https://api.roboticcrowd.com/v1/session_queues」へPOSTリクエストを実行する

4.まとめ

最初、contentTypeを設定せずにあれこれ試行錯誤をしていたのだけど全くうまくいかず・・・なんでかな?と悩み悩んでいたらUrlFetchAppにcontentTypeの設定ができることを知り・・・やってみたら上手くいったという感じでした。

payloadも試行錯誤の中で念の為JSON.stringify()したけど、もしかしたら不要かもしれません・・・

手順をまとめると

①アクセスキー、シークレットキーの取得
②Tokenの取得
③実行キューを作成するAPIを叩く

便利なのでぜひ使ってみてください。
たぶんコピペで使えます。実行関数は「roboticCrowdMain」になります

以上、質問あればTwitterにメッセください。

この記事が気に入ったらサポートをしてみませんか?