LoginSignup
3
2

More than 1 year has passed since last update.

アレクサから音声でNode-RED経由でUiPathを実行する方法

Last updated at Posted at 2022-04-15

どうも、楽天経済圏で姑息に生きる中村です。

アレクサから音声でAmazonではなく楽天市場で商品を購入する方法を紹介します。
技術者向けの記事となります。

作るものはこちらです。

ラズベリーパイ側の手順

ラズベリーパイのセットアップ

公式よりImagerをダウンロードします。
ImagerはGUIでSDカードにラズベリーパイ用OSをインストールすることが可能です
IPアドレスの固定などしておいたほうがいいかと思います。

Node-REDのインストール

公式を参考にNode-REDをラズパイにインストールします。
Node-REDはPCにインストールすることもできるのですが、常時稼働できるラズパイにインストールするようにします。

Node-REDの拡張機能 node-red-contrib-alexa-remote2-v2のインストール

Node-REDからアレクサに音声出力させるために使用します。
拡張機能は、Node-REDのハンバーガーメニューのパレットの管理から追加でインストールします。

image.png

Node-REDの拡張機能 node-red-contrib-alexa-home-skillのインストール

アレクサからの音声入力をトリガーにフローを実行させることができるようになります。

image.png

アレクサ側の手順

Alexa Home Skill Bridgeのデバイス設定

Alexa Home Skill Bridgeのアカウントを作成

デバイスを追加します。
ラズパイという名前でデバイスを追加します。
%で制御できるようにします。
これは、本来電球の明るさを何%にするかに使用しますが、今回は%を使用してデバイスがアレクサへの命令の数だけ増えることを防止します。

image.png

定形アクションの追加

アレクサに対して、「ラズパイを100%にして」ではなく、「楽天で歯ブラシを購入して」のように依頼したいため、定形アクションを使います。これはAlexaアプリから行います。
音声に対してラズパイを何%にするか設定しておきます。ここでは1%としておきます。

UiPath

今回の記事はNode-REDからUiPathの呼び出しが主のため、説明はざっくりで。
要望あれば、コメントください。追記します。

Studioで処理の作成

今回、UiPathのワークフローに関しては割愛します。
皆さんの呼び出したい処理を作ってみてください。

Orchestratorにパブリッシュ(公開)します。

Orchestratorの設定

パブリッシュしたプロセスをフォルダに登録して実際に呼び出せるようにします。
実行したいPCにURライセンスを付与しておきます。

image.png

API認証情報の確認

Automation Cloudの管理画面のOrchestratorのAPIアクセスより、APIアクセスに必要な情報を取得することができます。

image.png

Node-RED

Node-REDにUiPathの拡張機能はあるのですが、UiPath Orchestratorのモダンフォルダに対応していないっぽいので、汎用的なAPI呼び出しで使用するhttp requestノードを使用します。

全体図はこのようなフローになっています
2022-04-15-110227_1920x1080_scrot.png

Githubに作成したNode-REDのファイルを置いています。

alexa-homeノード

アレクサからの音声入力をトリガーにするノードです

image.png

switchノード

定形アクションで指定した音声入力が何%か定義しておいたと思いますが、ここで分岐させます。
これはデバイスを1つにするための工夫のため、このようにしています。
image.png

functionノード Release Key設定

UiPathの実行する各プロセスにはReleaseKeyというものが割り当てられています。
これはReleaseAPIで取得することができますが、今回は事前に取得しておいたReleaseKeyを設定しています。
image.png

functionノード 認証情報の設定

UiPath Automation Cloudの認証情報を認証APIで使用するBodyに埋め込みます
image.png

認証情報はCloud上から確認可能です。
オンプレのOrchestratorでは、APIなどが少し異なります。

http requestノード 認証

httpリクエストで、http://account.uipath.com/oauth/token に対して先程作成した認証情報を送信します

image.png

jsonノード

jsonノードでAPIの結果を格納します。
常にJavaScriptオブジェクトに変換をしないと、Undefinedとなり結果が取り出せませんでした。。。

image.png

functionノード トークンの保存

Node-REDでは変数は各ノードがスコープとなりますので、flow.setで他のノードが使えるようにします。
アクセストークンは、以降のAPIに付与します。

image.png

functionノード StartJobsのリクエスト情報作成

StartJobで特定のプロセスを実行します。
API仕様に従い、ヘッダー情報とボディー情報を作成します。

image.png

http requestノード StartJobs

APIのエンドポイントは、
https://cloud.uipath.com/YOURSITE/YOURTENANT/orchestrator_/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs

image.png

後続するjsonノードは同一のため、省略

delayノード

ジョブ実行完了待ちのため、3秒待機します。
image.png

functionノード GetJobのリクエスト情報作成

GetJobのリクエスト情報を作成します。

image.png

http requestノード Jobs

実際にAPIを叩いてJobsで実行結果を取得します
image.png

後続するjsonは同一のため、省略

switchノード 実行結果の分岐

Jobsで実行結果を取得して実行中の場合は待機に戻り、成功失敗で分岐します。
実行結果はpayload.value[0].Stateに入っています。

image.png

Alexa Routineノード 成功通知

Deviceには同じAmazonアカウントのデバイスが表示されますので、しゃべらせたいスピーカーを選択します。
成功時は「購入しました」と喋らせます

image.png

Alexa Routineノード 失敗通知

失敗時は「購入できませんでした」と喋らせます

image.png

気づき

UiPathもNode-REDもローコードで処理を作成できますが、アレクサと簡単に連携できるNode-REDをメインにして、そこからRPAのUiPathの処理をOrchestratorのAPI経由で呼び出すようにしてみました。
多くのアプリケーションでは、APIが用意されていなかったり事前設定が大変だったりしますので、そういう場合はRPAで処理を作ったほうが早いなと思います。UiPathであれば、レコーディングなどで簡単に処理を作ることができますし。

Node-RED連携はネタっぽいですが、UR(Unattended Robot)ライセンスの有効活用にも有用だと思います。
UR単体ではスケジュール実行が基本になりますので、各担当者の動かしたいタイミングでロボットを動かしたい場合にはAPIを任意のタイミングでコールする必要があります。(Orchestratorから手動実行してもいいですが、担当者に権限を与えたくなかったりします)
アレクサとNode-REDを連携させることにより、音声入力でURに処理を依頼できるため、ロボットと協働する感じが味わえるのもGoodです。

Alexa Routineのしゃべらせる処理はクッキー情報を使用しているため、ブラウザを閉じるとまだクッキーを再取得する作りに今はなっているため、運用のときにはもう少しどうするか検討が必要かとは思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2