Power Virtual Agents と Power Platform の他のサービスとを簡単に連携する方法 Vol.1

# 祝！Power Virtual Agents が Power Platfrom の第4のサービスとして発表されました
2019年11月4日 - 8日アメリカ オーランドで **Microsoft Ignite** が開催されていました。（以下の **URL** でオンデマンドでセッション動画が見れます）
https://www.microsoft.com/en-us/ignite
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d41a6138-659d-b929-ca54-102f05a80cd3.png)

その基調講演で **Power Platform** に第4のサービスとして **Power Virutal Agents** が発表されました。**no code** でボットが作れるサービスです。もちろん **Power Platform** の他のサービスとガッツリ連携することが可能です。

ちなみに **Microsoft Flow** も **Power Automate** と名前が変わり、**UI Flow** という **RPA** の機能が追加されています。
そして、**Power Apps** も実は名前が変わってます。これまで **PowerApps** とつなげて表記されていたのですが、半角スペースが入り **Power Apps** と書くようになりました。
これですべて Power という名前で揃いました。
さらに **Power Platform** もちょっと変更され、**Microsoft** という冠が付きました。**Micorosoft Power Platform** ですね。

- [Power Apps](https://make.powerapps.com)
- [Power Automate](https://www.powerautomate.com)
- [Power BI](https://app.powerbi.com)
- [Power Virtual Agents](https://powerva.microsoft.com)

ということで、今回はとりあえず **Power Virtual Agents** を **Power Platform** の他のすべてのサービスと連携してみます。
ご紹介する方法以外にも連携方法はありますが、手っ取り早く連携したい場合には推奨します。もちろん完全に **no code** ですので、どなたでもできます。

# まずは完成イメージから
こちらは **Power Virtual Agents** で作成したボットを Power BI Dashboard に埋め込んだところ。見てわかる通り、簡単なジャンケンができるボットですが、ジャンケンをすると、ちゃんと **Power BI** のタイルが更新されるのがわかると思います。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Power Virtual Agents in Power BI Dashboard<br>「普通のじゃんけん」もできるようにしたよ！<br><br>ついでに Power BI Dashboard に埋め込んでみましたー<br><br>じゃんけんボットの URL はこちらー<br>勝敗データを CDS に取ってるので、いっぱい遊んでね！<a href="https://t.co/bwmWNwAu4x">https://t.co/bwmWNwAu4x</a><a href="https://twitter.com/hashtag/PowerVirtualAgents?src=hash&amp;ref_src=twsrc%5Etfw">#PowerVirtualAgents</a> <a href="https://twitter.com/hashtag/JPVAUG?src=hash&amp;ref_src=twsrc%5Etfw">#JPVAUG</a> <a href="https://t.co/Jv0YNMCwd5">pic.twitter.com/Jv0YNMCwd5</a></p>&mdash; Yugo Shimizu | Power BI MVP (@yugoes1021) <a href="https://twitter.com/yugoes1021/status/1192010249856638977?ref_src=twsrc%5Etfw">November 6, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

次にさらにそれを Power Apps に埋め込んだところ。こちらでも同様にデータが更新されますね。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Power Virtual Agents のボットを Power Apps に入れたい?<br><br>はい、これ。開発不要です。PCF? 不要です。<br>だってノーコードのサービスだもん<br><br>Power BI Service ダッシュボードにボットを埋める<br>Power Apps の Power BI Tile で選んであげる<br><br>簡単、簡単😁<a href="https://twitter.com/hashtag/PowerBI?src=hash&amp;ref_src=twsrc%5Etfw">#PowerBI</a> <a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://twitter.com/hashtag/PowerVirtualAgents?src=hash&amp;ref_src=twsrc%5Etfw">#PowerVirtualAgents</a> <a href="https://t.co/I9eLl9dOLf">pic.twitter.com/I9eLl9dOLf</a></p>&mdash; Yugo Shimizu | Power BI MVP (@yugoes1021) <a href="https://twitter.com/yugoes1021/status/1194570178987606016?ref_src=twsrc%5Etfw">November 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こんなことがしたい方は以降を読み進めてください！
それでは行ってみましょう！

# さて最初は Power Virtual Agents を使えるようにするところから
はい、これについては既に [りなたむさん](@rnakamuramartiny) @rnakamuramartiny が記事を書いてくれているので、以下を見てください！

PowerPlatform の新しいお仲間 Power Virtual Agents を触ってみた
https://qiita.com/rnakamuramartiny/items/d1999bda574eb9e78bdf

ノーコードでBotが作れる Power Virtual Agents の Action が最強すぎて、素敵すぎたので、使い方をまとめました
https://qiita.com/rnakamuramartiny/items/16ce58a7af19f1e60693

なお、その他の Power BI, Power Automate, Power Apps などはすべて使えるという前提で進めます。

# 手順は以下の通り

1. **Power BI Service** でストリーミングデータセットを作る
1. **Power Automation** でソリューションの中に **Flow** を作り、その中でストリーミングデータセットにデータを追加するようにしておく
1. **Power Virtual Agents** でボットを作る
1. ボットの処理で **Action** からフローを指定する
1. ボットの作成が終わったら、カスタムとしてデプロイする（発行）
1. **html** をコピーしておく
1. **Power BI Service** でダッシュボードを作成し、**Web** コンテンツに **html** を貼り付ける
1. **Power Apps** に埋め込む

## 1. Power BI Service でストリーミングデータセットを作る
これは2年前に私が書いた記事が参考になります。（2年前の記事でも役に立つんだなぁ...アウトプットは大事ですね）
https://qiita.com/yugoes1021/items/1b87a7205e6c659a9604#power-bi-%E3%81%AE%E8%A8%AD%E5%AE%9A

[Power BI Service (https://app.powerbi.com)](https://app.powerbi.com) を開いてください

### 1-1. Power BI Service を開いて [+作成] - [ストリーミングデータセット]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/cb93537a-53f2-d33e-30e1-0dbe67940de8.png)
上記の通り、**[作成]** - **[ストリーミングデータセット]** をクリックする

### 1-2. [API] を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c5e4ffc9-d643-4aad-f240-f8435b8f9da3.png)

### 1-3. データセットの列定義をする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/eaddad19-5914-ddf6-6f12-4801b00e413f.png)
ここでデータセット（DBでいうテーブルのようなもの）を定義します。
上記のように、**データセット名**、**ストリームからの値**を決めてください。**ストリームからの値**はいわゆる**列定義**になります。**名称**と**型（日時、テキスト、数値）**が選択できます。
今回は画面の通りにします。プレイヤーが出すじゃんけんの値を日時とともに記録します。

| 列名 | 型 |
|:-----------|:------------|
|DateTime|日時|
|PlayerJanken|テキスト|

また **[履歴データの解析]** は **ON** にしておいてください。こうすることで、このデータセットから **Report** を作成することができます。

### 1-4. 完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/93265f46-a790-ce88-baec-54c33035660d.png)

**ストリーミングデータセット**の作成はこれでお終いです。次はボットから呼び出す **Flow** を作成します。

## 2. Power Automation でソリューションの中に Flow を作り、その中でストリーミングデータセットにデータを追加するようにしておく
これも [りなたむさん (@rnakamuramartiny)](https://qiita.com/rnakamuramartiny/items/16ce58a7af19f1e60693#flow%E3%81%AF%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%86%85%E3%81%A7%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8) と私の記事が参考になります。

公式の docs はこちらです
**Add actions to your bot using Power Automate**
https://docs.microsoft.com/ja-jp/power-virtual-agents/how-to-flow


[Microsoft Flow (https://flow.microsoft.com/)](https://flow.microsoft.com/) を開きます

### 2-1. [ソリューション] を開き [Common Data Services Solution] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/cdf3d527-0314-6e13-007c-e7b7b343917e.png)

### 2-2. [+新規] - [フロー] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0f7472a4-ab79-c861-a63d-13dc5e509e44.png)

### 2-3. フローの作成
全体像はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d1022c6b-9afb-4eda-bf81-18e63e099acf.png)
まずは前半部分の全体像（以下でひとつずつ解説します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f1708f77-52b3-bc73-7469-35083badd64a.png)

**トリガー**に **[HTTP要求の受信時]** を選択するために、「要求」というキーワードで検索する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d83c3955-893c-0f0f-8fde-38de4c88f6af.png)
**[要求]** をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/5ed213c4-1678-f5a8-b726-72f9e27f9655.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/6b7f993a-a491-0c46-effd-c65f0b47a4e1.png)

```json:JSON_Shema.json
{
    "type": "object",
    "properties": {
        "janken": {
            "type": "string"
        }
    }
}
```

JSON スキーマに上記を入力する

デバッグ用に通知を入れておきます。"notification" で検索をして [Notifications] のどちらかを選択してください。
**Power Automate** のモバイルアプリをスマホにインストールしてあって、スマホに通知が欲しい人は **[Send me a mobile notification]**
**Power Automate** のモバイルアプリをスマホにインストールしてない、またはスマホに通知が欲しくない人は **[Send me an email notification]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/2e5d06ff-adba-c5a1-51e1-1f68452ec9e3.png)
私はモバイルを選択してます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9ca9e9fc-ff39-5442-a9c9-b80ceab91cf4.png)

```ユーザーは [janken] を出して負けました```
[janken] の部分は HTTP トリガー（HTTP要求の受信時）で受け取ったパラメータになります。

HTTP 要求に対する Reponse (応答) を返すので、「要求」で検索してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ced82529-ba57-4ba6-1aca-eef262a51cee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/d4a50478-4c08-378d-6bde-98e747725897.png)


**[ヘッダー]**、**[本文]**、**[応答本文のJSONスキーマ]** にそれぞれ以下を入力する

| Key | Value |
|:-----------|:------------|
|Content-Type|application/json|

```json:本文
{
  "message": "ご主人様に勝敗結果を送りました！"
}
```

```json:応答本文のJSONスキーマ
{
    "type": "object",
    "properties": {
        "message": {
            "type": "string"
        }
    }
}
```
これで呼出元に message を返すことができます。
次は左記に作っておいた **Power BI のストリーミングデータセット** にデータを入れるようにします。

現在時刻を取得します。[現在の時刻] は何も指定するものがないのでこのままで大丈夫ですが、取れる時刻が UTC なので、これを JST に変換します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/3fdcaf03-3a1b-89bb-a4de-23f5dc2c47e9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/57e52611-ad36-b690-e980-a5fcdefc8b06.png)
もう一度 時刻 で検索して、[タイムゾーンの変換] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ead60ed8-82b9-b1cd-54f4-b06403261f79.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f572f2d7-a553-3707-7f1a-d5e03f4089a7.png)

