職場で掃除当番の話が出ていたので、自動で掃除当番を決めて通知してくれるbotがいたらいいのかなぁと思い、ちょっとbot作成に挑戦してみました。
目次
事前準備 #
まずは構成を構築していきます。
(以下、Google Apps Script
をGAS
と記述しています)
構成図 #
大まかな流れはこんな感じ。
(相変わらずスプレッドシートで図形描画はしづらいですねぇ…)
Slack側 #
GASからSlackに投稿するにあたって、
Slack API
or Incoming-webhook(着信Webフック)
が必要になりますが、今回は後者の方を使用しています。
ワークスペースとチャンネルを用意 #
Slack側でbotの投稿を行いたいワークスペースとチャンネルを事前に用意しておきます。
ワークスペースにIncoming-webhookを設定する #
1.ワークスペースメニュー → その他管理項目 → App管理へ
(あとからキャプチャを撮ったので、キャプチャ上で投稿されている内容については後から出てきます…)
2.(右上のMenu → )検索へ
3.Incoming webhook で検索し、Incoming webhook(着信Webフック)を選択し、設定画面へ
※すでにIncoming webhookを追加済みの場合
ワークスペースメニュー → その他管理項目 → App管理 → (セクションを変更する) → カスタムインテグレーション → Incoming webhook(着信Webフック) を選択でも、同様の画面に行けます。
4.設定を追加 を選択
5.チャンネルへの投稿 で投稿したいチャンネルを選択 → 着信Webフックインテグレーションの追加 を選択 で設定詳細画面へ
6.任意で設定を変更して、設定を保存する を選択
(なお、この画面にあるWebhook URL
はGAS側で使用するので控えておいてください。
また、セットアップの手順
、メッセージ添付ファイル
の項目で、このwebhookの使い方が書いてあるので、読んでおくといいですよー。)
Google Drive側 #
スプレッドシート #
1.スプレッドシートを作成(この段階では何も記述しなくてOK)
2.スプレッドシートのメニュー → ツール → スクリプトエディタ を選択
Slackに投稿する #
GASに投稿内容を記述 #
ここから実際にSlackに投稿する内容を記述していきます。
GASでは、JavaScriptで記述していきます。
Webhook URLにデータを送信するには、以下の2つの方法があるようです。
(今回は前者のやり方になるかと思います)
- POSTリクエストで
payload
パラメータとしてJSONを送信する - POSTリクエストの本体として、JSONを送信する
ここでは一旦、ちゃんと投稿ができるか確認するためにテスト投稿を行いたいと思います。
※2019/12/29 変数宣言のvarをconstに修正しました。
※2020/2/16 細かな修正を行いました
function myFunction() {
const WEBHOOK_URL = //先ほど控えたWebhookURLを指定
//Incoming WebHookに渡すパラメータ
const jsonData =
{
'text': 'test'
};
//パラメータをJSONに変換
const payload = JSON.stringify(jsonData);
//送信オプション
const options =
{
'method': 'post',
'contentType': 'application/json',
'payload': payload
};
//指定URL、オプションでリクエスト
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
GASメニューから関数を選択し実行ボタンを押すことで、選択した関数を実行できます。
(※初回実行時には、実行の許可が求められるので許可してください)
実行結果 #
実行すると指定したSlackのチャンネルに以下のように投稿されます。
これで投稿ができるようになりました。
今度は、投稿内容を変えていきましょうー。