API による Microsoft Teams のステータスメッセージの取得/設定
Microsoft Teams では、ステータスメッセージを設定することができます。
今回は、これをスクリプト経由で設定する方法について記載しようと思います。
Graph API でできる範囲
2022年1月現在、 Teams の Microsoft Graph REST API では、 ユーザーのプレゼンス情報の取得/設定ができます。
この API では、 availability, activity の取得/設定がサポートされており、 Python スクリプトなどで自由に設定することができます。
しかし、 beta 版も含め、ステータスメッセージの取得/設定は現状サポートされていないようです。
Teams アプリ、Teams Web アプリと同様の方法でのアクセス
そこで、公開されていない API を用いてアクセスすることになります。
結論としては、下記の情報で OAuth2 のアクセストークンを取得し、後述する URL に POST, PUT することで、ステータスメッセージの取得/設定することができます。
これは、原則として、 Teams アプリや Teams Web アプリが行っている方法と同様と思われます。
OAuth2 情報
OAuth2 のアクセストークンは、下記の情報で取得を行います。
- Client ID
1fec8e78-bce4-4aaf-ab1b-5451cc387264
- Client Secret
- Public Client なので不要
- Redirect URI
https://login.microsoftonline.com/common/oauth2/nativeclient
- Scope
https://api.spaces.skype.com//.default
なお、上記の Client ID は、 Teams のデスクトップアプリの ID になっています。
また、 Client Secret, Redirect URI は、いずれも Public Client の設定になっています。
Scope の .default
の前にスラッシュが二つありますが、 Microsoft のページによると、これで正しいようです。
(ただ、スラッシュが一つでも問題なく動いてはいるようでした。)
ステータスメッセージの取得
ステータスメッセージの取得は、下記の URL に JSON データを POST することで実現できます。
送信するデータの中の "mri"
に設定している GUID は、 Graph API で取得できるユーザー情報の中の id
のことです。
8:orgid
は PublicDirectoryParticipantPrefix と呼ばれるもののようで、固定値でよいようです。
- URL
https://presence.teams.microsoft.com/v1/presence/getpresence/
- HTTP Method
- POST
- Body として送信する JSON データ
上記を送ると、指定したユーザー分のステータスメッセージを含むユーザー情報が返ってきます。
ステータスメッセージの設定
自分のステータスメッセージの設定は、下記の URL に JSON データを PUT することで実現できます。
メッセージと有効期限を指定し、設定することができます。
- URL
https://presence.teams.microsoft.com/v1/me/publishnote
- HTTP Method
- PUT
- Body として送信する JSON データ
なお、 "message"
の末尾に <pinnednote></pinnednote>
を追加すると、「他のユーザーが自分にメッセージを送るときに表示する」にチェックした状態になるようです。
Python での実装例
最後に、 Python を用いてステータスメッセージを設定する例を書いておこうと思います。
Windows 上で簡易的に OAuth2 を扱えるようにした msal-interactive-token-acquirer と、 HTTP アクセスで広く使われている requests を用いた場合、以下のようになります。
なお、これは個人の Microsoft アカウントではなく、組織の Microsoft アカウントで行う必要があります。
個人で試す場合は、 Microsoft 365 開発者プログラムなどを活用するとよいと思います。
このコメントはブログの管理者によって削除されました。
返信削除