どうも、楽天経済圏で姑息に生きる中村です。
アレクサから音声で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のハンバーガーメニューのパレットの管理から追加でインストールします。
Node-REDの拡張機能 node-red-contrib-alexa-home-skillのインストール
アレクサからの音声入力をトリガーにフローを実行させることができるようになります。
アレクサ側の手順
Alexa Home Skill Bridgeのデバイス設定
Alexa Home Skill Bridgeのアカウントを作成
デバイスを追加します。
ラズパイという名前でデバイスを追加します。
%で制御できるようにします。
これは、本来電球の明るさを何%にするかに使用しますが、今回は%を使用してデバイスがアレクサへの命令の数だけ増えることを防止します。
定形アクションの追加
アレクサに対して、「ラズパイを100%にして」ではなく、「楽天で歯ブラシを購入して」のように依頼したいため、定形アクションを使います。これはAlexaアプリから行います。
音声に対してラズパイを何%にするか設定しておきます。ここでは1%としておきます。
UiPath
今回の記事はNode-REDからUiPathの呼び出しが主のため、説明はざっくりで。
要望あれば、コメントください。追記します。
Studioで処理の作成
今回、UiPathのワークフローに関しては割愛します。
皆さんの呼び出したい処理を作ってみてください。
Orchestratorにパブリッシュ(公開)します。
Orchestratorの設定
パブリッシュしたプロセスをフォルダに登録して実際に呼び出せるようにします。
実行したいPCにURライセンスを付与しておきます。
API認証情報の確認
Automation Cloudの管理画面のOrchestratorのAPIアクセスより、APIアクセスに必要な情報を取得することができます。
Node-RED
Node-REDにUiPathの拡張機能はあるのですが、UiPath Orchestratorのモダンフォルダに対応していないっぽいので、汎用的なAPI呼び出しで使用するhttp requestノードを使用します。
Githubに作成したNode-REDのファイルを置いています。
alexa-homeノード
アレクサからの音声入力をトリガーにするノードです
switchノード
定形アクションで指定した音声入力が何%か定義しておいたと思いますが、ここで分岐させます。
これはデバイスを1つにするための工夫のため、このようにしています。
functionノード Release Key設定
UiPathの実行する各プロセスにはReleaseKeyというものが割り当てられています。
これはReleaseAPIで取得することができますが、今回は事前に取得しておいたReleaseKeyを設定しています。
functionノード 認証情報の設定
UiPath Automation Cloudの認証情報を認証APIで使用するBodyに埋め込みます
認証情報はCloud上から確認可能です。
オンプレのOrchestratorでは、APIなどが少し異なります。
http requestノード 認証
httpリクエストで、http://account.uipath.com/oauth/token に対して先程作成した認証情報を送信します
jsonノード
jsonノードでAPIの結果を格納します。
常にJavaScriptオブジェクトに変換をしないと、Undefinedとなり結果が取り出せませんでした。。。
functionノード トークンの保存
Node-REDでは変数は各ノードがスコープとなりますので、flow.setで他のノードが使えるようにします。
アクセストークンは、以降のAPIに付与します。
functionノード StartJobsのリクエスト情報作成
StartJobで特定のプロセスを実行します。
API仕様に従い、ヘッダー情報とボディー情報を作成します。
http requestノード StartJobs
APIのエンドポイントは、
https://cloud.uipath.com/YOURSITE/YOURTENANT/orchestrator_/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs
後続するjsonノードは同一のため、省略
delayノード
functionノード GetJobのリクエスト情報作成
GetJobのリクエスト情報を作成します。
http requestノード Jobs
後続するjsonは同一のため、省略
switchノード 実行結果の分岐
Jobsで実行結果を取得して実行中の場合は待機に戻り、成功失敗で分岐します。
実行結果はpayload.value[0].Stateに入っています。
Alexa Routineノード 成功通知
Deviceには同じAmazonアカウントのデバイスが表示されますので、しゃべらせたいスピーカーを選択します。
成功時は「購入しました」と喋らせます
Alexa Routineノード 失敗通知
失敗時は「購入できませんでした」と喋らせます
気づき
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のしゃべらせる処理はクッキー情報を使用しているため、ブラウザを閉じるとまだクッキーを再取得する作りに今はなっているため、運用のときにはもう少しどうするか検討が必要かとは思います。