Microsoft Teamsのプレゼンスから部下がサボってないか監視しよう!~ プレゼンスの取得 ~

【目次】Teamsプレゼンス可視化ツール

0. プロローグ 1. 永続的なアクセストークンの取得 2. プレゼンスの取得  

続いてはMicrosoft Graph APIからTeamsプレゼンスを取得します。これもPower Automate Desktopで実装します。

プレゼンスの取得は3つのアクションでできます。簡単です。

ユーザーリストの作成

ユーザのプレゼンスを取得するためには、対象ユーザのMicrosoft ID上のIDを取得する必要があります。IDを知るためのAPIエンドポイントは以下です。

GET https://graph.microsoft.com/v1.0/users/[userPrincipalName]

一番下の “id”: から始まる文字列がユーザを識別するIDです。

[userPrincipalName]はプリンシパル名を入れます。ほとんどの組織ではメールアドレスと同じです。

次はIDからプレゼンスを取得します。取得するAPIエンドポイントは以下です。

 

GET https://graph.microsoft.com/v1.0/users/[id]/presence

これでユーザのプレゼンスが取得できます。プレゼンスは”availability: “に表示されます。

このコマンドを人数分繰り返してもいいのですがまとめて取得することもできます。

POST https://graph.microsoft.com/v1.0/communications/getPresencesByUserId
Content-Type: application/json

{
    "ids": ["id1", "id2"]
}

まとめて取得する場合はPOSTメソッドで本文にJSON形式でidを並べたものを送ります。

PowerAutomate Desktopにこれらのリストをハードコーディングしてもいいのですが、人の増減に柔軟に対応できるよう以下のようなフォーマットでリストを作成しテキストファイルで保存しておくとメンテナンス性が向上します。

{
    "ids": [
	"c6eXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ9fd",
	"31cXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZf61",
	"84bXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZa5b",
	"46cXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZf41",
	"389XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ6e6",
	"810XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZc49",
	"14aXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ4c6",
	"7cdXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ335",
	"b1dXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ794",
	"cabXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZf3f",
	"743XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ0d4",
	"a82XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZcb3",
	"733XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ3f1",
	"672XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ31c",
	"c8bXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZbcb",
	"a1bXXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ450",
	"4a0XXXXX-AAAA-BBBB-CCCC-ZZZZZZZZZ2a6"
    ]
}

このファイルをid.txtとして適当な場所に保存します。

因みにJSONファイルの構文チェックはこちらのサイト利用すると間違いなく作成できます。

JSON Pretty Linter Ver3

PowerAutomate Desktopでプレゼンスを取得

下準備ができたところでPowerAutomate Desktopのアクション作成に入ります。

「ファイルからテキストを読み取ります」を選択します。

先ほど作成したidリストファイルを指定します。これでファイルの中身が「FileContents」という変数に格納されます。

次はHTTPの「Webサービスを呼び出します」を選択します。

入力項目は以下の通りです。

①プレゼンスを取得するAPIエンドポイント

②メソッドはPOST

③受け入れる/コンテンツタイプはJSON

④カスタムヘッダー。認証はベアラーにして、前回取得したtokenが格納されている変数「innertext」を入れます。

⑤ユーザIDリストが保存された変数

⑥変数に変換を選択

詳細はこのような形です。

⑦要求本文をエンコードしますはチェックを外します。

これでAPIの結果が「WebServiceResponse」変数に格納されます。

JSONをカスタムオブジェクトに変換

次は取得したJSONをPowerAutomate Desktopで取り出せるようにカスタムオブジェクトに変換します。

変数から「JSONをカスタムオブジェクトに変換に変換」を選択します。

これでJSON形式がPowerAutomateで扱えるカスタムオブジェクトに変換されました。

ここまでの3つのアクションを「get_presence」という名前でサブフローとして登録します。

今回はここまで。これで各メンバーのTeamsプレゼンスが取得できるようになったので、次回はエクセルに入力して可視化までやってみます。

Microsoft Teamsのプレゼンスから部下がサボってないか監視しよう!~ 永続的なアクセストークンの取得 ~

【目次】Teamsプレゼンス可視化ツール

0. プロローグ 1. 永続的なアクセストークンの取得    

Teamsプレゼンスを定期的に取得するためにはMicrosoft Graph APIを利用します。Microsoft Grap APIは認証にAzure ADが発行したアクセストークンを利用します。アクセストークンには有効期限があり、有効期限が切れた場合はリフレッシュトークンを使用してアクセストークンを再発行する必要があります。

Microsoft IDプラットフォームで構成可能なトークンの有効期限

アクセス トークンは取り消すことはできず、有効期限まで有効です。 アクセス トークンの既定の有効期間は、変数です。 発行されると、アクセス トークンの既定の有効期間には、60 分から 90 分 (平均 75 分) の範囲のランダムな値が割り当てられます。

Microsoft IDプラットフォームの更新トークン

クライアントは保護されたリソースにアクセスするためのアクセス トークンを取得するときに、更新トークンも受け取ります。 更新トークンを使用して、現在のアクセス トークンの有効期限が切れたときに、新しいアクセス トークンと更新トークンのペアを取得します。

さて、ここで早速、壁にぶち当たります。リフレッシュトークンを利用した永続的なトークンの発行はその組織の管理者がAzure Portalからアプリとして登録をする必要があります。

Microsoft IDプラットフォームにおけるOAuth2.0プロトコルとOpen ID Connectプロトコル

個人用アカウントと職場や学校のアカウントの両方を受け付けるアプリはすべて、Azure portal のアプリの登録 エクスペリエンスを通じて登録する必要があります。登録後、OAuth 2.0 または OpenID Connect を使用して、それらのユーザーをサインインさせることができます。

