💻

Power Automate で特定の Twitter ツイートを Teams/Slack にも投稿する (中級 Ver.)

2021/05/04に公開

この記事について

この記事では、Power Automate を使用して、特定の Twitter アカウントを対象に、新規ツイートが行われた場合、ツイートの内容をリアルタイムに Microsoft Teams および Slack に同時投稿する方法についてまとめています。

企業の中で業務をするにあたっては、Microsoft 365 や Slack、その他 SaaS サービスといったようなものを数多く扱っていくことになると思います。その際、公式の Twitter アカウントから発信される障害情報というものは、即時性が高く、何か問題が発生した際に非常に有用な情報源となることが多いです。
しかしながら、今は在宅勤務を行っているとはいえ、仕事をしながら常に隣に Twitter の画面が表示して監視を行うことは通常実現が難しい内容ですので、Twitter から発信された情報を確認するまでのリードタイムを考慮する必要があります。

そこで、今回は Power Automate を起点として任意の Twitter アカウントのツイート情報をタイムリーに Microsoft Teams および Slack に連携するフローを実装していきます。
初級 Ver. の記事でも触れたように、Power Automate や Azure Logic Apps で提供されている Twitter コネクタのトリガーは、1 時間に 1 回の頻度で起動 するもののため、そのまま使っても今回の要件をクリアすることができません。そのため、この要件をクリアできるよう、フローの作り方を少し工夫していきます。

今回作成するフロー(イメージ)

Power Automate で作成するフローのイメージは、以下の通りです。

前回同様、この図を見てもうやり方が分かったよという方は画面をそっと閉じて、Power Automate のフローを作り始めてください。

前回の初級 Ver. と異なる点は、以下の通りとなっています。

  • トリガーの起動をスケジュール済みクラウド フローに設定
  • Twitter コネクタはツイートの検索を使用
  • 取得された複数のツイート情報を 1 件ずつ、投稿日時で連携対象か判別

こちらの点について、解説を行っていこうと思います。

フローの作成

では、今回もフローを作成していきます。
Power Automate のホーム画面にアクセスし、メニューにある作成を選択します。
今回は、フローの種別は、スケジュール済みクラウド フローを選択します。

なぜ、スケジュール済みクラウド フローを選択するかというと、前回の初級 Ver. で触れた通り、Twitter コネクタの自動トリガーは 1 時間に 1 回起動する仕様になっているためです。
Twitter コネクタをトリガーに設定してしまうと、タイムリーなツイート情報を取得することができないため、今回はタイマージョブの形でフローのトリガーを設定することで、定期的にフローが起動するようにします。

トリガーの繰り返し設定

スケジュール済みクラウド フローを選択した場合、フローは任意の頻度で起動するようになります。
今回のフローでは、5 分に 1 回の頻度でトリガーが起動するように設定を行っています。
この 起動頻度によって、このフローにおける Power Automate のトリガーアクション回数の最低値が決定する ため、過度にトリガーアクションの回数を消費しないよう、頻度の設定には注意するようにしてください。

5 分に 1 回の設定の場合、1 日に換算すると 1440 (分) ÷ 5 = 288 (回) フローが起動することになり、このフローで 288 回以上のトリガーアクションがカウントされる見込みになります。
1 アカウントあたりにおける Power Automate のトリガーアクション実行可能回数には制限があるので、使用するライセンスによっては、この点、注意するようにしてください。

https://docs.microsoft.com/ja-jp/power-automate/limits-and-config

Twitter コネクタでツイートを検索

初級 Ver. では新しいツイートが投稿されたらという Twitter コネクタのトリガーを使用しましたが、今回はツイートの検索アクションを使用します。

このアクションの中で、どのユーザーの、どのようなツイートを検索対象にするかを指定していきます。
指定する際の要領は、初級 Ver. でやった時と同じです。指定したいものを設定するようにしてください。

今回のフローでは、Microsoft 365 の障害情報を発信する Twitter アカウント @MSFT365Status のツイートを指定して、ツイート情報を取得するようにしてみます。

