Power Platform と COTOHA API でツイート履歴から年齢や、属性を推理するBotを作る（Power Virtual Agents編

COTOHA API は NTTコミュニケーションズ様が提供されているサービスで、様々なテキスト、音声分析機能があり、なんと開発者向けライセンスは無償で利用できる嬉しいサービスです。
今回はこれのbeta版の機能である、ユーザ属性推定を使って、自身のツイート履歴から、年齢や属性を推理させるBotを作ってみたいと思います。

# 出来上がりイメージ
![qiita20210228.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/9ce0dac7-79c8-d59c-b5ec-31908d9aa4d4.gif)

仕組みとしては、
- Power Virtual Agents で、チャット形式でアカウント名の入力を依頼
- 入力されたアカウント名を Power Automate に渡し ツイート履歴の収集と COTOHA API の実行
- 取得できた結果を Power Virtual Agents で表示
としています。

今回は、以下の前回作成した Power Automate を呼び出す Power Virtual Agents の作成手順をまとめます。

# 前回の記事

https://qiita.com/nanoka/items/a96b09507df8206c80b0

# 手順

1. Power Virtual Agents の Bot の作成
2. トピックの作成
3. キャンバスの作成
4. その他の設定

# 1. Power Virtual Agents の Bot の作成

- 以下の画面より、"新しいチャットボット"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/7343c22c-1ab6-08e8-b81b-d89303f14615.png)

- 作成する Bot の名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/32ffe433-4694-79fb-75c6-02e3eb834b42.png)

これで器となる Bot そのものが作成できました。

# 2. トピックの作成

次にトピックを作成します。
トピックは、Bot とのやり取りを、テーマごとにひとかたまりにしたようなもので、そのやり取りを呼び出すテキスト(トリガーフレーズ)と、呼び出された後のやり取りのフロー(キャンバス)で構成されています。

- メニューから"トピック"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/afc79464-b9ca-2690-cc1a-88722481a473.png)

- "新しいトピック"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/7b91fa5a-6188-0b06-6f33-902681d9dbce.png)

- トピックの名前とトリガーフレーズを入力して、"キャンバスの作成に移動"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/915fb36a-62d9-0a75-35e2-afa8f39c4422.png)


# 3. キャンバスの作成

次にキャンバスを作成します。
今回作成するキャンバスの全体像は以下の通りです。今回は1つのトピックにまとめましたが、トピックを分割すると管理・変更しやすいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/94eaedf0-d146-de1b-4b4b-cc977c034681.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/74a0952b-99c5-df77-0e8b-cdaf3e7b6f1a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/dbcd96d6-342f-0ccb-5c8d-875f53687b53.png)

見た感じのまんま、箱が線でつながっていて、順番に下にたどっていく感じで実行されていきます。
線にポインタを乗せると、以下のような選択肢が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/8aeb99f1-ae9f-2749-f3ae-e3e7ff715852.png)
これを選ぶことで、後から出てくる質問、メッセージ、条件や、Power Automate の実行(アクション)を設置することができます。

上から順に説明していきます。

- トリガーフレーズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/ac1b137a-f81f-aa85-2364-d1c0c761cbcb.png)
トピック作成時に設定する、このキャンバスで作った処理を呼び出すテキストです。
また、トリガーフレーズをなしで作成することで、他のトピックから呼び出されることでしか動作しない処理を作成することができます。

- メッセージ(説明)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/c68bbb6d-9f29-2706-673e-1776730b7a55.png)
Bot にしゃべらせたいテキストを設定できます。
ここでは、これから実行することを説明します。

- 質問(アカウント名の収集)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/3a2b633f-47e6-58fa-ec74-017b35a74ee2.png)
Bot にしゃべらせたいテキストと、それ対する回答の仕方、回答の内容の格納する変数を設定します。
今回は、アカウント名の入力を促すテキストを表示し、それに対してテキストで入力させ、アカウント名という変数に値を格納することにします。
念のため Teams から動作させると考えたときに @ がよからぬ動作をしないようカタカナにしたり、入力させないようにしています。
※トピックを分けた場合、そのままでは変数を引き継いで使用するこができません。その場合、プロパティの"使用状況"を"ボット"にすることで、他トピックでも利用できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/54cba281-ccd2-ccbb-bb00-c26c3a29f3b9.png)

- 条件(アカウント名が入力されたかどうか)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/0086f2b7-6dd2-f47e-3a9a-2c999749f1e4.png)
ここまでの変数の値を使って、処理の分岐を設定します。
ここでは、直前の質問で入力された値がある場合のみ処理を進めます。
(Enterを押されただけでは進めなくしています)

