はじめに
定期実行のフローはあったが日時指定で実行できるようなフローがなかったため。
予約送信に限らず不定期な日時指定実行にも使えると思います
作る
方針
予定日時まで待機して、待機が終わったら送信します。
並列処理にしたのは並列処理使ってみたかったからです。
トリガーをつくる
トリガーの選択
今回は手動で実行させたいのでインスタントクラウドフローを構築する
>手動でフロートをトリガーします
を選びます。
トリガーの入力
トリガーの設定をします。
入力の追加から必要な項目を追加してください。
メンションはしたいときとしたくない時があるので右の…からフィールドをオプションにします。
Teamsに送る部分を作る
アクションの選択
+ 新しいステップ
から開いたダイアログの検索窓にTeamsを入力してアクション
の中からチャットまたはチャネルでメッセージを投稿する(プレイビュー)
を選択します
アクションの設定
連携するかどうか聞かれた場合は許可します。
下矢印を選択すると自動で自分のアクセスできるTeamが表示されるのでそれを選びましょう。
ここまで出来たら一度保存し、実行してみます。
メッセージの送信ができました。
実行時に入力したメッセージを送信する
動的なコンテンツ
タブを選択して下のボックスにトリガー作成時の項目名を入力選択します。
これで保存し実行すると、実行時に指定したメッセージがTeamsに送信されます。
宛先ユーザーの取得とメンションつけての送信
アクションの追加
メッセージのアクションを作った時と同じように、今回はユーザープロフィールの取得(V2)
を選択します
動的なコンテンツから、トリガー作成時に指定したアドレスを入力する項目名を検索し、選択します。
メンションする
メッセージのアクションを開き、メッセージをHTML入力できるようにします。
動的コンテンツからID
を取得し<at></at>
で囲みます。
これで実行すればメンションつけて送信することが可能です
メンションつけない場合の分岐
アクションの追加
メンションつけたくない場合、メッセージ送信するときに存在しないID
を取得しに行ってエラー吐いてしまうので、メンションつける時とそうではない時の分岐をいれます。
メッセージ送信の前とユーザープロフィールの取得の前に条件アクションをいれます。
アクションの設定
トリガーでメンションするかしないかのスイッチを用意したので、それを条件にします。
スイッチは←がoff(false)で、→がon(true)なので、メンションする
を選択したときtrueになります。
それぞれの分岐に同じ条件を指定してください。
ユーザープロフィールの取得は、はいのほうにドラッグしてください。
宛先ありメッセージもはいのほうにドラッグし、いいえのほうには宛先無しメッセージのアクションを追加します
待機時間の設定
並列分岐の追加をします。
入力した日付の形式では日時の計算ができないのでフォーマット変換します
アクションの追加
アクションの設定
値は式
タブを選択してticks(formatDateTime(triggerBody()['text'],'yyyy-MM-dd hh:mm'))
を入力してOKを押します。
ticks()
1月1日 0001 12:00:00 午前0時から指定したタイムスタンプまでの100ナノ秒間隔の値を返却します
formatDateTime()
StringからDate型にフォーマットしてくれます
triggerBody()['text']
トリガーで入力した値です
トリガーのコードのプレイビューから
コードのプレービュー
{
"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"
]
}
}
}
同様に、現在日時(now)と待ち時間(waitMin)の変数を作ります
現在日時の値:ticks(addHours(utcNow(), 9, 'yyyy/MM/dd HH:mm'))
待ち時間の値:div(sub(variables('planDate'),variables('now')),600000000)
を設定します。
待ち時間は(予定日時-現在日時)/600000000で単位分に直してます
待機の設定
アクションの追加
アクションの設定
最初に作ったメッセージの分岐が、上のほうにあると思うので、待ち時間の下にドラッグしてきます。
まとめ
これで予約送信が可能になりました👏👏👏👏
が、例外起きても投げっぱなしなので、このままだとメールアドレス間違えて入力したり日付のフォーマット間違えてても気づけないです。
気が向いたら例外処理のところも書きます