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

# はじめに

Power Automate に [Star Wars コネクタ](https://docs.microsoft.com/ja-jp/connectors/starwarsip/) が追加されたので、Power Virtual Agetns と Power Automate で、検索チャットボットを実装しました。

# 注意

今回利用する、[Star Wars コネクタ](https://docs.microsoft.com/ja-jp/connectors/starwarsip/)はプレミアムコネクタです。
有償プランもしくは、[開発者向けプランを](https://powerapps.microsoft.com/ja-jp/developerplan/?msclkid=14848bb0b02c11ec90c214e204fe7006)をご利用ください。



# Star Wars コネクタについて

このコネクタが利用するAPIは、[「SWAPI-The Star Wars API」](https://swapi.dev/)にて公開されています

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

* 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 におけるコネクタでは、以下のアクションが用意されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0cb10902-8b06-6789-58fc-a72c60b46bac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/8c617a29-2877-25e1-2fe7-d876e5658e31.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/513c422b-494f-561c-213f-90886a617c92.png)

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

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

## トピックの構成

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/9a25554b-ee92-c8a9-9590-7ec5d615d1ec.png)

## トピックの作成

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


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/68d1cc16-ffdb-ff0d-de73-fdb58dd39cf7.png)

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/d7b2a424-a072-a318-4f68-e9f21dec4ca6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/30dab4bb-884b-de2c-d55d-5a9d7a50e12f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a1981084-dbff-70f9-75f7-71d3bb8b90bf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a8d22b54-d27d-7006-73f1-1bce0b553e25.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/9eb7f17e-b7fd-9698-6a35-893b0893a45d.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/8994fa65-e495-2f56-94c3-2e65b95c86df.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/57a0d8f8-da8c-d4c5-0883-9d6ae1dccb60.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/abe365a8-02f8-ef41-6f12-483191db46a0.png)

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

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

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b9425577-4bc4-0510-5050-6a6b72bed50f.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a79077c5-1268-dce2-f234-f04f7922e967.png)



# 動作

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a92abf0b-36e7-08b4-869c-1382cbe9a20d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/07b7ba15-eaed-8ff5-7fac-0e9aa86d0e65.png)


# まとめ

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