ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Teams チャネルのメッセージへの短いリンクURL & チャットのメッセージのリンクURLを取得する Power Automate クラウドフロー

 

きっかけ

Teamsの標準チャネルでは、「…→リンクをコピー」でメッセージのURLを取得することができますが、生成されるURLは非常に長いため、SharePoint Listsのハイパーリンク列(255文字まで)には入りません。

この問題を調べるきっかけになったアイデアはボツになったのですが、短いURLを生成する考え方を転用して普段使いに便利なこのフローを作りました。URLは短いに越したことないですからね!

※当初はチャネルメッセージのURLのみの想定でしたが、今回使用したTeamsコネクタ「選択したメッセージの場合」トリガーはチャネルのメッセージにも表示されるので、ついでにチャットメッセージにも対応させています。

(「選択したメッセージの場合」トリガーのフローを、チャネルだけ・チャットだけにフローを表示させることはできるのだろうか…)

 

 

フロー全体

 

フロー解説

Teamsコネクタの「選択したメッセージの場合」トリガー

このトリガーを使うことで、メッセージの「…→その他操作」からフローを実行し、選択したメッセージの情報を取得することができます。アダプティブカードを設定することもできますが今回は省略しています。

呼び出し元がチャットかチャネルかの判断

トリガーの出力にチームIDが含まれているかどうかを確認し、適切なURLを生成するように分岐させています。

チャネルメッセージの短いリンクの生成

標準チャネル メッセージの「リンクをコピー」で得られるメッセージURLは長いですが、このURLは"?"以降のパラメータをばっさりカットしても(ゲストユーザーの特定条件以外は)問題なくリンクとして機能します。(2023年5月現在)

カット後のURL文字列の構成は下記のようになります。

https://teams.microsoft.com/l/message/{チャネルID}/{メッセージID}
※ゲストユーザーに関する注意点

?以降のパラメーターを除去したURLは、テナント内のユーザーであればなにも問題ありませんが、ゲストユーザーの場合は若干の注意が必要です。

自社のTeamsアカウントとゲスト招待されたアカウントを切り替えて使っているようなケースでは、元の長いメッセージURLであれば自動的にテナントを切り替えてメッセージが表示されますが、短くしたURLの場合はTeamsで開いているテナント次第でメッセージURLは開けなくなります。

 

チャットメッセージのリンクの生成

チャットの場合は「…(その他オプション)」メニューに「リンクをコピー」はありません。しかし、WebブラウザのTeamsでチャットメッセージを検索してメッセージを開くと、こんなURLで検索結果からメッセージにダイレクトにアクセスしています。
このURLをフローで生成しています。

https://teams.microsoft.com/_?tenantId={テナントID}#/conversations/{会話ID}?messageId={メッセージID}&ctx=chat

 

生成したURL文字列を「Teams のタスクモジュールで応答」で表示

アダプティブカードはTeamsの開発者ポータルアプリで作成しました。

Input.Textのみのシンプルなアダプティブカードです。

{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.3",
    "body": [
        {
            "type": "Input.Text",
            "id": "txtURL",
            "label": "選択したメッセージのURL",
            "value": "@{variables('URL')}"
        }
    ]
}

 

実行イメージ

チャットまたは標準チャネルで「…(その他オプション)」→その他の操作にフローが表示されます。実行するとこのようにURLが生成されるので、選択してコピーすればOKです。

チャットでの動作イメージ

標準チャネルでの動作イメージ

 

共有チャネルのメッセージのURLも生成できました

共有チャネルの「… (その他オプション)」メニューには「リンクのコピー」はありませんが「その他の操作」がありますので今回のフローを呼び出す事が可能です。生成したURLで共有チャネルのメッセージが開けることを確認しています。(2023年5月現在)

 

感謝

このフローを作るにあたり参考にさせていただきました。感謝です!

Teamsの長いURLを短くする方法

kkamegawa.hatenablog.jp

 

チャットのメッセージのURLを取得するアイデア

