前回はMicrosoft GraphのAPIを利用してTeamsのチャネルの投稿メッセージとその返信内容の取得方法を紹介しました。今回はさらに応用として、AIを組み合わせてTeamsのチャネルでいわゆる「炎上」となりそうなやり取りが交わされた場合にアラートでお知らせするPower Automateのフローを作成してみようと思います。
おさらい
Teamsの投稿メッセージだけを取得する場合は、Power AutomateのTeamsコネクタで用意されている「メッセージを取得します」アクションで投稿メッセージを取得できますが、 返信内容も取得しようとした場合はMicrosoft Graphを利用しないと取得することができませんでした。 またTeamsのメッセージを取得するためのAPIを利用するためには、MicrosoftへアプリケーションのAPI利用申請をした後、許可されてから利用可能となります。前回の記事が参考になります。(Teamsの投稿メッセージと返信を取得する方法 / 開発者向けブログ・イベント | GMO Developers)
https://developers.gmo.jp/29173/
Power AutomateからMicrosoft Graph を利用するには、Azure Active Directoryにアプリの登録を行ってAPIを呼び出します。さらに、登録されたアプリをPower Automateのフローから利用する場合は、プレミアムコネクタの「HTTP」を利用することになります。こちらは以前の記事が参考になります。(Microsoft Graph を利用してTeamsのプライベートチャネルを作成する / 開発者向けブログ・イベント | GMO Developers)
https://developers.gmo.jp/26063/
確認
先日API利用の許可がMicrosoftから取得できたので、テストしてみましょう。
前回の記事(Teamsの投稿メッセージと返信を取得する方法 / 開発者向けブログ・イベント | GMO)と以前の記事 (Microsoft Graph を利用してTeamsのプライベートチャネルを作成する / 開発者向けブログ・イベント | GMO Developers) を参考にGraph Explorer(https://developer.microsoft.com/ja-jp/graph/graph-explorer)で「チャネル内のメッセージ(返信なし)」と「チャネル内のメッセージへの返信」をPower Automateで実行します。Azure Active Directoryに登録したアプリケーションにはこちらのページを参考に、「ChannelMessage.Read.Group、ChannelMessage.Read.All、Group.Read.All 、Group.ReadWrite.All」のアクセス許可を設定しておきます。
参考:・チャネル メッセージを一覧表示する - Microsoft Graph v1.0 | Microsoft Learn・チャネルまたはチャットで chatMessage を取得する - Microsoft Graph v1.0 | Microsoft Learn
取得する投稿メッセージと返信はこちらです。
実行するフローはこのようになります。
実行結果で投稿メッセージとその返信が取得できています。APIの利用はきちんと許可されているようです。
AI Builderを試してみる
今回利用するのは、AI Builderの「テキスト内の肯定的または否定的な感情を分析する」アクションです。入力された文章をAIが解析して感情分析を行います。肯定的な文章(positive)か、否定的な文章(negative)か、どちらとも言えない(neutral)、混在している(mixed)の4種類の判定ができます。
まずはテストで試してみましょう。このようなフローを作成します。
変数の値には「テキスト全体の感情」を指定します。
フローを実行してみましょう。実行結果では、positive、negative、neutralの割合が表示されています。文章全体としては“positive”となっているので、この内容は肯定的=問題無しと判断できます。
[
{
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"sentiment": "neutral",
"offset": 0,
"length": 7,
"sentenceScores": {
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"positive": 0.1,
"neutral": 0.9,
"negative": 0.01
}
},
{
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"sentiment": "positive",
"offset": 7,
"length": 13,
"sentenceScores": {
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"positive": 0.78,
"neutral": 0.22,
"negative": 0
}
}
]
次に強い口調の文章で確認してみます。全体的な感情としては“negative”となっているので、問題ありと判断できます。
「Teams Sentiment Alert」フローの作成
ここまでを踏まえて、Teams内の投稿の炎上具合を確認してアラートを送信するフローを作成してみましょう。名付けて「Teams Sentiment Alert」です。 最初にフロー全体図です。
ポイントとなる部分を確認してゆきます。Microsoft Graphで投稿元のメッセージを取得します。あらかじめ投稿内容を確認するチームとチャネルIDを取得しておきます。
各変数を用意します。「メッセージ返信一覧」は投稿メッセージごとの返信内容を格納します。「コンテンツ」には、投稿メッセージと返信内容をテキストとして合わせたものを格納します。こちらの内容をAIに検証してもらい判定を行います。「感情」は判定結果を格納します。
メッセージ一覧の内容を全て検証します。値には“variables('メッセージ一覧').value”を入力します。
それぞれの投稿内容は“items('Apply_to_each')['body']['content']”で取得できますが、HTML形式の文章になっているのでテキストに変換して変数に格納しておきます。変数には下に続く返信内容も追加で格納します。
こちらはMicrosoft Graphで返信内容を取得しています。ポイントとしては親メッセージとなるIDを“items('Apply_to_each')['id']”として指定します。
変数に返信内容すべてを格納します。
メッセージの返信一覧の内容を全て検証します。値には“variables('メッセージ返信一覧').value”を入力します。
返信内容もテキストに変換して変数に追加します。
AIで投稿内容と返信内容のテキストを分析します。Teamsの投稿内容が空の場合や予期せぬエラーが発生しても大丈夫なように「スコープ」アクションで対応します。
最初の「スコープ」と「スコープ_エラー発生時処理」の「実行条件の構成」はこのようになっています。
上のスコープでAIの分析が成功した場合の「スコープ_成功時」の「実行条件の構成」はこちらです。
AIの分析結果を格納します。
分析結果が“negative”=「炎上」の場合に分岐をしてアラートの処理を実行します。
所定のチャネルにアラートを送信します。“items('Apply_to_each').webUrl”をリンクとして送信することで、炎上元の投稿がすぐにわかるようにしておきます。
最後に、投稿メッセージごとに検証を実施するので、変数を空にして次の解析に備えます。
テスト
以上を実行してみましょう。チャネル内には、普通の投稿内容と、問題のありそうな投稿があります。
炎上アラートチャネルにメッセージが届きました。
リンクをクリックすると炎上元のメッセージが確認できます。他の投稿は問題無いようです。
以上、Teamsの「炎上」アラート「Teams Sentiment Alert」の開発方法を紹介しました。これまで取り組んだMicrosoft Graphや新しくAIの機能も組み合わせてかなり実用的なフローを作ることができました。AIの利用自体はPower Automateから専門知識も不要でお手軽に利用できるようになっています。色々なAIの機能が提供されていますので、既存のフローに取り入れたり、他の機能との組み合わせ次第でさらに進化したフローに生まれ変わります。是非お試しください。