コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Microsoft Teamsのメッセージにつけられた反応をMicrosoft Flowで取得する


スポンサードリンク

今回はMicrosot Teamsでいいねなどの反応(リアクション)を取得するフローをご紹介します。

特定メッセージへのリアクションの数を集計する

メッセージにつけられたリアクションの数を取得するフローの紹介です。

アクションにて、Teamsの「メッセージを取得します」を選択し、特定のチャネルのメッセージの一覧を取得します。

f:id:koruneko:20190901114907p:plain


次に「JSONの解析」により「メッセージを取得します」で取得した、メッセージ一覧をJSON解析します。

f:id:koruneko:20190901115151p:plain

コンテンツには下記の通り入力します。

body('メッセージを取得します')?['value']

スキーマには下記の通り入力します。

{
    "type": [
        "array",
        "null"
    ],
    "items": {
        "type": [
            "object",
            "null"
        ],
        "properties": {
            "id": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "replyToId": {},
            "etag": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "messageType": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "createdDateTime": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "lastModifiedDateTime": {},
            "deletedDateTime": {},
            "subject": {},
            "summary": {},
            "importance": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "locale": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "webUrl": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "policyViolation": {},
            "from": {
                "type": [
                    "object",
                    "null"
                ],
                "properties": {
                    "device": {},
                    "user": {},
                    "conversation": {},
                    "application": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "id": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "displayName": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "applicationIdentityType": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            },
            "body": {
                "type": [
                    "object",
                    "null"
                ],
                "properties": {
                    "contentType": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "content": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                }
            },
            "attachments": {
                "type": [
                    "array",
                    "null"
                ]
            },
            "mentions": {
                "type": [
                    "array",
                    "null"
                ]
            },
            "reactions": {
                "type": [
                    "array",
                    "null"
                ]
            }
        }
    }
}

サンプルのペイロードを使用してスキーマを作成した際は以下の2点に注意してください。

〇1点目
requiredを削除する。
requiredとはpropertiesで定義した値の中で、必ず入っていなければならない値のことです。

場合によっては値が含まれない場合があるので削除を行ってエラーを回避してください。
(当たり前かもしれませんが、必須入力としたい場合は消す必要はないです。)

〇2点目
nullが返ってくる可能性のある項目は「type」にnullを明示する。
もしnullが返ってくる可能性のある項目である場合、下記のように記載してnullを取得できるようにしてください。

"type": ["array", "null"]


続いて「Apply to each」を選択し、「以前の手順から出力を選択」には下記を入力します。

@body('JSON_の解析')

これにより取得したメッセージ数分処理を繰り返します。


次が最後のアクションです。
お好きな出力方法を選択し、出力に以下を入力します。

本文:items('Apply_to_each')?['body']?['content']
リアクションの数:length(items('Apply_to_each')?['reactions'])

※「:」以降の式については「式」より入力してください。

「本文」には対象のメッセージの文章が出力されます。
「リアクションの数」には対象のメッセージのリアクションの数が出力されます。

以上がリアクションの数の取得方法になります。


リアクションの種類を取得する

続いてリアクションの種類の取得方法を紹介します。
先ほどご紹介した「特定メッセージへのリアクションの数を集計する」の「Apply to each」内に続いてアクションの記載を行っていきます。


上記「Apply to each」内で「JSONの解析」で取得した「reactions」のJSON解析を行います。
なぜまたJSON解析を?と思われた方もいるかもしれないので簡単に解説します。
上のJSON解析で得られた出力結果を実行履歴より見てほしいのですが、例えば下記のようになっているかと思います。

"reactions": [
      {
        "reactionType": "angry",
        "createdDateTime": "2019-09-01T02:18:13.998Z",
        "user": {
          "application": null,
          "device": null,
          "conversation": null,
          "user": {
            "id": "**************",
            "displayName": null,
            "userIdentityType": "aadUser"
          }
        }
      }
    ]

このように「reactions」の中身もまた、入れ子になっています。
今回取得したいのは「reactionType」なため、「reactions」を解析して「reactionType」を取得できるようにしているのです。


それでは「JSONの解析」の入力を説明します。
コンテンツには下記を入力します。

items('Apply_to_each_2')?['reactions']

スキーマには下記を入力します。

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "reactionType": {
                "type": "string"
            },
            "createdDateTime": {
                "type": "string"
            },
            "user": {
                "type": "object",
                "properties": {
                    "application": {},
                    "device": {},
                    "conversation": {},
                    "user": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "displayName": {},
                            "userIdentityType": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    }
}

f:id:koruneko:20190901125042p:plain

サンプルのペイロードを使用してスキーマを生成する場合は上記で説明したような注意点に気を付けてください。


続いて「reactionType」を参照するために上記のJSON解析結果を「Aplly to each」でループさせます。
「以前の手順から出力を選択」には下記を入力してください。

@body('JSON_の解析_2')

これにより「reactionType」の取得が可能になりました。


最後に確認の出力のために、どのメッセージに対する処理なのかわかるようにしたうえで下記のように記載することにより、「reactionType」の取得が可能です。

items('Apply_to_each')?['reactionType']

【おまけ】「reactionType」の種類について

上記で取得した「reactionType」がそれぞれどれに対応するか検証を行いましたので下記に記載します。

リアクションの種類 reactionType
いいね like
ハート heart
笑い laugh
びっくり surprised
悲しい sad
怒ってる angry

まとめ

今回ご紹介した方法をそれぞれ組み合わせることで、
どのリアクションの種類がどれだけ反応されているか?
を取得するフローの作成も可能かと思いますので、興味のある方は是非試してください。

また、「reactions」内の「User」に「ID」が取得できているようですので、誰が反応したのか?の取得も可能かもしれません。
ただこちらはMicrosoft Graphの使用が必要になってくるのかなぁ...と予想しています。
やり方がわかりましたらまた記事にしたいと思います!