おいしみさんのプライベートチャネルのメッセージURLを取得するアイデアのツイートが、チャットメッセージのリンク取得アプローチの大きなヒントになりました。

 

最後に

当初は標準チャネルのメッセージの短いURLを生成するだけの簡単なフローを作るつもりでしたが、結果的には標準チャネル・共有チャネル・チャットのメッセージURLが生成できるようになりました。

※.プライベートチャネルのメッセージには「その他の操作」がなくクラウドフローを呼び出せないので同じアプローチはできませんでした。

既に同様のフローを作られている方は多いかもしれませんが、個人的には利便性がかなり向上して満足です。

 

 

Teams チャネルのメッセージへの短いリンクURL & チャットのメッセージのリンクURLを取得する Power Automate クラウドフローV2【新しいチャネルエクスペリエンス対応版】」に続きます。

 

 

 

Teams のチャネルでピン留めされたメッセージの一覧をPower Automate クラウドフローで取得する

きっかけ

Teams チャットのピン留めは、画面一番上に固定表示されなかなか目立ちます。しかし、チャネルのピン留めされたメッセージは情報パネルを表示しないとアクセスできずなかなか気づきにくい状態です。
Power Automate クラウドフローでピン留めされたメッセージの情報が得られないか?と考え調べてみました。

 

Teamsコネクタのアクションではサポートされていない

まずはTeamsコネクタのアクションを確認しましたが、使えそうなアクションは見当たりません。

「メッセージを取得する」アクションでチャネルのメッセージを取得し、出力を確認しましたが使えそうな情報は持っていないようです。

 

Graph API でもサポートされていない

Graph API でも チャットのピン留めメッセージの取得についてはページがありますが、チャネルのピン留めに関しては見当たりません。

現時点ではサポートされていないと思われます。

learn.microsoft.com

 

文書化されていないTeams の ネイティブ API

こちらのページに興味深い内容が載っていました。

チャネルのメッセージをピン留めする手段を調べたページ(chatと書かれていますがchannel)でしたが、Graph API 非対応な機能の為、Webブラウザの開発者モードでブラウザ版Teamsのアクセス先URLを調べてTeams ネイティブのREST APIを探るというアプローチです。

※リンク先のページにも書かれていますが、このアプローチで実現できたとしても、文書化されていない Teams API を使用することになりMSのサポート対象外の使い方になりますので、運用環境では使用しない方が良さそうです。ここから先は興味本位で検証を進めます。

nanddeepnachanblogs.com

 

早速真似して調べてみました。

  1. EdgeでTeamsのチャネルにアクセスし(i)アイコンをクリックし情報パネルを展開しておく
  2. Edge の開発者モード→Networkを表示しておく
  3. 1.で開いた情報パネルの「ピン留めされた投稿」をクリック

すると、それっぽいURLが取得できました。

何度か試行しid部分の変化を確認しましたが

https://teams.microsoft.com/api/csa/amer/api/v1/teams/{一般チャネルのchannel id}/channels/{ピン留めの情報を取得したいchannel id}/pins

という形式でいけそうです。

 

Power Automate クラウドフローでアクセスしてみる

いつものSharePoint コネクタの「SharePoint  に HTTP 要求を送信します」アクションで試してみます。

すると取得に成功しました!

 

こんな感じです。

チャネルでピン留めされているメッセージのリストが取得できています!

 

ついでに確認してみた

チャネルのメッセージをピン留めする

https://teams.microsoft.com/api/csa/amer/api/v1/teams/{一般チャネルのchannel id}/channels/{メッセージがあるchannel id}/posts/{メッセージID}/pin

※メソッド:POST

 

チャネルのメッセージのピン止めを解除する

https://teams.microsoft.com/api/csa/amer/api/v1/teams/{一般チャネルのchannel id}/channels/{メッセージがあるchannel id}/posts/{メッセージID}/pin

※メソッド:DELETE

 

最後に

