Star Wars 検索チャットボットを作る


はじめに

Power Automate に Star Wars コネクタ が追加されたので、Power Virtual Agetns と Power Automate で、検索チャットボットを実装しました。

注意

今回利用する、Star Wars コネクタはプレミアムコネクタです。
有償プランもしくは、開発者向けプランををご利用ください。

Star Wars コネクタについて

このコネクタが利用するAPIは、「SWAPI-The Star Wars API」にて公開されています

検索可能なリソースは以下です。

  • People
  • Films
  • Starships
  • Vehicles
  • Species
  • Planets

これらについて、ID検索または、キーワード検索が可能となっています。

お遊び機能として、レスポンスがウーキー語(Wookiee:劇中に登場するチューバッカの種族の言語)になるパラメータがあり、作者様のスターウォーズに対する愛を感じます。
下記は、オリジナル・トリロジーの主役「ルーク・スカイウォーカー」のウーキー語による検索結果。
URLまで変換されていて面白いですね!

{
	"whrascwo": "Lhuorwo Sorroohraanorworc",
	"acwoahrracao": "172",
	"scracc": "77",
	"acraahrc_oaooanoorc": "rhanoowhwa",
	"corahwh_oaooanoorc": "wwraahrc",
	"worowo_oaooanoorc": "rhanhuwo",
	"rhahrcaoac_roworarc": "19BBY",
	"rrwowhwaworc": "scraanwo",
	"acooscwoohoorcanwa": "acaoaoakc://cohraakah.wawoho/raakah/akanrawhwoaoc/1/",
	"wwahanscc": [
		"acaoaoakc://cohraakah.wawoho/raakah/wwahanscc/1/",
		"acaoaoakc://cohraakah.wawoho/raakah/wwahanscc/2/",
		"acaoaoakc://cohraakah.wawoho/raakah/wwahanscc/3/",
		"acaoaoakc://cohraakah.wawoho/raakah/wwahanscc/6/"
	],
	"cakwooaahwoc": [],
	"howoacahoaanwoc": [
		"acaoaoakc://cohraakah.wawoho/raakah/howoacahoaanwoc/14/",
		"acaoaoakc://cohraakah.wawoho/raakah/howoacahoaanwoc/30/"
	],
	"caorarccacahakc": [
		"acaoaoakc://cohraakah.wawoho/raakah/caorarccacahakc/12/",
		"acaoaoakc://cohraakah.wawoho/raakah/caorarccacahakc/22/"
	],
	"oarcworaaowowa": "2014-12-09T13:50:51.644000Z",
	"wowaahaowowa": "2014-12-20T21:17:56.891000Z",
	"hurcan": "acaoaoakc://cohraakah.wawoho/raakah/akwoooakanwo/1/"
}

Power Automate におけるコネクタでは、以下のアクションが用意されています。


各リソースについて、キーワード検索、および内部IDによる検索が可能となっています。
APIには存在するVehicles(車両)が、コネクタには用意されていないのが残念です。

[Get all Films]など、あたかも全情報を返しそうなアクション名となっていますが、キーワードによる検索も可能です。
検索ワードをブランクにすることで、全情報の取得が可能です。
また検索結果は10件ごとのページによるレスポンスとなります。ページ番号が指定可能です。

「Star Wars 情報検索チャットボット」 作成

このコネクタを利用した、スターウォーズ用語検索チャットボットを 「さくっと」 作成します。

トピックの構成

上記のリソース毎にトピックを作成していきます。
一つのトピック作成し、完成後に複製していくと作業が楽です。

トピックの作成

Peopleリソース検索用のトピックの作成例になります。

  1. 検索するキーワードを質問します
  2. Power Automate を呼び出し、Star Wars コネクタ によるキーワード検索を行います
  3. 結果(最大10件)をメッセージで出力します

キーワード検索フローの作成

検索されるリソースにより呼び出し元のトピックは複数存在しますが、各トピックから呼び出すフローは1本でまとめています。

チャットボットの応答のため、レスポンスを重視し、Applay to eachによるループ処理を排除したフローとなっています。
変数を10個用意し、検索結果に10ずつ入力しています。

トリガーのパラメータには、リソース名と検索ワードを設定します。
リソース名は、"People"、"Films"、"Starships"・・・ などになります。

return用の変数を初期化します。
アクションのコピーを利用すると作業が楽です。

トリガーパラメータのリソースにより、StarWarsコネクタで呼び出すアクションが異なる為、条件分岐させます。

リソースに対応するアクションを呼び出します。Serch Stringにトリガーパラメータの検索ワードを設定します。

上記で初期化した10の変数には、以下の関数をセットします。

replace(replace(replace(string(outputs('Get_People')?['body/results']?[0]),',',decodeUriComponent('%0A%0A')),'{',''),'}','')

作業簡略化のために、APIからのレスポンスであるJSONをそのまま改行させて表示させています。
これでも、わりと見やすいと思います。

outputs('Get_People')?['body/results']?[0]
の末尾の添え字部分は、それぞれセットする変数ごとにカウントアップしてください。

他のリソースも、アクションのコピーを活用しながら複製していきます。

トピックへのReturnには、10の変数をそれぞれ設定します。

トピックに戻り、作成したフローを呼び出します。
一つ目のパラメータには、リソース名("People"、"Films"、"Starships"・・・ など)を入力してください。

動作

Peopleを"-"で検索すると、C-3POやR2-D2など、劇中に登場するドロイド達やオビワンなどが検索されました。

まとめ

Power Automate に追加されたStarWarsコネクタ、ファンにはたまらないサプライズですね!