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

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 で表示
としています。

まず今回は、COTOHA API の呼び出しを行う Power Automate の作成手順をまとめ、次回 Power Virtual Agents の作成手順をまとめます。

# 手順

1. アカウント登録
2. Power Automate の作成
3. ツイート履歴の取得(ツイートの検索アクション)
4. ツイート履歴の加工(選択アクション)
5. COTOHA API の実行(HTTPアクション)
6. 結果の加工

# 1. アカウント登録

以下のサイトよりアカウントを登録します。
Developers 向けの無料登録がありますので、それでお試しすることができます。

https://api.ce-cotoha.com/contents/index.html

ちなみに今回使うAPIの使い方が以下から確認できます。

https://api.ce-cotoha.com/contents/reference/apireference.html

ユーザ属性推定(β)は、リファレンスを読むと、推定する対象の書いたテキスト、もしくはテキストの配列が必要なことがわかります。これにツイートの履歴を使おうというわけです。

# 2. Power Automate の作成
事前準備ができたので、Power Automate の作成を行います。
全体像は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/e7b0c4b5-04fd-aca4-78d6-8abf9ab34ad9.png)

Power Virtual Agents と組み合わせる前に、手動で動作させる単体のフローとして作成していきます。

# 3. ツイート履歴の取得(ツイートの検索アクション)
- まずは、入力されたアカウント名を使って、ツイート履歴を取得する部分を作ります。入力されたことを再現するために以下のように"アカウント名"の入力値を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/252b360e-f21c-ef22-2c20-f30d55ad559a.png)

- 次に、"ツイートの検索"アクションを設置し、以下を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/c3b2aa5d-3542-8174-7a98-13a2ce811a8a.png)
できるだけサンプルは多いほうがいいので、"結果の最大件数"は最大値の100件取得にしています。
"検索テキスト"には以下を設定します。(Teams から入力があると改行が混ざるので replace が入っています)

```
replace(replace(concat('from:@', triggerBody()['text'],' exclude:retweets'),decodeUriComponent('%0D'),''),decodeUriComponent('%0A'),'')
```

# 4. ツイート履歴の加工(選択アクション)
- 無事に取得できたら、ツイート履歴を、テキストの配列に変換するため"選択"アクションに以下を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/16d3827d-8cc8-8693-2d32-fd9cc466fdaa.png)
"選択"アクションはもともと以下のような見た目になっていますが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/5668f06d-40fa-8365-bfb7-4c575c0819a4.png)
右にあるテキストモードへのアイコンをクリックすると、見た目が変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/51f53499-b202-fb57-8c68-36cc0544deed.png)
ここにテキストをセットすることで、出来上がりをただのテキストの配列にすることができます。

# 5. COTOHA API の実行(HTTPアクション)
- テキストの配列が作成できたら、あとはAPIを呼び出すだけです。
APIを呼び出すにては、アクセストークンが必要ですので、まずアクセストークンを取得します。
エンドポイントのURI等、取得に関するの方法はリファレンスに記載されています。

https://api.ce-cotoha.com/contents/reference/accesstoken.html

- 上記を Power Automate でやってみると以下のような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/7aa4c2fe-7fcb-0c88-036b-2ac8e2e7b63c.png)
clientId、clientSecret は事前に準備した COTOHA API のマイページにて確認ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/140379a5-b1d9-045e-b91d-1c022e656d41.png)

- アクセストークンが取得できたら、ユーザ属性推定(β)のAPIを実行します。
こちらも同じくリファレンスに記載されています。

https://api.ce-cotoha.com/contents/reference/apireference.html

- 上記を Power Automate でやってみると以下のような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/a42cb5a7-5ebe-6a9d-4f74-aec75a208423.png)
"出力"の部分は先ほど加工した、テキストの配列を設定します。
また、"Authorization"の部分には以下を入力し、先ほど取得したアクセストークンを設定します。

```
concat('Bearer ', body('アクセストークンの取得')?['access_token'])
```

# 6. 結果の加工
- 最後に結果の加工をします。
まず、結果の加工用に使う改行文字を変数で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/dc166fd6-00ae-ca31-fff5-da8d1e60ac98.png)

> 参考
> https://qiita.com/kojisaiki/items/d7fb7932e6f20e1e6628

- 次に、返却用のテキスト変数を作成します。
ちょっと長いですが、取得できた結果のラベル、取得できた結果、改行の順番に並べているだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/2e6f4f80-8a17-06e2-9220-a4a5da26aa30.png)


これですべての手順が終了しました。テストで動かしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/1d262b0a-e0bf-796b-3711-0b6d5f941634.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/423f18a9-2a94-2bbf-e5c2-45f1682d5d36.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312282/a92b1c88-c1b9-2325-42bc-f62713820091.png)

```
年代(age)：30-39歳 

既婚/未婚(civilstatus)：既婚 

収入(earnings)： 

性別(gender)：男性 

週刊(habit)： 

趣味(hobby)：["FISHING","GAMBLE","INTERNET","MUSIC","PAINT","SHOPPING","SPORT","TVGAME"] 

業種(kind_of_bussiness)： 

職種(kind_of_occupation)： 

出身地(location)： 

移動手段(moving)：["CAR"] 

職業(occupation)： 

役職(position)： 


※空白部分は不明です。
　また、あくまで API の実行結果であり、結果は事実ではありません。
```

うまく動作させることができました！

# まとめ
今回はCOTOHA API の実行のみの手順をまとめました。
ほかにも、感情表現とか、文タイプ(叙述/質問/命令)判定とかもあるので、Botの表現を豊かにするとかに組み込んだらおもしろうそうな気がします。

次回はBot部分をまとめます。