bon now

ありのままの現実を書き殴る吐き溜め。底辺SEの備忘録。
Written by bon who just a foolish IT Engineer.

MS Teamsのチャンネルに投稿されたメッセージをセンチメント分析するFlow作った

Created Date: 2019/12/06 20:41
Updated Date: 2023/11/05 03:00

作ったといってもメチャクチャ簡単で、僕がやったのはRails6のAPIモードでAzure Text Analyticsを叩くたった1つのAPIを作っただけ。 一応アーキテクチャを載せるとこんな感じ。

システム構成図

Teamsのチャンネル(チャットではない)に新しく投稿されたメッセージのテキストをFlowを経由して、WebhookでAzure Text Analyticsに対してセンチメント分析させるGETのAPIを叩き、 その返り値の結果が0.4以下(数が少ないほど否定的な感情という分析結果)なら個別チャットでFlowからなだめるメッセージが発言者に届くというもの。
Flowの都合上、Teamsのチャンネルは固定されてしまうが、発言者は固定されていないので、例えば「XXプロジェクト」というチャンネルで Aさんが「Bさん、お前また不具合出したやろ。何回目ですかね、いい加減にしてくれませんか」みたいなことを投稿すると、おそらくFlowからAさんにメッセージが届く。注意しなければいけないのは新規投稿のみなので、例えば1つの投稿にレスラッシュで荒れてきたみたいなのは救済できない。

Flowすごい

Flowはすごい。大体のことは組み合わせでなんとかなる。JSONデータも解析処理があるので、データを変数として扱うこともできるし、 それを利用して別の処理を動的に実行させるということもできる。 ただ条件分岐が多く発生してくるとGUIで編集する都合上かなり見づらくなるので、業務フローを自動化するみたいなときは、 異常系のフローをできるだけ少なくするとかそもそも異常を考慮しなくてよい業務に絞るかなどしたほうがよい。

今回の仕組みを使うと、チャンネルの新規投稿だけとはいえFlowを介してBotを組み上げることもできる。 作り込めばSlackと遜色ないことをやることも可能なのである。
実際にFlowからTeamsへ投稿できるメッセージの定義サンプルもあるので、どういうことができるのか見ておくといいかもしれない。
https://adaptivecards.io/samples/

Teamsすごい

Teamsにはとんでもない数のアプリ連携が存在する。Slackには及ばないとは思うけど、練度がまあまあ高い。 Slackほど何でもかんでもハックできるというわけではないんだけど、ビジネスというかコミュニケーション用途においては、 だいぶ洗練されているなと感じる。 チャンネルとチャットの使い分けが難しい気もするけど慣れたらそうでもない。 ビデオ会議とかOutlookのカレンダーやSharepointとの連携によるファイル管理など、 Office365の各製品が蜜に連携することで生まれるシームレスなコラボレーションは、 正直使ってて全く違和感がないし、むしろ今までいろんなアプリ立ち上げてなんやかややってたのが馬鹿らしくなるくらいだ。 シェアを一気に拡大してるのも頷ける。

なぜ分析をしようと思ったのか

ここから本題なんだけど、僕がなぜ投稿したメッセージのセンチメント分析をしようと思ったのかを書く。

昨今、若者に切れて手を上げたり声を荒げて怒鳴り散らしたりするとパワハラ認定される事案がだいぶ増えてきて、 人の教育に恫喝や暴力は良くないよねという世論がだいぶ日本社会に浸透してきていると感じている。 そしてエンジニア界隈でも心理的安全性という言葉がだいぶ浸透してきたと思う。

心理的安全性を定義することは僕には難しすぎるのでここではやらないけど、 端的に「自分が正しいと思うことを何でも発言しても建設的な議論がなされる」としたときそこにより攻撃的ないしは より批判的ニュアンスが含まれている場合、期せずして人格を攻撃してる場合もある。 特に相手の様子が伺えないテキストベースでのコミュニケーションでは、議論がヒートアップするとそういう場面に出くわす可能性が上がるだろう。
このとき、リアルな打ち合わせや会議だとファシリテーターか空気を読めるすごい人が間に入って止めてくれるだろう。 だがテキストチャットの場合は、「お前やれよ」「いや、ここは俺が」「いや、俺が!」「「どうぞどうぞ」」みたいな感じに、 最後の言い出しっぺがやるみたいな状況にも陥る可能性もあり、救世主が現れることは個人的には多くない印象だ。 じゃあここにお前らやめろとBotが介入してきたらどうだろうか。という感じで作ったのが今回の仕組みである。

しかしながら思い返してもらいたい。僕が作ったのは個別にメッセージ通知がくるというものであり、 攻撃的/批判的な発言が発生したチャンネルに通知されるわけではないということを。これにはちゃんとした理由がある。

自己反省を促す

ここは日本だけど、外国では人前で人をしかることはやってはいけないと言われている国もあるように、 人は多くの人の前で注目を浴びるような状況に置かれると報復感情や屈辱的な感情が湧き上がりやすいものである。 こうなると先に述べた心理的安全性からは程遠く、当人が「もうこの類の発言はやめた」となる可能性もある。 これはチームとしても全く良くない。

そういう理由で、あくまでお叱りやなだめの通知は「個人」に送ることにしたのである。 怒りや悲しみなどは外的要因で発生するものでありながら、結局は当人が自己処理するしかコントロールのしようがないものである。 であれば、それを助長できるような仕組みにすることのほうが意義があると考えるのは理に適っている、と僕は思うわけである。

心理的安全性を確保するためにはすなわちチームや組織という垣根での統制もある一方で、 個人が感じる感情をマネジメントするという部分での理解や促進もやっていかなければならないのではないだろうか。 アンガーマネジメントマインドフルネスあたりは多分この界隈から発展して出てきたのかなと僕は思ってる。

まとめ

今回のことを述べてないこと思ってることも含めて短くまとめると以下のとおりである。

  • プロダクトの裏側には作った人の想いがあり、それを基盤にすれば自ずと方向性は定まる(はず)
  • 内省は自己成長を促し、環境へと還元されていく
  • 自分の想いを形にするのは意外とおもしろいし成長できる

というわけで、自分の考えたXXを実現するためには行動するしかないのだ。

local_offer
folder work