興味本位で試してみましたが、文書化されていない Teams ネイティブな? API を使用しています。MSのサポート対象外の使い方になりますので、運用環境では使用しない方が良いかと思います

Graph API でチャネルのピン留めメッセージの情報取得がサポートされるのを待ちましょう!

 

 

 

 

 

PowerAutomate クラウドフローでTeamsのチームからMicroosft365グループに関連づけられたSharePointサイトのURLを取得する

PowerAutomate クラウドフローを作っていて必要になったので、Teams のチームのIDから Micorosft365グループに接続されたSharePointチームサイトのURLを取得する手順を検証してみました。

 

 

×:Teams コネクタの各アクションではサイトのURLは取得できない

まずTeamsコネクタの「チームの取得」アクション。

こちらの出力には残念ながらサイトURLは含まれていません。

 

△:Office 365 Groupsコネクタのアクションで取得できるが難あり

SharePointサイトのアドレスの既定値は、Microsoft365グループのメールアドレスの@前と一致します。

そこで「自分が所有および所属しているグループの一覧」アクションの出力に含まれる"mailNickName"の値からサイトURLを作る事ができます。

 

フロー

「自分が所有および所属しているグループの一覧」アクションの出力はアレイになっていますので、グループID(teamId)でフィルターしてMicrosoft365グループのmailNickNameを取得しています。

実行結果



【難点】SharePointサイトのアドレスを編集した後は一致しなくなる

ただし、SharePointサイトのアドレスは作成後の変更する事ができます。変更後はmailNickNameの値とは一致しなくなります。

 

○:Graph API で何とかする

標準アクションでできない時は「HTTP要求を送信する」アクションでAPIを使って解決です。

learn.microsoft.com

 

https://graph.microsoft.com/v1.0/groups/{griupId}/sites/root

 

ドキュメントページにこのように書かれており正攻法なアプローチのようです。

 

フロー

 

実行結果

フローを実行してみると、APIを実行した出力に"webUrl"でSharePointサイトのURLが取得できています。

 

注意点

SharePointサイトのアドレスを変更した後しばらくはこのAPI呼び出しはエラーとなりました。変更後は時間をおいて試してみてください。



 

最後に

以上、Teams のチームからMicrosoft365グループに関連づけられているSharePointサイトのURLを取得してみる実験でした。

APIを利用するのが最も確実ですが、難点を許容できるのであればmailNicknameからのアプローチも手軽でありかもしれません。

 

VMware Horizon (VDI) 環境でMicrosoft Teams のメディア最適化 機能を有効化する

 

(5/22追記)メディア最適化オフでのTeamsの利用はMSの動作保証外になっていました

はじめに

Teams の(特に会議周りの機能)はCPUやGPUリソースを多く必要とするため、所謂VDI環境は通常のPC環境とは区別され利用できる機能が制限されています。ハードウェアリソースを共有するVDIの仕組み上致し方ないとこではあるのですが、この制限を緩和する為の機能がVDI各社製品で提供されています。

VMware Horizon の場合は、「Teams メディア最適化」と呼ばれます。音声や画像、画面共有などマルチメディア処理はローカルPC側で処理させる(オフロード)ことで、仮想デスクトップ側のCPU使用率を大幅に軽減してくれます。それと同時にTeamsアプリの利用可能な機能にも大きく差異が発生します。

 

1.Teams メディア最適化 の前提条件

VMware Horizon の対応するバージョンを利用している

  • サーバー側バージョン
  • クライアントバージョン
    • Horizon7 系であれば5.5.3
    • Horizon8

Teams のメディア最適化のシステム要件を見たしている

VMware社 WebサイトのMicrosoft Teams のメディア最適化のシステム要件にまとめられていますが、今どきの環境であればほぼOKでしょう。

ネットワーク的に問題ないかは要確認

