Mackerelのグラフ画像をSlackbotに展開させる
下記記事にてCO2濃度と瞬時電力計測値をMackerelに記録するようにした。
記録したデータを手軽に見たいので、今回はSlackで各グラフを見れるように対応する。
最初、Slackbotユーザの自動応答にグラフURLを渡せばいいだけだと思い設定してみたが、URLが展開されなかった。
同一URLの場合は2回目以降は展開されない模様。
自動応答だと固定のメッセージしか返せないので、Boltを使って簡易のSlackbotアプリを作ることにした。
URL投稿時にランダム文字列をパラメータとして渡すことで、常に最新のグラフ画像を表示してくれるようになった。
const { App } = require('@slack/bolt');
const exec = require('child_process').exec
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET
});
const randomId = () => {
return Math.random().toString(36).slice(-8);
}
app.message(/^(電気|電力)$/, ({ message, say }) => {
say({
"text": `<https://mackerel.io/embed/public/embed/xxxxx.png?period=30m&r=${randomId()}|直近30分間の瞬時電力計測値です :pray:>\n画像URLのパラメータを変更すると期間変更ができます :memo:\nperiod=1h, period=6h, period=24h`,
"unfurl_links": true,
"unfurl_media": true
});
});
app.message(/^(CO2|二酸化炭素)$/, ({ message, say }) => {
say({
"text": `<https://mackerel.io/embed/public/embed/xxxx.png?period=30m&r=${randomId()}|直近30分間のCO2濃度です :pray:>\n画像URLのパラメータを変更すると期間変更ができます :memo:\nperiod=1h, period=6h, period=24h`,
"unfurl_links": true,
"unfurl_media": true
});
});
(async () => {
await app.start(process.env.PORT || 3001);
})();