デジタルペンテスト部の山崎圭吾です。
Microsoft Teamsに、ユーザがアップロードした画像を使って投稿にリアクションをすることができる、カスタム絵文字(組織の絵文字)機能が登場しました。
今までは、固定の👍、❤️などからリアクションを選ぶしかなかったのですが、Slackのように、自由な絵文字が使えるようになりました。
弊社でも、カスタム絵文字の使用が解禁されると、様々な絵文字がアップロードされ、リアクションに活用されはじめました。
しかしながら、このカスタム絵文字は、チームやチャネル内で限定されるものではなく、組織全体で共有されて使われるものです。
活用が進むにつれ、「もう帰りたい」といった絵文字をアップロードする社員もあらわれ、“ビジネスコミュニケーションに不要なものが散見される”と社内で問題となりました。ケシカラン。
管理者はカスタム絵文字を登録できるユーザを制限することもできるのですが、できればみんなに使ってもらいたい、でも不適切な使用は見守りたい、というジレンマがあったようです。
そこで、カスタム絵文字の追加を定期的にクロールして、新しいものが追加されたら把握できる仕組みができないかと思い、少し調査してみました。
同じ悩みを持つ方へのヒントになればと思い、ブログとして公開します。
※なお、あくまでも、現時点(2024/7/31)、かつ、弊社テナントではこうだったという話となります。
調査の過程
まずは、マイクロソフトのサイトにカスタム絵文字を取得するAPI等についてドキュメントが無いかを探してみました。が・・・私のググり力が足りなかったのか、適切なドキュメントにたどり着くことができず、あきらめました。
次に、ブラウザ版のTeamsで、HTMLやjavascriptのソースを眺めてそれらしい記述がないかどうかを探しました。が、ひとめで分かるものは存在しませんでした。ブラウザの「デベロッパーツール」を用いて、絵文字選択のダイアログの表示を「サブツリーの変更」のブレークポイントで捕まえたりもしてみたのですが、ソースが難読化されていて追うのに時間がかかりそうでした。
そこで、ブラウザが発するリクエストとそのレスポンスの様子から探っていくことにしました。アプリ版のTeamsの場合は、ローカルプロキシを経由させることで通信が取れました。ブラウザ版のTeamsでは、「デベロッパーツール」のネットワークのタブで見ることができます。
とはいえ、Teamsを起動してから最初の読み込みが終わるまでに、600を超えるリクエストを送受信していて、探し出すのはなかなか大変でした。
カスタム絵文字のメタデータを取得するAPI
そして、とうとう見つけたのが、
https://teams.microsoft.com/api/csa/apac/api/v1/customemoji/metadata
という、いかにも!という通信でした。
このURLに対して、適切なAuthorization: Bearer ~ ヘッダを付けてリクエストを送信することで、カスタム絵文字のメタデータが取得できるようです。
他にも、x-ms-continuation:というヘッダを付けることで、前回取得時からの差分を取得することもできるようです。全部を取得したい場合にはこちらのヘッダは付けなければ、全件が返ってくるようです。
※繰り返しますが、現時点で、弊社テナントではこうだったという話となります。ドキュメント化されていない(?)APIだとすると動作はいつ変更されてもおかしくありません。
返ってくるメタデータは、
{"continuationToken":"数値","categories":[{"id":"customEmoji","title":"Custom Emoji","description":"Custom Emoji","emoticons":[{"id":"文字列","documentId":"文字列","shortcuts":["arigatou"],"description":"arigatou","createdOn":数値,"isDeleted":false,"unicode":null,"diverse":false,"keywords":["arigatou"],"creator":"文字列","etag":"\"文字列\""},...]}]}
という形式でした。
categories 「customEmoji」のemoticonsの中にカスタム絵文字の個数分だけid、documentId、shortcuts、description、createdOn、keywords 、creatorといった情報が記述されていました。
絵文字の画像は、このdocumentIdの値を用いて、
https://jp-prod.asyncgw.teams.microsoft.com/v1/objects/documentId/views/imgt2_anim?v=1
というURLに、適切なCookieを持たせた状態でアクセスすると取得できました。
また、creatorの文字列を氏名等に変換するためには、
https://teams.microsoft.com/api/mt/apac/beta/users/creator/
にアクセスし、displayNameの値を引っ張ってくると良さそうです。
かくして、作成日時・キーワード・絵文字画像・作成者などを一覧として取得することができました。
「もう帰りたい」などの不適切な絵文字を登録した人物も一目瞭然ですね!
定期的にクロールして通知することで、このような不適切な絵文字(を登録する社員?!)を根絶することができるかも知れません。まことにもって
以上、ビジネスコミュニケーションよりも、ブラウザとコミュニケーションを取るほうが好きなやまざきがお送りしました。