DevelopersIOにブログが未投稿なら通知で催促をする仕組みをMicrosoft Power Automateで作ってみた

2022.02.19

こんにちは、CX事業本部 IoT事業部の若槻です。

私はDevelopersIOへの技術ブログの投稿を日課としているのですが、たまに筆が乗らなかったり、書いたけど投稿ボタンを押し忘れたり、なんてことがあります。

そこで今回は、DevelopersIOにブログが未投稿なら通知で催促をする仕組みをMicrosoft Power Automateで作ってみました。

作ってみた

先に出来上がったFlow全体をお見せするとこんな感じです。

一つ一つのトリガーおよびアクションについて見ていきます。

Flowを日次実行するトリガー

まず、Flowの実行トリガーは日次で日本時間23:55としています。とりあえず今日中に投稿せよ、という催促です。

このトリガーの定義は次のようになります。

{
    "recurrence": {
        "frequency": "Day",
        "interval": 1,
        "timeZone": "Tokyo Standard Time",
        "schedule": {
            "hours": [
                "23"
            ],
            "minutes": [
                55
            ]
        }
    }
}

RSSから記事を取得するアクション

次に、私のDevelopersIOのRSSから、「過去23時間以内」に投稿された記事をリストで取得します。(「24時間以内」とすると、前日の23:55〜24:00まで含まれてしまうため、23時間以内とします。)

このアクションの定義は次のようになります。

{
    "inputs": {
        "host": {
            "api": {
                "runtimeUrl": "https://japan-001.azure-apim.net/apim/rss"
            },
            "connection": {
                "name": "@parameters('$connections')['shared_rss']['connectionId']"
            }
        },
        "method": "get",
        "path": "/ListFeedItems",
        "queries": {
            "feedUrl": "https://dev.classmethod.jp/author/wakatsuki-ryuta/feed/",
            "since": "@{addHours(addHours(utcNow(), 9), -23, 'yyyy/MM/dd HH:mm:ss')}"
        },
        "authentication": "@parameters('$authentication')"
    }
}

DevelopersIOのRSSのフィードURLはhttps://dev.classmethod.jp/author/<author>/feed/となります。社内ではこのRSSを使用して部署メンバーの投稿をSlackに流したりしています。

また日本時間の23時間前の時間は、addHours(addHours(utcNow(), 9), -23, 'yyyy/MM/dd HH:mm:ss')とすれば取得できます。ここの書き方が最初分からなかったのですが、3年前に自分が書いた記事が参考になりました。

RSS取得結果による投稿済み判定

次に前段のアクションでRSSから取得された今日の投稿の本数が0であるかを判定し、今日は投稿済みまたは未投稿のいずれであるかを判定します。

この判定の定義は次のようになります。(判定の定義はJson形式で取得できないようです。)

@equals(length(body('List_all_RSS_feed_items')), 0)

判定がtrueの場合にメールを送信する

最後に、前段の判定がtrue(今日は未投稿)の場合に自分のメールアドレスにメールを送信して通知するようにします。

このアクションの定義は次のようになります。

{
    "inputs": {
        "host": {
            "api": {
                "runtimeUrl": "https://japan-001.azure-apim.net/apim/flowpush"
            },
            "connection": {
                "name": "@parameters('$connections')['shared_flowpush']['connectionId']"
            }
        },
        "method": "post",
        "body": {
            "notificationSubject": "ブログが投稿されていません!!!",
            "notificationBody": "今すぐPCを立ち上げてブログを投稿してください。"
        },
        "path": "/sendEmailNotification",
        "authentication": "@parameters('$authentication')"
    }
}

動作確認

まずこのフローを手動でテスト実行してみます。

実行が成功しました。今日はまだブログを未投稿なので判定がはいtrue)となりメール送信が行われています。

私のメールアドレス宛にメールが届きました!

また、23:55になるとちゃんと自動実行されました。この時は投稿済みだったので判定がいいえfalse)になりメール送信が行われませんでした。期待通りの動作です!

おわりに

DevelopersIOにブログが未投稿なら通知で催促をする仕組みをMicrosoft Power Automateで作ってみました。

今回作ったような処理を定期実行するワークフローの作成にMicrosoft Power Automateはうってつけです。今は全然ですが、以前は私はMicrosoft畑にいたので初めて触った当時はその便利さにとても感動しました。

以上