今回作りたいのはこっそりTeamsのプレゼンスを取得してサボってないかの監視です。通常、Azure Portalにアプリを登録できるのは情報システム部であり且つ、会社としてオフィシャルなアプリだけです。いくら組織長だからといって社員を監視したいので独自のアプリを登録することは出来ません。

永続的なアクセストークンの取得はGraphエクスプローラーを使用

Microsoft Graph APIはブラウザから簡単にお試し利用が出来るGraphエクスプローラーというのが用意されています。よくREST APIが提供されているサービスのSwagger UIのマイクロソフト版といったところです。

このGraphエクスプローラーは以下の画面から有効なアクセストークンを表示することができます。このアクセストークンをコピーして再利用することで永続的なMicrosoft Graph APIへのアクセスを実現するわけです。

右上の「Access token」をクリックすると現在有効なアクセストークンが表示されるのでこれをもらってきます。

アクセストークンはPower Automate Desktopのブラウザ自動操作で取得

ブラウザの決まった動作はPower Automate Desktopで実現します。実装手順は以下の通りです。

Power Automate Desktopを起動して「新しいフローを作成」をクリックします。すると上の画面になりますので適当に名前を付けます。今回は「presence_flow」とします。作成をクリック。

続いて左のアクションの中から「新しいMicrosoft Edgeを起動する」を選択します。

各項目はこのようにします。初期URLはGraphエクスプローラーのURLにします。

続いてGraphエクスプローラーに表示されているアクセストークンをコピーします。この動作はPower Automate Desktopのレコーダー機能を使用します。このレコーダー機能はかなりコツが必要で、この画像のようにレコーダー機能画面とブラウザを並べて操作を記録していくと比較的うまくいきます。

まず初めにレコーダーの記録ボタンを押します。

 

続いて「Acces token」タブをクリックします。レコーダーにはこの動作のまま記録されていきます。

続いてアクセストークンが表示されている領域をクリックします。すると自動で要素を特定して選択状態になります。

この状態で右クリック→「要素の値を抽出」→「テキスト:」をクリックします。

するとアクセストークンが「innertext」という変数に格納されます。

最後に「Webブラウザを閉じる」アクションを入れて終了です。この例ではアクセストークンは変数に入れているだけですが、ファイルに保存することで使いまわしも可能です。

出来上がった一連のアクションを「get_token」という名前でサブフローとして登録します。

今回はここまで。次回はMicrosoft Graph APIを使用して部下のプレゼンスを取得します。

 

Microsoft Teamsのプレゼンスから部下がサボってないか監視しよう!

【目次】Teamsプレゼンス可視化ツール

0. プロローグ 1. 永続的なアクセストークンの取得    

さて、テレワークが定着して早2年が経とうとしています。たまに出社してもオフィスはガランとしています。もう人類の働き方は変わったのでしょう。誰も満員電車に乗る生活には戻りたくないですから。

それでもやっぱり出社させたい人たちがいます。そう、経営側の人たちです。

確かに立派なオフィスを構えて、机も椅子もパソコンも買い与えて毎日出社して仕事させていたのに突然、家で仕事が出来ることが分かったので出社しませんって、じゃあ今までの投資は何だったんだと、家賃にいくらかかってると思ってるんだとなるのもうなずけます。

それにやっぱり働いてる社員が見えないとサボってるじゃないかと疑心暗鬼になるんでしょうね。正直分かります。

というわけで今回はそんな経営者の不安を払しょくするためテレワークでもちゃんと働いているんだよとわかるシステムを作ってあげることにしました。

社員の状態を可視化できるMicrosoft Teamsのプレゼンス

ITシステムをマイクロソフト製品で固めている会社は多いと思います。私の会社もそうです。OutlookにTeams、OneDriveといったところです。このTeamsにはプレゼンスという機能があり、スケジューラとその社員アクティビティを掛け合わせて、その社員の状態をほぼリアルタイムで把握することが出来ます。本来のプレゼンスの使い方はその社員が取り込み中なのか、空いているのか、離席しているのかを把握し、声掛けしても大丈夫か、メンションしても問題ないかを判断するために使用します。このプレゼンス情報を定期的に取得し可視化すればどの社員がいつ、どのくらいサボっているか把握できるちゅーわけです!

プレゼンス情報の取得はMicrosoft Graph APIを使用

TeamsのプレゼンスはMicrosoft Graph APIからJSON形式で取得することができます。

APIからの定期的な情報取得はPower Automate Desktopを使用

プログラムの定期実行はPower Automate Desktopを使用します。JSON形式で情報を取得するだけなのでなんでもいいのですが、マイクロソフト製品で固めた方が後のデータの取り込み、加工、可視化が簡単になるのでお勧めです。

取り込み、可視化はエクセルからのPower BI

JSON形式で取得したデータはエクセルに追記していきます。単純な可視化はエクセルだけで十分ですが、ため込んだデータはエクセルのテーブルにすることでBIツールが良しなにグラフ化してくれます。BIツールはPower BIを使用します。

完成した「テレワーク対応Teamsのプレゼンスから社員が働いているか把握しちゃおうツール」です。

こちらはとある組織のとある一日のTeamsプレゼンスを可視化した画像です。当然名前は仮名です。色分けはTeamsのプレゼンスの色分け通りにすると分かりやすいです。

Busy        取り込み中、Web会議中
Available 連絡可能、作業中、PCの前にいる
Away       離席、予定なし。サボっている

いやー見事に可視化できています。データ分析は可視化からと言いますが、世の中可視化しちゃいけないデータもあるのです。これもその一つ。一挙手一投足、手に取るように分かってしまいます。

Power Automate Desktopの総アクション数は21

実装したPower Automate Desktopの総アクション数は21でした。割と簡単に実装できます。

次回から実装方法を細かく解説したいと思います。