- 質問(処理の実行前確認)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/6eeda80e-49f2-b8dd-3516-04641ed6009a.png)
今度は、入力されたアカウント名を確認するテキストを表示し、それに対してはい/いいえ/やめたで入力させ、確認という変数に値を格納することにします。
今度は、期待している返事が決まっているので、選択しやすいようにしています。

- 条件(実行するかどうか)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/98225beb-e09e-4dfe-726a-bc2ad1096d05.png)
"はい"以外の場合、処理をしないように設定します。

- "やめた"ルート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/e770e7ad-e95b-628e-896c-874640954429.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/0395285e-ffb1-0b40-0f4d-76bf76707a5f.png)
中断する旨のメッセージを表示し、終了とします。

- "いいえ"ルート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/e245676c-0f08-5a4c-57ac-4e1f2f534d26.png)
入力値の再確認をする旨のメッセージを表示し、質問(アカウント名の収集)まで戻ります。
※小さい丸の部分をドラッグして、任意の箱にくっつけると好きなアクションまで戻ることができます。

- "はい"ルート
"はい"ルートでは、Power Automate の処理の実行と、処理結果の表示を設定します。

- Power Automate の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/5982f5ca-44ff-1088-a22b-c748b7bbf846.png)
ここでは動作させる Power Automate のフローと、それに渡す変数、結果を格納する変数を設定します。
Power Automate は以下の通り、"アクションを呼び出す"から選択できますが、事前に作成したフローは選択できませんので、新しくフローを作成し、前回の記事で作成したフローの中身をコピーして完成となります。
フローの作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/03fdea5e-a2a1-a6c2-9640-8e31d0e04701.png)
Power Automate の画面に遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/1ffa99c5-4d41-8044-58f3-7f098fb19a3a.png)
前回の記事で作成したフローの中身をコピペ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/b9ca9096-73c7-5594-07ff-7af043c938f1.png)
トリガーには入力された変数の受け取りを設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/b4940f06-34cb-8460-9c6a-babf062fc89b.png)
出力には、調査結果を設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/71e3fefe-66ef-3627-3404-c1ceebce0de0.png)
これで、フローを保存し、"アクションを呼び出す"から選択して完了です。

- メッセージ(処理結果の表示)
やっと結果が返ってきたので、あとは表示のみです。
適当に表示してしまいましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/a7123f40-993c-8886-168d-9dc4e229a5ea.png)
最後に終了を設置して保存し、キャンバスの作成は終わりです。

# 4. その他の設定
- Bot のテスト
ここまででできれば(できていなくも途中でも) テストができますので、試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/08e4454a-f3dc-0a62-6052-b80a1ce577af.png)
ちゃんと動作していることが確認できます。

- 不要なトピックをオフ
しなくてもいいのですが、デフォルトでいくつかトリガーフレーズが設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/9252db7e-3ec5-6502-e4ed-93ec95b2d82c.png)
それがうるさい場合は、オフにしちゃいます。
※ちなみに、キャンバスで終了の箱を設置した場合に動作しているのは、"会話の終了"トピックのようですので、そのあたりの編集も必要あれば行います。

- 公開
さて、準備が整ったら、メニューの"公開"から、Bot をアクティブ化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/3bd5c6c4-5dc6-b616-8a13-f954d548777f.png)
ページの中ほどのデモWebサイトのリンクで動作確認ができたりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/39f0aa35-ac03-d05e-50af-57bf47897c7a.png)

- Teamsへの公開
アクティブ化した Bot は　Teams に公開することができます。
メニューの"チャネル"から、Teams を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/77cd0d8a-8e51-7481-4037-249ab78ba8e1.png)
"リンクのコピー"を選択し、Teams で開けば、自分だけでまずテストを行うことができます。
また。"管理者の承認のために送信する"を行った場合は、Teams の管理センターから承認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/9669f2d8-0db0-3be8-43f5-fdd5d2912602.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/c0d31e14-db55-776b-eaf0-d67512d59011.png)
承認すると、アプリから選択ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/ca0cc18a-f5df-1a41-eb72-a706ec5d7dd1.png)

# まとめ
以上で、Power Virtual Agents での Bot の作成ができました。
画像ぺちゃぺちゃ張ってたら長くなってしまいましたが、Bot の作成自体はすごく簡単ですし、Power Automate との連携するといろんな業務に応用が利くと思います。皆様もぜひやってみてください！