Help us understand the problem. What is going on with this article?

CloudFunctions+SlackAPIを使って定期的にユーザ数を通知できるように自動化してみた

最近、作ったWebサービスで手動でユーザ数などのデータを取得していたけど、
めんどくさくなったので、いまさらながらSlackAPIを使ってみた。

こんな感じで通知されます!

ユーザ数とか登録データ数とかを通知♪
いまは毎日0:00に通知するようにしているので、毎日たのしみ(´ω`)

スクリーンショット 2019-08-28 16.46.28.png

全体の流れ

全体の流れはこんな感じ

  1. Slack APIでSlack Appを作成
  2. 作成したAppでIncoming Webhooksを有効にする
  3. Incoming WebhooksにWebhook URLを追加する
  4. 取得したWebhook URLを使ってFunctionsからメッセージを送る

1. Slack APIでSlack Appを作成

まずは、「 https://api.slack.com/apps 」にアクセス

スクリーンショット_2019-08-28_15_42_59.png

「Create New App」をクリックすると、作成ダイアログが表示されるので、
アプリ名を入力して、「Create App」をクリック

スクリーンショット_2019-08-28_15_46_27.png

これでSlack Appが作成できた(´ω`)

2. 作成したAppでIncoming Webhooksを有効にする

Web APIでメッセージを投稿できるように設定するために、
作成したAppのSettingsのBasic Infomarionにある「Incoming Webhooks」を有効にする

スクリーンショット_2019-08-28_15_46_58.png

クリックするとこんな感じ。デフォルトはOFFなので、ONに切り替える。

スクリーンショット_2019-08-28_15_47_11.png

これで有効になった(´ω`)

3. Incoming WebhooksにWebhook URLを追加する

有効にしたので、どのチャネルに通知するかを設定していく

有効すると、下の方に「Add New Webhook to Workspace」があるので、それをクリック

スクリーンショット_2019-08-28_15_47_38.png

クリックすると、チャネルの選択画面が出るので、投稿先を設定して、「許可する」をクリック。
投稿先はチャネルだけじゃなく、個人宛も設定できます(´ω`)
スクリーンショット 2019-08-28 15.48.15.png

許可すると、こんな感じの画面に。
WebhookURLが追加されるので、「Copy」を押して、コピーしておく
スクリーンショット_2019-08-28_15_48_39.png

4. 取得したWebhook URLを使ってFunctionsからメッセージを送る

取得したWebhookURL宛にメッセージを送ればOK

CloudFunctionsのコードはこんな感じ。

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

/**
 * Slackにメッセージ(text)を送る関数
 */
const axios = require("axios");
async function sendSlack(text) {
  const webhookURL = "https://YOUR_WEBHOOK_URL";
  const param = { text: text };
  const headers = { "Content-Type": "application/x-www-form-urlencoded" };
  try {
    await axios.post(webhookURL, param, { headers: headers });
  } catch (error) {
    console.error(`Error occuered in sendSlack: ${error}`, error);
  }
}

/**
 *  Slackへの通知を定期実行するFuncitons
 */
exports.slackNotify = functions.pubsub
  .schedule("0 0 * * *")
  .timeZone("Asia/Tokyo")
  .onRun(async context => {

    // Slack通知
    await sendSlack("こんにちは");
  });

sendSlack(text)webhookURLに、
上でコピーしたWebhook URLをはりつけてください。
こんな感じで「こんにちは」される(´ω`)

スクリーンショット 2019-08-28 16.58.32.png

あとは、Function内でFirestoreとかを呼び出して、データを収集・集計すればOKヽ(=´▽`=)ノ

メッセージ送るだけならすごく簡単(´ω`)

ほかにもいろいろ

ほかにもパラメタを変えれば、色を変えたり、画像を送れたりできるよう!!
- SlackのIncoming Webhooksを使い倒す - Qiita

公式ドキュメントだとこちら
- Incoming Webhooks | Slack

また、こちらの記事でも書いたようにジョブの無料枠は、Googleアカウントごと...
遊びやテスト用にいくつも作ると課金されはじめるので注意が必要です...
- Cloud Functions for Firebaseのcronみたいな定期実行を試したら簡単だった - Qiita

以上!!

こんなのつくってます!!

最近、積読用の読書管理アプリ「積読ハウマッチ」をリリースしました!
積読ハウマッチは、Nuxt.js+Firebaseで開発してます!

もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ

要望・感想・アドバイスなどあれば、
公式アカウント(@MemoryLoverz)や開発者(@kira_puka)まで〜

kira_puka
フリーのエンジニア / 今はNuxt.jsが多め / いつかFlutterをやりたい 受託開発をしながら、アプリ・Webサービス・ゲームを個人開発 Kotlin/Python/Swift/Unity/Java/Haskell/DDD
https://memory-lovers.com
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした