7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Power AutomateでTeamsの予約送信フローを作る

Last updated at Posted at 2021-06-03

はじめに

定期実行のフローはあったが日時指定で実行できるようなフローがなかったため。
予約送信に限らず不定期な日時指定実行にも使えると思います

作る

方針

無題のプレゼンテーション.png
予定日時まで待機して、待機が終わったら送信します。
並列処理にしたのは並列処理使ってみたかったからです。

トリガーをつくる

トリガーの選択

フローの管理 _ Microsoft Power Automate - Google Chrome 2021_06_03 20_56_38.png
今回は手動で実行させたいのでインスタントクラウドフローを構築する>手動でフロートをトリガーしますを選びます。

トリガーの入力

フローの管理 _ Microsoft Power Automate - Google Chrome 2021_06_03 21_04_58.png
トリガーの設定をします。
入力の追加から必要な項目を追加してください。
メンションはしたいときとしたくない時があるので右の…からフィールドをオプションにします。

 Teamsに送る部分を作る

アクションの選択

フローの作成 _ Power Automate - Google Chrome 2021_06_03 21_10_10.png
+ 新しいステップから開いたダイアログの検索窓にTeamsを入力してアクションの中からチャットまたはチャネルでメッセージを投稿する(プレイビュー)を選択します

アクションの設定

フローの作成 _ Power Automate - Google Chrome 2021_06_03 21_14_55.png
連携するかどうか聞かれた場合は許可します。
下矢印を選択すると自動で自分のアクセスできるTeamが表示されるのでそれを選びましょう。
ここまで出来たら一度保存し、実行してみます。
一般 (testTeam) _ Microsoft Teams 2021_06_03 21_20_13.png
メッセージの送信ができました。

実行時に入力したメッセージを送信する

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_24_54.png
動的なコンテンツタブを選択して下のボックスにトリガー作成時の項目名を入力選択します。
これで保存し実行すると、実行時に指定したメッセージがTeamsに送信されます。

宛先ユーザーの取得とメンションつけての送信

アクションの追加

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_29_42.png
メッセージ送信の前にアクションの追加をします

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_32_15.png
メッセージのアクションを作った時と同じように、今回はユーザープロフィールの取得(V2)を選択します

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_36_33.png
動的なコンテンツから、トリガー作成時に指定したアドレスを入力する項目名を検索し、選択します。

メンションする

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_38_12.png

メッセージのアクションを開き、メッセージをHTML入力できるようにします。
動的コンテンツからIDを取得し<at></at>で囲みます。
これで実行すればメンションつけて送信することが可能です

メンションつけない場合の分岐

アクションの追加

メンションつけたくない場合、メッセージ送信するときに存在しないIDを取得しに行ってエラー吐いてしまうので、メンションつける時とそうではない時の分岐をいれます。
フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_18_36.png

メッセージ送信の前とユーザープロフィールの取得の前に条件アクションをいれます。

アクションの設定

フローの編集 _ Power Automate - Google Chrome 2021_06_03 21_48_30.png
トリガーでメンションするかしないかのスイッチを用意したので、それを条件にします。
スイッチは←がoff(false)で、→がon(true)なので、メンションするを選択したときtrueになります。
それぞれの分岐に同じ条件を指定してください。

フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_21_54.png
ユーザープロフィールの取得は、はいのほうにドラッグしてください。
フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_22_39.png
宛先ありメッセージもはいのほうにドラッグし、いいえのほうには宛先無しメッセージのアクションを追加します

待機時間の設定

フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_27_24.png

並列分岐の追加をします。

入力した日付の形式では日時の計算ができないのでフォーマット変換します

アクションの追加

フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_32_24.png
変数の初期化を選択します。

アクションの設定

フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_36_03.png
値はタブを選択してticks(formatDateTime(triggerBody()['text'],'yyyy-MM-dd hh:mm'))を入力してOKを押します。

ticks()
1月1日 0001 12:00:00 午前0時から指定したタイムスタンプまでの100ナノ秒間隔の値を返却します
formatDateTime()
StringからDate型にフォーマットしてくれます
triggerBody()['text']
トリガーで入力した値です
フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_42_07.png
トリガーのコードのプレイビューから

コードのプレービュー
{
    "kind": "Button",
    "inputs": {
        "schema": {
            "type": "object",
            "properties": {
                "text": {
                    "title": "予定日時(yyyy-MM-dd hh:mm)",
                    "type": "string",
                    "x-ms-dynamically-added": true,
                    "description": "yyyy-MM-dd hh:mm",
                    "x-ms-content-hint": "TEXT"
                },
                "text_1": {
                    "title": "投稿メッセージ",
                    "type": "string",
                    "x-ms-dynamically-added": true,
                    "description": "メッセージ",
                    "x-ms-content-hint": "TEXT"
                },
                "boolean": {
                    "title": "メンション::しない/する",
                    "type": "boolean",
                    "x-ms-dynamically-added": true,
                    "description": "[はい] または [いいえ] を選択してください",
                    "x-ms-content-hint": "BOOLEAN"
                },
                "text_2": {
                    "title": "アドレス",
                    "type": "string",
                    "x-ms-dynamically-added": true,
                    "description": "メンション先のメールアドレスを入力してください",
                    "x-ms-content-hint": "TEXT"
                }
            },
            "required": [
                "text",
                "text_1",
                "boolean"
            ]
        }
    }
}
を見るとjson形式のコードが見えます。 今回は予定日時がほしいので、そこのブロックのキー値textを取得してます。

同様に、現在日時(now)と待ち時間(waitMin)の変数を作ります
フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_53_35.png

現在日時の値:ticks(addHours(utcNow(), 9, 'yyyy/MM/dd HH:mm'))
待ち時間の値:div(sub(variables('planDate'),variables('now')),600000000)
を設定します。
待ち時間は(予定日時-現在日時)/600000000で単位分に直してます

待機の設定

フローの編集 _ Power Automate - Google Chrome 2021_06_03 23_03_52.png

アクションの追加

フローの編集 _ Power Automate - Google Chrome 2021_06_03 22_59_32.png
中央にある新しいステップをクリックし遅延を選択します
フローの編集 _ Power Automate - Google Chrome 2021_06_03 23_01_55.png

アクションの設定

フローの編集 _ Power Automate - Google Chrome 2021_06_03 23_03_52.png
カウントには上で計算した待ち時間
単位は分に設定します。

フローの編集 _ Power Automate - Google Chrome 2021_06_03 23_06_24.png
最初に作ったメッセージの分岐が、上のほうにあると思うので、待ち時間の下にドラッグしてきます。

まとめ

これで予約送信が可能になりました👏👏👏👏
が、例外起きても投げっぱなしなので、このままだとメールアドレス間違えて入力したり日付のフォーマット間違えてても気づけないです。
気が向いたら例外処理のところも書きます

7
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?