| 名称 | 値 |
|:-----------|:------------|
|基準時間|現在の時刻|
|変換元のタイムゾーン|(UTC) 協定世界時|
|変換先のタイムゾーン|(UTC+09:00) 大阪、札幌、東京|
|書式設定文字列|`yyyy-MM-dd HH:mm:ss`|

そして Power BI コネクタを使います。
Power BI と検索して [データセットに行を追加します(プレビュー)] を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ffef25cc-ba34-df52-71e0-3602ca20b903.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c9a25e5d-73b4-5c87-b2e7-f497c9d6ab44.png)

| 名称 | 値 | 備考 |
|:-----------|:------------|:------------|
|ワークスペース|(ご自身のワークスペース)|ストリーミングデータセットを作成したワークスペース名|
|データセット|(ご自身のデータセット名)|作成したストリーミングデータセット名|
|テーブル|RealTimeData|"RealTimeData" で固定|
|DateTime|[変換後の時間]||
|PlayerJanken|[janken]||

最後に左上で名前を付けて [保存] をしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/474aa02c-fde3-b43b-b8ae-73dbf7902d1f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9bcd9f79-ea34-fc5c-e0a3-b63484dc3892.png)

ソリューションの一覧に戻ると、作成したフロー名が表示されているはずです。
これで **Power Virtual Agents** の **Bot** から呼び出すフローができあがりました！

# 今回はここまで
長くなってきたので、今回はここまでとします。
Vol.2 は **[Power Virtual Agents でボットを作る](https://qiita.com/yugoes1021/items/10720538a67d245df0b0)** からです。