システム要件では触れられていませんが、ネットワーク設計的に耐えられるかは要確認です。Teamsの映像・音声トラフィックは、Teamsメディア最適化無効時はHorizon Server から発生してますが、Teamsメディア最適化を有効にするとクライアントPCから直接トラフィックが発生するように変わります。複数拠点を閉域網で接続して利用している場合、各拠点の回線を圧迫する可能性があります。LBO(ローカルブレイクアウト)等検討が必要かもしれません。その辺りは専門の詳しい人に相談しましょう。

 

2.設定してみる

2-1.VMware Horizon Client のアップグレード(必要な場合)

上記のバージョンに満たない場合VMwareのサイトからクライアントをダウンロードしてインストールします。

※2023年4月時点の最新Ver2303

https://customerconnect.vmware.com/jp/downloads/details?downloadGroup=CART24FQ1_ANDRD_X8632-2303&productId=1027

 

2-2.Horizo​​n Agent を設定する

仮想マシンのHorizon Agentの設定を行います。

正規の手段としては、グループポリシーエディターでオンにします。

[コンピューターの構成] > [管理用テンプレート] > [VMware View Agent の構成] > [VMware HTML5 機能] > [VMware WebRTC リダイレクト機能] > [ Microsoft Teams のメディア最適化を有効にする]

※HorizonAgent 2212以降は自動的にこのGPOが設定されるようです。

※テスト的に実施する場合はレジストリエントリを直接追加してもOKです。

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\VMware, Inc.\VMware WebRTCRedir]
"teamsEnabled"=dword:00000001

 

 

仮想マシンの再起動をすれば設定完了です。

Teams 「…」→情報→バージョンを確認し「VMware Media は最適化されています」と表示されればOKです。

表示されない場合は、タスクトレイからTeamsを完全に終了した後で

%APPDATA%\Microsoft\Teams フォルダを削除してTeamsを再起動してみてください。

 

 

3.注意したいポイント

VMware Horizon Client のバージョンによって利用可能なTeamsの機能は変わります

利用可能となる機能とHorizon Client のバージョンの対応はこちらのURLにまとめられています。Horizon7系のクライアントでは最低限の機能しか利用できません。

kb.vmware.com

 

Teams アプリのバージョンアップに追従するためVMware Horizon Clientのバージョンアップが必要になります

Teams の新機能への対応のいくつかは VMware Horizon Client のバージョンアップで対応されます。Horizon Client のバージョンを固定して運用されている場合には、そのポリシーの見直しが必要になります。

必ずしもTeamsをmsi版でセットアップする必要はない

MSサイトのドキュメントにはmsi版インストーラでセットアップすることが説明されています。VDIでの仮想デスクトップの展開を想定した案内のようで、Teamsメディア最適化の有効化に必須というものではないようです。通常exe版インストーラでセットアップしてもTeamsメディア最適化は利用可能でした。

会議UIの更新が目的の場合はかならずしもTeamsメディア最適化が必須ではなくなる

こちらの記事にしていますが、Teamsメディア最適化オフの環境でも、新しい会議UIが導入されつつあるようです。Teamsの新しい会議UIが目的の場合は展開されるのを待つのも一つの手段です。

※"Teamsメディア最適化オン"の状態では利用不可能な機能まで利用できるようになっています。

 

sasami-axis.hatenablog.com

(5/22追記)メディア最適化オフでのTeamsの利用はMSの動作保証外

MSサポートへの別件の問い合わせの中で発覚したのですが、2023年5月時点ではTeamsメディア最適化オンでない場合は動作保証外という扱いなことが判明しました。

根拠としてはこちらのURLを紹介いただきましたが、最適化使えますよという文面でこれが必須と読み取れるかというと...

メディア最適化オフで使っている環境の方はご注意ください

learn.microsoft.com

 

Teamsメディア最適化を一時的にオフにできる?

VMware Horizon Client の「⚙設定」→「通話と共有」→「WebRTCベース アプリケーションのメディア最適化」をオフにすれば一時的にオフにできるように一見見えます。

しかし、実際試したところ挙動に差異がありました。

