MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Microsoft Teams への予約投稿を Power Automate と Adaptive Cards でつくる

更新情報

[2021/06/07] タイムゾーン変換に関して仕様変更らしき箇所を補足しました

はじめに

最近では予約XXがいろいろ提供されていますね。Twitterでの予約ツイート、Outlookでの予約送信などなど。でもTeamsにはない!!

ということで今回はTeamsのメッセージ投稿を予約 (スケジュール投稿) できるようにします。

しかも投稿したいチャンネル上で、Teamsの画面内で完結するようにしました。もちろん、ノーコードで。

全体像

利用するのは Power Automate の新しいTeamsトリガー、『選択したメッセージの場合』です。このアクション、Adaptive Card を利用して簡単な入力ができます。

このAdaptive Card を利用すると選択したメッセージ情報以外に、カード上の入力内容をフローで利用できます。 今回のケースでは予約投稿するメッセージの件名および本文、投稿する日時をユーザーが入力できるようにしています。

予約で投稿するメッセージの送信先は選択したメッセージ情報から取得することにしました。

フローの全体としては以下のようになります。

f:id:mofumofu_dance:20200815003234p:plain
フローの全体像

以下では各ステップの解説をしていきます。

1. トリガー:選択したメッセージの場合

このトリガーではオプションとして設定できる Adaptive Cardを利用します。

Adaptive Cardの作成は、Power Automateの組み込みのカードデザイナーが利用できます。ドラッグ&ドロップとプロパティの設定で以下のようなカードを作成してください。トリガーの設定はこれだけです。

f:id:mofumofu_dance:20200815003718p:plain
トリガーで利用するAdaptive Card

※Adaptive Card デザイナーの利用方法は こちらの入門書 をご覧ください。

2. タイムゾーンの変換

予約投稿の日時までは『延期期限 (Delay until)』のアクションを利用しますが、このアクションの入力はUTCでの指定です。 一方で、Adaptive Cardで指定するのは日本の標準時の想定なので、タイムゾーンを変換する必要があります。

Adaptive Cardから取得できる日付 (date) は yyyy-mm-dd の形式で、また時間 (time) は HH:mm (24時間) でとれます。これをConcat関数で文字列の結合をし基準時間とします。

変換元のタイムゾーン はUTC+09:00、変換先のタイムゾーンはUTCです。

f:id:mofumofu_dance:20200815004532p:plain

【追記】

どうもタイムゾーンの変換アクションでは書式設定文字列を設定しないとアクションがエラーになるようです。

カスタム値で yyyy-MM-ddTHH:mm:ssZ と設定してください。

f:id:mofumofu_dance:20210607001631p:plain

3. 延期期限

延期期限の設定は単純です。タイムゾーンの変換の結果を挿入します。 f:id:mofumofu_dance:20200815004927p:plain

4. メッセージを投稿する

最後のアクションは、Teamsコネクターの『メッセージを投稿する (V3)』です。

投稿先のチームとチャンネルの指定は、トリガーから取得します。 (メッセージを選択したのと同じチーム・チャンネルに予約投稿する)

通常はドロップダウンからの選択ですが、ここではカスタム値を選び、トリガーの結果の中のチームID を指定します。 チャンネルも同様にカスタム値として、トリガーの結果のチャンネルIDを指定します。

f:id:mofumofu_dance:20200815010450p:plain
チームとチャンネルの指定はカスタム値から

メッセージ本文ですが、Adaptive Cardの入力は普通のテキストです。改行コードなどはそのままTeamsのメッセージ本文に挿入しても無視されます。

これを少しだけ改善するために、トリガーの結果の本文 (content) の中の改行コードを<br>で置換します。

f:id:mofumofu_dance:20200815010519p:plain
改行コードをHTMLの改行に変換

replace(triggerBody()?['entity']?['cardOutputs']?['content'], decodeUriComponent('%0A'),'<br>')

以上で設定は完了です。 実際の操作は以下のように、予約投稿を行いたいチャンネル内の適当なメッセージを選択し、その他の操作から予約メッセージの情報を入力していきます。 f:id:mofumofu_dance:20200815012655p:plain

まとめ

今回はPower Automateに先日追加された 『選択されたメッセージに対して』のトリガーと、Adaptive Cardを利用して、Teamsチャンネルへの予約投稿機能を作ってみました。

ここで紹介したように、メッセージそのものへのアクションだけでなく、その上の階層、チームやチャンネルに対するアクションもこのトリガーをきっかけにして自動実行することができます。

ぜひTeams x Power Automateの組み合わせでより快適なコミュニケーションを図ってみてください。