Power Automate で Microsoft Teams の予約投稿を試した
経緯
定時後にふと「○○さんにメンションして連絡入れておきたい」ってなったらどうします?
「夜中でもなんでもメンションして送ってよし!相手は受信して反応しなければいいだけ」
とか、「定時後に連絡するな」とか、色々と意見は分かれると思いますが、
私は Microsoft Teams での投稿を予約したくて、Power Apps で作っていました
※PowerApps で作りかけていたやつ(返答ができてなかった)
別のことを調べている時に、Power Automate でやってのけている方がいたので、
それをインスパイヤーしながら、自分で使うように作ってみました
参考サイト:Microsoft Teams への予約投稿を Power Automate と Adaptive Cards でつくる
ハッキリ言って長いですが、作るとそんなに時間かからないです
(記事書くのは数日かかってますが…)
前準備
Microsoft 365 の環境はあるものとします
Power Automate の構築
アダプティブカードでの投稿作成画面
-
[ マイフロー ] -> [ + 新しいフロー ] -> [ インスタントクラウドフロー ] を選択
-
フロー名を入力し、トリガーに Microsoft Teams の [選択したメッセージに対して ] を選択して、[ 作成 ] をクリック
-
[ アダプティブカードの作成 ] をクリック
-
[ New card ] -> [ Blank card ] をクリック
-
Input.ChoiceSet を AdaptiveCard にドラッグ・アンド・ドロップし
-
Input.Text を AdaptiveCard にドラッグ・アンド・ドロップし
-
Input.Text を AdaptiveCard にドラッグ・アンド・ドロップし
-
Input.ChoiceSet を AdaptiveCard にドラッグ・アンド・ドロップし
-
ColumnSet を AdaptiveCard にドラッグ・アンド・ドロップし、[ Add a column ] を 2 回クリック
-
Input.Date を AdaptiveCard にドラッグ・アンド・ドロップし
-
Input.Time を AdaptiveCard にドラッグ・アンド・ドロップし
-
[ カードの保存 ] をクリック
以上がアダプティブカードでの登録画面でした
※アダプティブカードでの投稿作成画面での妥協点
- 投稿タイプが変更のときだけタイトルの入力を表示したかった
- 本文の入力はリッチテキストがよかったな…
- 必須入力が設定できない
- 恐らく AdaptiveCard Ver1.3 からしかできない
- 通知先はチームに参加している人を動的にとりたい
- とりあえずアドレス帳として Input.ChoiceSet に登録する方法で逃げた
- 予約日時に動的に初期値を入れたかった
formatDateTime(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time'),'yyyy-MM-dd')
と入れて初期値がセットできるかと思ったんだけど…
もっといい方法ないかな…
変数の初期化
アダプティブカードで入力した値が、判定などで使えなかったりしたので、
必要に応じて変数に移す
- [ + 新しいステップ ] -> [ 組み込み ] タブ -> [ 変数 ] -> [ 変数を初期化する ] を選択し
-
mention でチェックを入れたメールアドレスを <at></at> で囲んだ文字列としてセットするための変数を初期化する
変数の初期化フェーズはここまでとなります
通知先が設定されているときの処理
通知先が設定されているとき、各アドレスを <at>~</at>
で囲む必要があります
変数 Mention に値が入っていたら、各アドレスを <at>~</at>
で囲み、
変数 PostMention にセットします
※Input.ChoiceSet で複数選択されているとき、各値は半角カンマで区切られています
- [ + 新しいステップ ] -> [ 組み込み ] タブ -> [ コントロール ] -> [ 条件 ] を選択
-
左辺の 値の選択 にカーソルを移し、表示される 式 タブをクリック
-
empty()
のカッコの中にカーソルを持ってきて、動的なコンテンツ タブをクリックし、変数 Mention をクリックして、 [ OK ] をクリック
-
はいの場合 の [ アクションの追加 ] -> [ 組み込み ] タブ -> [ 変数 ] -> [ 変数の設定 ] を選択し
-
値の入力欄の <at></at> のタグ間にカーソルを移動し
-
replace()
のカッコ内の先頭部分(第一引数部分)にカーソルを持ってきて、動的なコンテンツ タブをクリックし、変数 Mention をクリックして、 [ OK ] をクリック
これで通知先にチェックが入れられているとき、変数 PostMention にメンション用のタグがセットされました
予約した時間まで処理を待機させる
アダプティブカードで設定した予約日時まで、処理を待機させます
- [ + 新しいステップ ] -> [ 組み込み ] タブ -> [ 日時 ] -> [ タイムゾーンの変換 ] を選択
- [ + 新しいステップ ] -> [ 組み込み ] タブ -> [ スケジュール ] -> [ 延期期限 ] を選択
これで設定した時間まで待機するようになります
返信、または、新規投稿を行います
最後に投稿を行います
- [ + 新しいステップ ] -> [ 組み込み ] タブ -> [ コントロール ] -> [ 条件 ] を選択
-
はいの場合 の [ アクションの追加 ] -> [ 標準 ] タブ -> [ Microsoft Teams ] -> [ メッセージの返信の投稿(V2) ] を選択し
-
返信に選択した PostMention の後ろにカーソルを持っていき
-
いいえの場合 の [ アクションの追加 ] -> [ 標準 ] タブ -> [ Microsoft Teams ] -> [ メッセージを投稿する(V3) ] を選択し、[ 詳細オプションを表示する ] をクリック
利用方法
スレッドの最初の投稿の右にある ・・・ をクリックし、[ その他の操作 ] にマウスカーソルを当てると、作成したフローが出てくるのでクリックする
アダプティブカードが表示されるので、適宜入力して [ Submit ] をクリックすると予約完了
今の所の問題点
考察
Power Automate で Adaptive Cards を使って作ってみて、
PowerApps で作ると構築に手間は掛かりそうだけど、メリットはこういうのがありそう
- Team に参加している人リストを動的に作れる (メンション用)
- リッチテキストが使える
ディスカッション
コメント一覧
まだ、コメントがありません