テンプレートの「メッセージをスケジュールする」をカスタマイズして、作成できます。
この記事は、Power Automateで自動化するフローの作成手順になります。
フローが長くなるので、JSON、式をこの記事からコピーして作成してください(アクション名は、同じにしないとフローはエラーになります)。
※細かい式の説明などはありませんが、動画とブログでTeamsに指定日時(メンションあり)に投稿する自動化を作成できます。
本記事の内容
- 日付、時間を決めてスケジュールする(指定日時で投稿する)
- TeamsにWorkflowsを追加するフロー作成まで手順
- 指定日時自動投稿(タイマーメッセージ投稿)を作成
式、JSON、HTMLをコピーすることができるので、Power Automateが得意でなくても作ることができます。
200円なので購入お願いします。
-
Teams予約投稿(同時メンション) 〜Teamsに無い機能を作れます〜|越後 龍之介
note.com
※Office365Groupsの「HTTP要求を送信します」のアクションは削除されていますが、2024/5/7現在、Teams「Microsoft Graph HTTP 要求を送信する」で代替することができます。
日付、時間を決めてスケジュールする(指定日時で投稿する)
Teamsの投稿は、チャット、グループチャット、チームの3つあります。
できること- 30日以内の指定日時でのメッセージ投稿
- メンション(個人、チーム、チャネル)
- 件名、メッセージ、URLを投稿(件名は、チーム投稿のみ)
できないこと
- 30日を超える指定日時でのメッセージ投稿
- 個人メンション+チームメンションなどの組み合わせメンション
- タグメンション※YouTubeの動画に手順説明しています。
- ファイルの添付
指定日時に自動投稿するには、Teamsアプリに「Workflows」のアプリを追加する必要があります。
Teamsの作成ボックスの三点リーダー「・・・」→「Workflows」→「フロー名」をクリックします。
上段が「日時とメッセー」、下段が「メンション」です。
件名はチームのチャネルのみ有効で、メンションは、個人メンション、チームメンション、チャネルメンションのどれか1つになります。
※タグメンションについては、YouTubeをご覧ください。また全メンションのフローも作ることが可能です(作成済み)。
チームチャネル
チャットまたはグループチャット
TeamsにWorkflowsを追加するフロー作成まで手順
最初にTeamsデスクトップアプリにworkflowsを追加します。
そこから「新規アクションを作成」でテンプレートのフローを追加、Power Automateのマイフローから「メッセージをスケジュールする」のフローを修正します。
TeamsWorkflows
step
1Teamsにアプリ追加
①Teamsデスクトップアプリの左側にある「・・・」→「その他のアプリ」をクリックします。
②Workflowsをクリックします。
③「追加」をクリックします。
④「試してみる」をクリックします。
step
2チャットからWorkflowsを起動
⑤チャットの作成ボックスにある「・・・」→「Workflows」をクリックします。
⑥「新規アクションを作成」をクリックします。
⑦「メッセージをスケジュールする」をクリックします。
⑧フロー名「タイマーメッセージ投稿」に変更し、「ワークフローを追加する」をクリックします。
⑦フローボットからチャットにメッセージが届いたら追加完了です。
この「メッセージをスケジュールする」のフローは、個人メンションをして、指定日時に投稿するフローです。
このままでも使うことができますが、足りない件名、URL、チームメンション、チャネルメンションを追加、自分への通知はチェックを無くして必ず通知するようにします。
指定日時自動投稿(タイマーメッセージ投稿)を作成手順
「メッセージをスケジュールする」のフローを修正していきます。
ブログでの手順は、電子書籍やYouTubeのように細かく説明できないので、画像を見ながらある程度判断してください。
Power Automateタイマーメッセージ投稿フロー
マイフローにできた、「タイマーメッセージ投稿」のフローを編集します。
step
1作成ボックスから
作成ボックスを展開して、アダプティブカードを編集します。
下記にあるJSONを貼り付けてください。
①「作成ボックスから」を展開し、「アダプティブカードの編集」をクリックします。
②下にあるCARD PAYLOAD EDITORの隣の「+」をクリックします。
③下記JSONを貼り付けて、左上の「カード保存」をクリックします。
※前にあるJSONは、削除してから貼り付けてください。
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.3", "body": [ { "type": "TextBlock", "text": "▼日時とメッセージ", "weight": "Bolder", "size": "Medium", "fontType": "Default", "color": "Warning" }, { "type": "TextBlock", "text": "※日付:", "wrap": true, "size": "Small" }, { "type": "Input.Date", "id": "scheduledDate", "spacing": "None", "IsRequired": true, "errorMessage": "日付を選択してください。" }, { "type": "TextBlock", "text": "※時間:", "wrap": true, "size": "Small" }, { "type": "Input.Time", "id": "scheduledTime", "spacing": "None", "IsRequired": true, "errorMessage": "時間を選択してください。" }, { "type": "TextBlock", "text": "件名:", "wrap": true }, { "type": "Input.Text", "placeholder": "件名を入力してください(チャネルのみ)", "id": "Subject" }, { "type": "TextBlock", "text": "※メッセージ:", "size": "Small" }, { "placeholder": "メッセージを入力してください", "type": "Input.Text", "spacing": "None", "id": "messageToSend", "IsRequired": true, "isMultiline": true, "errorMessage": "メッセージを入力してください" }, { "type": "TextBlock", "text": "URL:", "wrap": true }, { "type": "Input.Text", "placeholder": "URLがあれば入力してください", "id": "Url" }, { "type": "TextBlock", "text": "▼メンション", "wrap": true, "weight": "Bolder", "color": "Good", "size": "Medium", "fontType": "Default" }, { "type": "TextBlock", "size": "Medium", "weight": "Default", "text": "個人へ@メンション" }, { "type": "Input.ChoiceSet", "choices.data": { "type": "Data.Query", "dataset": "graph.microsoft.com/users" }, "id": "peopleToAtMention", "isMultiSelect": true }, { "type": "Input.Toggle", "title": "チームへ@メンション", "id": "TeamtoMention" }, { "type": "Input.Toggle", "id": "ChanneltoMention", "title": "チャネルへ@メンション" } ] }
step
2フロー実行日時と条件を追加
データ操作の作成を追加して、今の日時を追加、変数「scheduledMessageSendTime」が次の値以上を条件にします。
これで指定日時が今の日時以上の時、フローが進みます。過去の日時は、エラー通知します。
④「Initialize scheduledMessageSendTime」の下に「データ操作」の「作成」を追加し、下記式を追加します。
※アクション名は、「フロー実行日時」に変更しました。
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy-MM-dd HH:mm')
※環境によって条件のところが「入力なし」になる場合があります。その場合は、下記のように日付書式をyyyy-MM-ddTHH:mmのようにTを追加してください。
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy-MM-ddTHH:mm')
⑤「フロー実行日時」の下に「条件」を追加、左側の「値の選択」に変数「scheduledMessageSendTime」、右側の「値の選択」にフロー実行日時の「出力」を追加、真ん中は、「次の値以上」を選択します。
※アクション名は、「現在の日時以上かチェック」に変更しました。
※環境によって条件のところが「入力なし」になる場合があります。その場合は、左側の値の選択を下記式にしてください。
concat(triggerBody()?['cardOutputs']?['scheduledDate'],'T',triggerBody()?['cardOutputs']?['scheduledTime'])
step
3過去の日時エラーを通知
「現在の日時以上かチェック」の「いいえの場合」にフローボットで通知とフロー終了アクションを追加します。
過去の日時の場合、フローはエラー通知して、終了となります。
⑥「いいえの場合」の中に「チャットまたはチャネルでメッセージ投稿する」を追加します。
⑦投稿者、投稿先はフローボットにし、Recipientに自分のメールアドレスを追加、メッセージは下記を貼り付けます。
※</>をクリックして、HTMLにしてから貼り付けしてください。
※アクション名は、「フローボットで過去の日時エラーを通知」に変更しました。
タイマーメッセージ投稿は、過去の日時のため終了しました。<br> <br> メッセージ<br> @{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br> <br> URL<br> @{if(empty(triggerBody()?['entity']?['cardOutputs']?['url']),'',concat('<a href="',triggerBody()?['entity']?['cardOutputs']?['url'],'" target="_blank" rel="noopener noreferrer">',triggerBody()?['entity']?['cardOutputs']?['url'],'</a>'))}<br>
⑧「フローボットで過去の日時エラーを通知」の下に「コントロール」の「終了」を追加します。状態は「成功」にします。
※アクション名は、「過去の日時のため終了」に変更しました。
step
4変数の追加と削除
「NotifyMyself」の変数を削除し、「PeopleFlag」(ブール値)、「Destination」(文字列)の2つの変数を追加します。
⑨「Initialize userMentionString」の下の「Initialize NotifyMyself」を削除します。
※フローのConditon(条件)の中にあるConditon2、Conditon3も削除してください。
⑩「変数を初期化する」のアクションを追加し、名前に『PeopleFlag』、種類に『ブール値」、値に式で「false」を追加します。
※アクション名は、「PeopleFlag変数を初期化する」に変更しました。
⑪「変数を初期化する」のアクションを追加し、名前に『Destination』、種類に『文字列」、値に『投稿先なし』を追加します。
※アクション名は、「Destination変数を初期化する」に変更しました。
step
5Apply to eachの中の条件にPeopleFlagの変数を設定
個人メンションのときのFlag変数を設定します。
⑫「Append to string variable」の文字列変数に追加の下に「変数の設定」のアクションを追加します。名前に「PeopleFlag」、値に式で「true」を追加します。
※アクション名は、「PeopleFlag変数の設定」に変更しました。
step
64つの条件を追加
4つの条件(チャットグループチャット、チャネルへの投稿、チーム@team、チーム@channel)に変数Destinationの設定を追加します。
条件に当てはまれば、変数Destinationに(チャットグループチャット、チャネル、チームメンション、チームチャネル)が入ります。
当てはまらない場合は、そのまま「投稿先なし」です。
⑬「Apply to each」の下に「条件」を追加します。
「チャットグループチャット」の条件は、下記になります。
「And」
チャネルID「次の値に等しい」null
グループ「次の値に等しい」true
teamtoMention「次の値に等しい」False
channeltoMention「次の値に等しい」False
※アクション名は、「チャットグループチャット」に変更しました。
※Falseはそのまま最初大文字にしてください(最初大文字と小文字があります)。
⑭「はいの場合」に「変数の設定」を追加し、名前に「Destination」、値に『チャットグループチャット』と入力します。
※アクション名は、「Destination変数の設定(チャットグループチャット)」に変更しました。
⑮「Apply to each」の下に「並列分岐の追加」で「条件」を追加します。
「And」
「チャネルへの投稿」の条件は、下記になります。
チャネルID「次の値に等しくない」null
teamtoMention「次の値に等しい」False
channeltoMention「次の値に等しい」False
「または」※グループの追加
PeopleFlag「次の値に等しい」true
PeopleFlag「次の値に等しい」false
※アクション名は、「チャネルへ投稿」に変更しました。
※Falseはそのまま最初大文字にしてください(最初大文字と小文字があります)。
⑯「はいの場合」に「変数の設定」を追加し、名前に「Destination」、値に『チャネル』と入力します。
※アクション名は、「Destination変数の設定(チャネル)」に変更しました。
⑰「Apply to each」の下に「並列分岐の追加」で「条件」を追加します。
「And」
「チーム@team」の条件は、下記になります。
チャネルID「次の値に等しくない」null
teamtoMention「次の値に等しい」True
channeltoMention「次の値に等しい」False
PeopleFlag「次の値に等しい」false
※アクション名は、「チーム@team」に変更しました。
※True、Falseはそのまま最初大文字にしてください(最初大文字と小文字があります)。
⑱「はいの場合」に「変数の設定」を追加し、名前に「Destination」、値に『チームメンション』と入力します。
※アクション名は、「Destination変数の設定(チームメンション)」に変更しました。
⑲「Apply to each」の下に「並列分岐の追加」で「条件」を追加します。
「And」
「チーム@channel」の条件は、下記になります。
チャネルID「次の値に等しくない」null
teamtoMention「次の値に等しい」False
channeltoMention「次の値に等しい」True
PeopleFlag「次の値に等しい」false
※アクション名は、「チーム@channel」に変更しました。
※True、Falseはそのまま最初大文字にしてください(最初大文字と小文字があります)。
⑳「はいの場合」に「変数の設定」を追加し、名前に「Destination」、値に『チャネルメンション』と入力します。
※アクション名は、「Destination変数の設定(チームメンション)」に変更しました。
㉑「Destination変数の設定(チームメンション)」の下に「チャネルの一覧表示」を追加し、チームに「チームID]を追加します。
㉒「アレイのフィルター処理」を追加し、差出人に「チャネルの一覧」、左側の「値の選択」に(チャネルの一覧表示)の「チャネルID」、右側の「値の選択」に(作成ボックスから)の「チャネルID]を追加します。
㉓「データ操作」の「作成」を追加し、下記式を追加します。
※アクション名は、「チャネル名」に変更しました。
first(body('アレイのフィルター処理'))?['DisplayName']
step
7タイムゾーンの変換、遅延期限、条件を移動
Convert time zone(タイムゾーンの変換)とDelay until(遅延期限)、Condition(条件)を移動します。
㉔一番下の「新しいステップ」をクリックすると4つの条件が繋がるので、その状態で「Condition」「Delay until」「Convert time zone」の順で移動します。
step
8スイッチを追加
Delay untilの下にスイッチのアクションを追加します。
※スイッチの上にある遅延期限をケースの中に追加してもOKです。ケースに当てはまらない場合(チームメンションとチャネルメンションを両方つける)も遅延してエラーの通知が行かないフローになっているので、すぐ通知させたい場合は、ケースの中に遅延条件をそれぞれ追加してください。
㉕コントロールの「スイッチ」を追加します。オンに変数の「Destination」を追加します。
㉖ケースの次の値と等しいに『チャットグループチャット』と入力し、ケース名も『チャットグループチャット』に変更します。
㉗「Condition」の中にある「post message in a chat」を移動して、メッセージの「</>」をクリックしたら、下記式を貼り付けます。
@{if(empty(variables('userMentionString')),'',concat(variables('userMentionString'),'<br>'))} @{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br> @{if(empty(triggerBody()?['entity']?['cardOutputs']?['url']),'',concat('<a href="',triggerBody()?['entity']?['cardOutputs']?['url'],'" target="_blank" rel="noopener noreferrer">',triggerBody()?['entity']?['cardOutputs']?['url'],'</a>'))}
㉘「+」をクリックして、ケースを追加、ケースの次の値と等しいに『チャネル』と入力し、ケース名も『チャネル』に変更します。
㉙「Condition」の中にある「post message in a channel」を移動して、メッセージの「</>」をクリックしたら、下記式を貼り付けます。
㉚件名に「subject」を追加します。
㉛「Condition」は不要なので削除します。
@{if(empty(variables('userMentionString')),'',concat(variables('userMentionString'),'<br>'))} @{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br> @{if(empty(triggerBody()?['entity']?['cardOutputs']?['url']),'',concat('<a href="',triggerBody()?['entity']?['cardOutputs']?['url'],'" target="_blank" rel="noopener noreferrer">',triggerBody()?['entity']?['cardOutputs']?['url'],'</a>'))}
step
9チームメンションを追加
Graph APIにHTTP要求を送信するとメンション付きでメッセージできるので、「Office365 groups」のコネクタにある「HTTP要求を送信します」のアクションを追加します。
メッセージは、チャットと同じようにメンション、メッセージ、URLの順にします。URLは、バックスラッシュが無いとエラーになるのでデータ操作の作成に追加しました。
㉜「+」をクリックして、ケースを追加、ケースの次の値と等しいに『チームメンション』と入力し、ケース名も『チームメンション』に変更します。
㉝「チームの取得」を追加し、チームに「チームID]を追加します。
㉞データ操作の「作成」を追加し、下記HTMLを追加します。
※アクション名は、「URL(チームメンション)」に変更しました。
<a href=\"@{triggerBody()?['entity']?['cardOutputs']?['url']}\" target=\"_blank\" rel=\"noopener noreferrer\">@{triggerBody()?['entity']?['cardOutputs']?['url']}</a>
㉟「Office365 groups」の「HTTP要求を送信します」を追加し、URI、メソッド「POST」、本文を追加選択します。
※アクション名は、「チームへ@teamして投稿」に変更しました。
※Office365Groupsの「HTTP要求を送信します」のアクションは、2024/5/7現在、Teams「Microsoft Graph HTTP 要求を送信する」で代替することができます。
https://graph.microsoft.com/v1.0/teams/@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}/channels/@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['channel']?['id']}/messages
{ "subject": "@{triggerBody()?['entity']?['cardOutputs']?['subject']}", "body": { "contentType": "html", "content": "<div><at id=\"0\">@{outputs('チームの取得')?['body/displayName']}</at><br>@{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']), '%0A', '<br>'))}<br>@{outputs('URL(チームメンション)')}</div>" }, "mentions": [ { "id": 0, "mentionText": "@{outputs('チームの取得')?['body/displayName']}", "mentioned": { "conversation": { "id": "@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}", "displayName": "@{outputs('チームの取得')?['body/displayName']}", "conversationIdentityType": "team" } } } ], "reactions": [] }
-
チャネルまたはチャットで chatMessage を送信する - Microsoft Graph v1.0 | Microsoft Learn
learn.microsoft.com
step
10チャネルメンションを追加
㊱「+」をクリックして、ケースを追加、ケースの次の値と等しいに『チャネルメンション』と入力し、ケース名も『チャネルメンション』に変更します。
㊲データ操作の「作成」を追加し、下記HTMLを追加します。
※アクション名は、「URL(チームメンション)」に変更しました。
<a href=\"@{triggerBody()?['entity']?['cardOutputs']?['url']}\" target=\"_blank\" rel=\"noopener noreferrer\">@{triggerBody()?['entity']?['cardOutputs']?['url']}</a>
㊳「Office365 groups」の「HTTP要求を送信します」を追加し、URI、メソッド「POST」、本文を追加選択します。
※アクション名は、「チームへ@channelして投稿」に変更しました。
※Office365Groupsの「HTTP要求を送信します」のアクションは、2024/5/7現在、Teams「Microsoft Graph HTTP 要求を送信する」で代替することができます。
https://graph.microsoft.com/v1.0/teams/@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}/channels/@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['channel']?['id']}/messages
{ "subject": "@{triggerBody()?['entity']?['cardOutputs']?['subject']}", "body": { "contentType": "html", "content": "<div><at id=\"0\">@{outputs('チャネル名')}</at><br>@{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br>@{outputs('URL(チャネルメンション)')}</div>" }, "mentions": [ { "id": 0, "mentionText": "@{outputs('チャネル名')}", "mentioned": { "conversation": { "id": "@{triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['channel']?['id']}", "displayName": "@{outputs('チャネル名')}", "conversationIdentityType": "channel" } } } ] }
-
チャネルまたはチャットで chatMessage を送信する - Microsoft Graph v1.0 | Microsoft Learn
learn.microsoft.com
step
11エラー通知
ケースの条件に入らない場合(チームメンションとチャネルメンション両方にチェックが入っているなど)は、「既定」にエラー通知を追加します。
㊴「既定」の中に「チャットまたはチャネルでメッセージ投稿する」を追加します。
㊵投稿者、投稿先はフローボットにし、Recipientに自分のメールアドレスを追加、メッセージは下記を貼り付けます。
※</>をクリックして、HTMLにしてから貼り付けしてください。
※アクション名は、「フローボットでエラーを通知」に変更しました。
㊶「フローボットでエラーを通知」の下に「コントロール」の「終了」を追加します。状態は「成功」にします。
※アクション名は、「エラーのため終了」に変更しました。
タイマーメッセージは、エラーのため投稿されませんでした。<br> <br> 投稿先<br> @{variables('Destination')}<br> <br> メッセージ<br> @{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br> <br> URL<br> @{if(empty(triggerBody()?['entity']?['cardOutputs']?['url']),'',concat('<a href="',triggerBody()?['entity']?['cardOutputs']?['url'],'" target="_blank" rel="noopener noreferrer">',triggerBody()?['entity']?['cardOutputs']?['url'],'</a>'))}<br>
step
12フローボットで投稿を通知
自分の投稿は、通知がこないのでフローボットで通知します。
㊷一番下の「新しいステップ」に「チャットまたはチャネルでメッセージ投稿する」を追加します。
㊸投稿者、投稿先はフローボットにし、Recipientに自分のメールアドレスを追加、メッセージは下記を貼り付けます。
※</>をクリックして、HTMLにしてから貼り付けしてください。
※アクション名は、「フローボットで投稿を通知」に変更しました。
@{outputs('フロー実行日時')}にセットしたタイマーメッセージが投稿されました。<br> <br> 投稿日時<br> @{variables('scheduledMessageSendTime')}<br> <br> 投稿先<br> @{variables('Destination')}<br> <br> メッセージ<br> @{uriComponentToString(replace(uriComponent(triggerBody()?['entity']?['cardOutputs']?['messageToSend']),'%0A','<br>'))}<br> URL<br> @{if(empty(triggerBody()?['entity']?['cardOutputs']?['url']),'',concat('<a href="',triggerBody()?['entity']?['cardOutputs']?['url'],'" target="_blank" rel="noopener noreferrer">',triggerBody()?['entity']?['cardOutputs']?['url'],'</a>'))}<br>
㊹「保存」をクリックします。
YouTubeにも同じ内容を公開しています。
まとめ
今回は、テンプレートの「メッセージをスケジュールする」をカスタマイズして、タイマーメッセージ投稿のフローを作成しました。
30日以内の指定日時で、チャット、グループチャット、チャネルにメンション(個人、チーム、チャネル)付きで投稿できるので、思いついた時にセットしておきましょう。
セットしたことを忘れちゃう人は、アクションを追加して「タイマーメッセージセットメール」のようにOutlookにメール送信するといいかもしれません。
忘れてました。仕事をしているフリして投稿するのに使うのもOKです。
私はそのために作りました。(笑)