Microsoft Teamsのプレゼンスから部下がサボってないか監視しよう!~ エクセルで可視化編 ~

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

0. プロローグ 1. 永続的なアクセストークンの取得 2. プレゼンスの取得 3. エクセルで可視化
4. PowerAutomate Desktopで定期実行 5. Pythonで実装 6. 完全自動化Pythonプログラム  

さて、全員分のTeamsプレゼンスが取得できましたので、エクセルに追記して可視化できるようにします。

土台となるエクセルファイルの準備

初めにプレゼンスを追記していくエクセルファイルを準備します。このようなファイルを作成します。

1行目はヘッダーです。A列は日付、B列からプレゼンスを追記していくメンバーを並べます。並べる順番は前回作ったメンバーリストと同じ順番にします。

またシート全体にこのような形で条件付き書式ルールを設定し、追記したプレゼンスに応じてセルの色を変更します。

シート名は「Dashboard」とします。

PowerAutomate Desktopでエクセルの書き込み

土台ができたのでPowerAutomate Desktopを使って各メンバーのプレゼンスの値をエクセルに追記していきます。

「Excelの起動」を選択します。

①「次のドキュメントを開く」を選択

②土台のエクセルを指定します。

「アクティブなExcelワークシートの設定」を選択します。

ワークシート名を「Dashboard」にします。

「Excelワークシートから最初の空の列や行を取得」を選択します。これは選択したシートの最初の空行を取得するフローです。これを入れることでどんどん下にプレゼンスの値を追記できるようになるわけです。最初の空行は「FirstFreeLow」という変数に格納されます。

「Excelワークシートに書き込み」を選択します。

A列には時刻を追記します。書き込む値は変数名「CurrentDateTime」、行はひとつ前のアクションで取得した変数名「FirstFreeRow」を指定します。

B列からプレゼンスを追記していきます。プレゼンスは変数名「JsonAsCustomObject」のavailabilityに入っていますが、複数人のプレゼンスを一度に取得しているのでインデックスを指定して対象の人のプレゼンスを個別に取り出す必要があります。取り出す方法は以下のように指定します。

%JsonAsCustomObject[‘value’][0][‘availability’]%

JSONのインデックスは0から始まるので一人目は0を指定します。

行は先ほどと同様、変数名「FirstFreeRow」を指定します。

二人目はこのような形。インデックスを “1” とします。あとはこのアクションを人数分繰り返すだけです。

最後は「エクセルを閉じる」を選んで

保存して終了です。

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

これでメンバー全員のTeamsプレゼンスを取得してエクセルに保存して一覧表示できるようになりました。

今回はここまで。次回は定期実行フローの作成です。

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

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

0. プロローグ 1. 永続的なアクセストークンの取得 2. プレゼンスの取得 3. エクセルで可視化
4. PowerAutomate Desktopで定期実行 5. Pythonで実装 6. 完全自動化Pythonプログラム  

続いては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プレゼンスが取得できるようになったので、次回はエクセルに入力して可視化までやってみます。