【#PowerApps Tip's】Microsoft Teams コネクター(プレビュー)

Microsoft Teams のチームチャンネルへ、Power Apps から投稿したかったので調べてみました。

# ご注意
今回、紹介する「Microsoft Teams コネクター」は記事投稿時点（2020/01/06）でプレビューです。今後のVerUp等で大幅な変更が発生する可能性があります。

![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/110e1f63-f321-dd9d-febf-39d2a71a0aa3.png)

# Docs
公式情報は下記になります。なお、日本語ページは現時点で確認できませんでした。

[Microsoft Teams (Preview)](https://docs.microsoft.com/ja-jp/connectors/teams/)

# チャンネル投稿で利用する関数
記事投稿時点では、3種類の関数(メソッド)が確認されます。

　1. PostMessageToChannel （※非推奨）
　2. PostMessageToChannelV2
　3. PostMessageToChannelV3 

前述のDocsにも記載ありますが、No.1は非推奨になっています。

> This action has been deprecated. Please use Post a message (V3) instead.

No.3 の V3 を利用しましょう、とのこと。

# PostMessageToChannel（V2、V3）を利用するにあたり…
上記3種類の関数、全てに共通することです。メッセージを投稿したいチームのIDと、チャンネルのIDが必要になります。残念ながら、Teams の裏側にある Office 365 Groups のメールアドレスではダメなようです。

今回はコネクターが保有している全チームの取得と、指定したチームのチャンネル一覧を取得する関数を利用してみます。

## 全てのチームを取得する
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/df129597-3461-a255-ced2-648bc31e2104.png)


```
MicrosoftTeams.GetAllTeams().value
```

| value       | 概要            |
|-------------|---------------|
| description | チームの説明        |
| displayName | 表示名           |
| id          | ID（コレが投稿時に必要） |

## チームの全チャンネルを取得する

```
MicrosoftTeams.GetChannelsForGroup([対象チームのID]).value
```

| value       | 概要            |
|-------------|---------------|
| description | チャンネルの説明      |
| displayName | 表示名           |
| id          | ID（コレが投稿時に必要） |


後半で紹介する動作イメージ動画のアプリは、全チームを表示したデータテーブルコントロールを用意し、そこで選択したチームのIDを受け渡しています。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/c9421ee3-5590-1223-71f2-18ad32d35ed0.png)


``` DataTable.Items
MicrosoftTeams.GetChannelsForGroup(TeamsDataTable.Selected.id).value
```

# PostMessageToChannel
非推奨なので覚える必要は無いのですが、念のため。

```
MicrosoftTeams.PostMessageToChannel(
    [対象チームのID],
    [対象チャンネルのID],
    {body:{ content:[メッセージBody], contentType:[0 or 1 ※] } }
);
```

※contentType について
Docsではenumとなっています。調べた限りだと下記になります。

　Text ＝ 0
　HTML ＝ 1

なお、0以外を指定すると、全て自動的にHTMLとして判断されていました。メッセージの部分が入れ子になっており、かつcontentTypeがマジックナンバーなので使いづらいなぁ、という印象です。非推奨になってくれてよかったです。

# PostMessageToChannelV3
V2 ないし V3 についてはDocsだと差異があるような記載なのですが・・・。調査したタイミングでは同じパラメーターで動作していたので、まとめてしまいます。

```
MicrosoftTeams.PostMessageToChannelV3(
    [対象チームのID],
    [対象チャンネルのID],
    {
        content:[メッセージBody],
        contentType:["Text" or "HTML"]
    },
    {subject:[メッセージSubject]}
);
```

無印の関数と比較すると、contentType が文字列で指定できるようになったので非常に読みやすくなりました。マジックナンバーは忌むべきモノですよね。

また、Subject（件名）が指定可能になったようです。もちろん、オプションなので省略可能です。

## V2 と V3 の差異
Docsを確認する限りでは、一部パラメーターが異なるとあります。繰り返しになりますが、記事投稿時点ではパラメーターは同じなので真相は不明。
また、V3では戻り値として投稿したメッセージのIDが取得できるようになっています。

### V2 Docs抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/75637b94-ab13-ba1d-eed6-6f130c3a2a48.png)

### V3 Docs抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/d68a9463-a432-57cf-667f-95d4f81141c9.png)


# 実際の動作

<blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> <a href="https://twitter.com/hashtag/MicrosoftTeams?src=hash&amp;ref_src=twsrc%5Etfw">#MicrosoftTeams</a> connector. PostMessageToChannel V2, V3 <a href="https://t.co/2g2qwrIW8i">pic.twitter.com/2g2qwrIW8i</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1213808238354784256?ref_src=twsrc%5Etfw">January 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# まとめ
現在プレビューのコネクターですが、社内利用などであれば十分かな、という印象です。チームのIDや、チャンネルのIDを調べるのが少々テマですが、ご紹介したように今回のコネクターや、Office 365 Groupsコネクターを利用してPower Apps上で調べるコトも可能ですし、Teamsの管理画面やURL等から確認するコトができますので、何とかなるかな、です。

なお、Power Apps以外で各IDを調べる方法は別途まとめたいと考えておりますので、期待せずにお待ちくださいｗ


それでは、皆さま。素晴らしい Power Platform Life を！