https://twitter.com/msft365status

初級 Ver. と違って設定時に工夫している点としては、他ユーザーへのリプライツイートは検索対象に含めないように exclude:replies を追加で設定している点です。

サービスや製品などの公式 Twitter アカウントだと、通常のツイートに加えて、他アカウントのツイートに対するリプライなども行われている場合があります。
from:@{ユーザーID} だけを設定している場合、他アカウントへのリプライなどの情報もコネクタの仕様上、取得対象となってしまいます。そのため、今回のような場合だと、リプライツイートは除外したい情報となると思います。
そのため、初級 Ver. の時の 特定のハッシュタグを指定した時と同様、今回も Twitter の検索用演算子を使用して、リプライツイートを検索対象から除外してしまいましょう。

Twitter の検索時に利用できる演算子はほかにもさまざまなものが存在していますので、興味がある方はこちらを参照してください。

https://developer.twitter.com/en/docs/twitter-api/v1/rules-and-filtering/search-operators

また、取得するツイート件数の最大値については、任意で変更してください。(既定では 20 件となっています)

Apply to each で取得結果を 1 件ずつ確認

ツイート情報を検索したら、それぞれ 1 つずつ内容を確認していきます。
今回のフローだと、フロー実行毎に、実行時点での最新ツイートからさかのぼって、最大 20 件取得されるようになっています。そのため、複数のツイート情報が取得されても問題ないように、Apply to each アクションを使用し、ツイート情報 1 件 1 件に対してアクションを実行できるようにしていきます。

新しいステップボタンを選択し、コントロール -> Apply to each のアクションを選択します。

Apply to each のアクションを選択したら、1 件ずつ処理していくデータソースの選択 が求められます。
ここでは、Twitter コネクタのアクションで取得した body を選択します。

これで、前工程で取得したツイート情報を 1 件 1 件参照していくアクションを追加しました。

共有対象のツイートを投稿日時で絞り込む

Twitter のツイート検索アクションでは、ツイートが作成された日時については特に指定をしていません。
Twitter の検索用演算子を使えば XX 月 XX 日 以降に行われたツイートは指定可能 (since:yyyy-mm-dd) ですが、時刻までの指定はできません。
そのため、ツイート情報を重複して参照することがないように、Power Automate のアクションで絞り込みしていきます。

Apply to each アクションの中にあるアクションの追加ボタンを選択し、コントロール -> 条件 のアクションを選択します。

条件アクションを選択したら、絞り込むツイートの条件を設定していきます。
今回はツイートが行われた日時を使って絞り込みを行うので、最初の値の選択欄には作成日時を設定します。

真ん中の欄は、次の値以上を設定します。今回のフローでは、5 分前 〜 現在時刻までに投稿された新規ツイートを対象に絞り込みたいためです。

Twitter コネクタで取得したツイート情報は UTC 基準

最後の 2 個目の値の選択欄では、5 分前の時刻を設定します。今回の内容で、ここが一番重要ポイントです!!
参考ですが、Twitter コネクタで取得したツイート情報は以下のようになっています。

{
  "TweetText": "いやぁ、、スタバのグラスドリップコーヒーメーカー、初めて買ったんだがこれお得男ヘドリアンや。\n昔最初に出た時は微妙だったが、今のやつは口も大きいし最強感あるね。これで3000円なら買いだ。",
  "TweetId": "1388684539623469059",
  "CreatedAt": "Sun May 02 02:39:29 +0000 2021",
  "CreatedAtIso": "2021-05-02T02:39:29.000Z",
  "RetweetCount": 0,
  "TweetedBy": "mappie_kochi",
  "MediaUrls": [],
  "TweetLanguageCode": "ja",
  "TweetInReplyToUserId": "",
  "Favorited": false,
  "UserMentions": [],
  "UserDetails": {
    "FullName": "まっぴぃ⊿",
    "Location": "",
    "Id": 1088747748474540000,
    "UserName": "mappie_kochi",
    "FollowersCount": 396,
    "Description": "青いRの中の人。情シス。#jssug と #jcdug の中の人。PerfumeとDisneyとジグソーパズル🧩が趣味。P.T.A会員。#prfm 発言はあくまで個人的意見。",
    "StatusesCount": 10104,
    "FriendsCount": 370,
    "FavouritesCount": 7550,
    "ProfileImageUrl": "https://pbs.twimg.com/profile_images/1207823591904927745/ib5UY5Hf_normal.jpg"
  }
}

