きっかけ
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を短くする方法
チャットのメッセージのURLを取得するアイデア
おいしみさんのプライベートチャネルのメッセージURLを取得するアイデアのツイートが、チャットメッセージのリンク取得アプローチの大きなヒントになりました。
チャネルをブラウザで開く、Ctrl+Fでメッセージを検索、検索結果をクリックしたときのURLを取得、不要なパラメータを削除
— おいしみ (@ksgiksg) 2023年5月18日
でリンク取れます!(面倒
最後に
当初は標準チャネルのメッセージの短いURLを生成するだけの簡単なフローを作るつもりでしたが、結果的には標準チャネル・共有チャネル・チャットのメッセージURLが生成できるようになりました。
※.プライベートチャネルのメッセージには「その他の操作」がなくクラウドフローを呼び出せないので同じアプローチはできませんでした。
既に同様のフローを作られている方は多いかもしれませんが、個人的には利便性がかなり向上して満足です。
「Teams チャネルのメッセージへの短いリンクURL & チャットのメッセージのリンクURLを取得する Power Automate クラウドフローV2【新しいチャネルエクスペリエンス対応版】」に続きます。