この設定をオフにした後に、Teamsのバージョン情報を確認すると「VMware Mediaが接続されていません」と表示されます。これにより最適化オフになっていると判断できますが、完全オフの状態とは表示が異なり状態も異なるのではと推測できます。

「WebRTCベース アプリケーションのメディア最適化」をオフ

Teamsメディア最適化導入前のバージョン表記

2023年5月現在、私が気付いたところでは下記の動作の差異が確認できました。

  • 「WebRTCベース アプリケーションのメディア最適化」をオフの状態
    • → Teams パブリックプレビュー でも会議UIは旧UIのまま
  • 「2-2.Horizo​​n Agent を設定する」のレジストリエントリを削除
    • → Teams パブリックプレビュー で会議UIは新UIに替わる

その他にも若干異なる動作をする可能性があるかもしれません。

最適化をオフにする場合は、「2-2.Horizo​​n Agent を設定する」のGPOから除外しレジストリ値を削除する対応をした方がよさそうです。

 

参考にしたドキュメント

docs.vmware.com

techzone.vmware.com

learn.microsoft.com

最後に

この記事はVMware Horzionの管理者でないTeams管理者目線での検証結果の記録の為、VMware Horizonのサーバー側については触れていません。

逆にいうと物理PCと仮想マシンに管理者アクセスできればVMware Horizon の管理者でなくとも有効化できてしまいます。

 

Microsoft Designer Compact Keyboard がMacでは英語配列で認識されてしまう問題に対処してみた

今回はマイクロソフトのデバイスのお話です。
私はプライベートやテレワークでは Microsoft Compact Designer Keyboard というBluetoothキーボードを使っています。

  • テンキーレスでコンパクト
  • キーピッチ19mmと標準的なサイズを維持
  • 打鍵音が割と静か
  • 3台の機器と接続し切り替えて使用できる
  • JIS配列で無変換・変換キーの代わりにIMEのオンオフが出来る「A」キー・「あ」キー(Mac互換な操作)
  • バッテリーがボタン型電池 (C2032) 4個で長持ち(公称 最大36ヶ月)

といった特徴を持っており、コンパクトなキーボード好きにはかなりおすすめできるキーボードです。

手持ちのコンパクトなキーボードとサイズ比較



Macでペアリングすると…

そんな  Microsoft Compact Designer Keyboard  ですがMacで使用する場合は1点だけ問題があります。普通にMacにペアリングしただけでは日本語配列キーボードなのにMacでは英語配列キーボードとして認識されてしまいます。