実際にみなさんが見るであろう Twitter クライアントの画面はこちらです。

https://twitter.com/mappie_kochi/status/1388684539623469059?lang=ja

すでにお分かりの方もいらっしゃるかもしれませんが、CreatedAt の部分を見ていただくとわかる通り、 Twitter コネクタで取得したツイート情報の作成日時は UTC 時間で統一されています。そのため、日本時間 (UTC+9:00: JST) 換算で値を設定してしまうと、最新のツイート情報が取得できなくなります

そのため、条件アクションの値の選択欄に入れる時間は UTC 時間での 5 分前を設定することになります。

Power Automate で使用できる関数の中には、日時に関連する関数も含まれています。今回は、

の 2 つを組み合わせて、5 分前の時刻を作成します。
値の選択欄に addMinutes(utcNow(), -5) を設定し、UTC 時間で 5 分前の時刻が参照されるようにします。

これで、ツイートの絞り込みができるようになります。
なお、冒頭の今回作成するフロー(イメージ)で表示した画像のフローでは、上記に加えて以下の条件を AND で追加しています。ここは好みの世界の話になるので、入れておきたいという方は同じ要領で追加してください。

後は初級 Ver. と同じ手順

ここまでやれば、後は初級 Ver.でやったことと同じ内容です。
条件はいの場合欄の中で、Slack なり Teams なり、好きなツールへ Twitter のツイート情報を連携するようなアクションを追加していきましょう。

並列分岐を行う際は、Twitter コネクタのアクションが終わった後に入れることになります。
残念ながら、Apply to each アクションの最初に並列分岐を入れることはできません。そのため、Twitter コネクタのアクションの後ろで並列分岐を作成し、それぞれの分岐先で 1 件 1 件ツイート情報を確認する処理フローとなります。

いいえの場合欄には、今回の例の場合は特段何も入れる必要はありません。

まとめ

今回は、特定の Twitter アカウントを対象に Power Automate で新規 ツイートが投稿されたらリアルタイムに Teams/Slack にもツイート情報を投稿する方法について解説しました。
Power Automate を使用すれば、初級 Ver.で作ったフローの内容を少し改造するだけで、ツイート情報をリアルタイムに取得して次のアクションを行うといったことも非常に簡単に、短時間で作成することが可能になります。
この機会に是非、普段、面倒だなぁと思ったり、自動化できたら楽になるのになぁと思ったことがあれば、Power Automate を使って改善できないか試してみてください。

さて、次回は最後、上級編と題して、Teams へツイート情報を連携した後、さらにワンアクション追加することで、社内の業務を楽にする Power Automate のフローを作ってみようと思います。
社内で使っている Microsoft 365 のサービスに障害が発生した際、Slack で通知する以外に、メールで全社通知を行うといったフローもあるかと思います。上級編では実際に、

  1. 障害内容の検知・確認
  2. 社員全員へのメール送信に関するワークフロー (責任者による承認の実施など)
  3. 社員へのメール送信

といった、実際の業務でありうる内容について、Power Automate を使って半自動化してみようと思います。
これまでは、責任者への調整やメール文面の作成など、その時々で毎回誰かが調整などを行っていたと思いますが、Power Automate を使えば、そういった無駄な生産性を削減することができ、社員に障害情報が共有されるまでのリードタイムを短縮することが可能になります。

Power Automate を使って、現在の業務の無駄をどこまで解消できるのか、実際にフローを作りながら考えていきたいと思います。

Discussion