英語配列として認識されていると、下記のように記号のキーが表示と異なるものが入力される状態になります。

  • Shift+2 を押下→ @
  • @ を押下→ [

Macは対応OSではないので仕方ないのですが、いずれかの方法で解決する事ができます。

解決方法

1.設定で解決する

  1. 🍎→システム設定
  2. キーボード→「キーボードの種類を変更」ボタンをクリック
  3. 表示されるとおりに操作した後に"JIS配列"を選択する
【注意】複数のキーボードが接続されていると他のキーボードの設定になってしまう場合も

複数のWindowsキーボードを接続している場合、「キーボードの種類を変更」ボタンをクリックした際に他のキーボードの設定になってしまう場合があります。キーボード設定アシスタントが表示された時に「製造元"Microsoft"」となっていることを確認します。他のWindowsキーボードが表示された場合一旦は接続解除しましょう。設定後は接続しても問題ありません。

【注意】Logicool の Unifying レシーバーはキーボードを接続しなくてもキーボード扱いされる

Logicool の Unifying レシーバーはキーボードを接続しなくてもキーボード扱いされるようです。私はこれに気づかずに存在しないLogicool キーボードに悩まされました。Unifyingレシーバーを外せばOKです。設定後は接続しても問題ありません。



2. Karabiner-Elements をインストールする

基本的には1.の設定で解決できるはずですが、上記の設定で解決できなかった場合は、キーカスタマイズソフトの Karabiner-Elements をインストールし実行する事でも解決できます。特に設定は必要ありません。起動していればJIS配列で入力できるようになります。

 

karabiner-elements.pqrs.org

 

 

いずれかの対処をしてしまえば問題なくつかえますので、Macでもおすすめのキーボードです。

 

リアルタイムで投票を可視化できる Forms のプレゼンテーション 機能を試してみた

※(2023/5/3追記) 選択肢以外の入力項目の場合のプレゼンテーションでの表示も確認しました。

 

対象指定リリースのテナントでFormsで作業をしていたところ「プレゼンテーション」という項目が表示されていました。

 

 

メッセージセンターやMicrosoft365ロードマップにも該当するものはみつけられず、Formsのヘルプページで検索してもこの機能に関する情報が見つからないのですが、最近追加された機能のようです。

こちらはFormsの回答結果をリアルタイムに表示する機能です。

Teams会議のPolls で投票をするとリアルタイムで結果が表示されますが、同様の機能がFormsに追加されたイメージです。

Teams 会議の Polls で投票

早速試してみる

このようなフォームを作成しました。

「プレゼンテーション」をクリックするとこんな画面に替わります。

この画面で待機して、投票をしてもらうと...

こんな感じでリアルタイムに投票状況を表示できます。

 

気になったところ

画像付き選択肢を使うと見た目は華やかでいい感じですが、画像サイズが大きいと%表示のバーが隠れてしまう現象を確認しました。ブラウザウィンドウの表示倍率を縮小することで回避できますが、表示される文字がとても小さくなってしまいます。このあたりは今後の改善に期待です。

 

選択肢以外の入力項目の場合は

テキスト

ワードクラウドで表示されます

評価

日付

ランキング

リッカート

ファイルのアップロード

ファイル名(アップロードした元ファイル名_ユーザ名)が表示される

Net Promoter Score

最後に

オフライン会議でもオンライン会議でもライブイベントでも、Formsだけでリアルタイムに投票を可視化できるのは便利ですね。

Forms プレゼンテーションを画面共有で表示することで投票に注目させることができますので、プレゼン中の使い方でPollsともすみ分けができそうです。

 

 

Box.com にあるExcelブックを Power Auotmate クラウドフロー の Excel Online (Business) コネクタのアクションで処理する

このフローの目的

Microsoft365 と オンラインストレージ Box.com を併用していると、Box上にあるExcelブックをPowerAutomateからアクセスして処理したいというケースがあるかと思います。しかし、Excel Online (Business) コネクタは SharePoint か OneDrive for Business(以降ODfBと記載) 上のファイルしか扱うことができません。
そこをなんとかしてみようという工夫です。

フロー全体図

フロー解説

フロー開始時にBoxからファイルコンテンツを取得し、ODfB にファイルを作成しているだけです。あとはOD4B側の一時ファイルをExcel Online (Business) コネクタで処理すればOKです。

今回のフロー内でDo Until ループで6分待って削除を試みるという手段もありますが、API要求を無駄に使ってしまうので別フローでの削除がおすすめです。 (Power Automate クラウドフローには 待機(Wait) がない)

2023/5/8訂正
スケジュールコネクタに待ち時間アクションがありました!こちらを使えば待機することもできそうです。

ファイルを更新する事も可能

上記のフローでは読み込みのみですが、Box上のファイルを更新する事も可能です。
上記フローと同じ手順で一時ファイルを作成し、一時ファイルを更新した後に↓のようにBox側に書き戻すだけです。
ただし、Boxコネクタにはファイルをロックするアクションが用意されていません。無条件に上書きになることをご注意ください。

Boxコネクタ-ファイルの作成アクションはピッカーは使わない

Boxコネクタのファイルの作成アクションを利用する際には、ピッカーでフォルダを選択しないように注意しましょう。
Boxコネクタの制限事項で日本語環境では正常に動作しなくなります。詳しくはこちらにまとめてあります。 qiita.com