![見出し画像](https://assets.st-note.com/production/uploads/images/57602364/rectangle_large_type_2_c2f99b4b26745659027cf382baa25352.jpeg?width=1200)
[GAS][Slack]定期的に投稿するBotを作成
私が所属しているコミュニティのSlackでは、毎日定期的にSlack Botが稼働しています。
実に様々なBotがあります。
コミュニティ内の様々なTipsを投稿したり、
「今日の名言」と題して名言を投稿したり、
「今日の成果を発表してください」と促すbotがあったり。
Bot投稿のノウハウを習得したく、調べながらまとめました。
Slackの設定は以下の記事を参考にさせていただきました。
ありがとうございました。
以下の手順で実装/確認します。
1_スプレッドシートの用意
2-1_Slackアプリの新規作成
2-2_Slackアプリの設定
2-3_Slackアプリのインストール
3_GASのスクリプト
4_GAS実行/確認
1_スプレッドシートの用意
今回は、GASを用い1日1回決められた時間帯にメッセージをSlackに投稿する...という機能を実装します。
以下のスプレッドシートを用意します。
列BにはSlackに送るメッセージ、列Cには送信済を判定する「isSent」(初期値は空欄)を用意しておきます。
![画像16](https://assets.st-note.com/production/uploads/images/55562072/picture_pc_5c6ef80fa2524e9eaab7aeec2175a5ef.png)
2-1_Slackアプリの新規作成
Slackの設定は以下の記事を参考にさせていただきました。
ありがとうございました。
以下のURLからSlackアプリを新規作成します。
右上[Create New App]をクリックすると「Create an app」というダイアログが表示されるので、[From scratch]を選択します。
![画像2](https://assets.st-note.com/production/uploads/images/55559734/picture_pc_4a02960743bf2867f305d4226df2756c.png?width=1200)
![画像3](https://assets.st-note.com/production/uploads/images/55559743/picture_pc_6ba0d68308e9bcdcddf437429b68f4f2.png)
次のダイアログでApp名を入力し、workspaceをプルダウンより選択します。
![画像4](https://assets.st-note.com/production/uploads/images/55559756/picture_pc_b2294f114f72f01ed2df3805c951ebbc.png)
2-2_Slackアプリの設定
左にある[OAuth & Permissons]をクリックし、「Scopes」にある[Add an OAuth Scope]をクリックした後、「chat:write」「chat:write.public」「chat:write.customize」の3つを選択します。
![画像5](https://assets.st-note.com/production/uploads/images/55559761/picture_pc_318c789b270bd09d4840c53f08e5e474.png?width=1200)
![画像6](https://assets.st-note.com/production/uploads/images/55559791/picture_pc_08817af40e126c0276594b748d485e33.png?width=1200)
![画像7](https://assets.st-note.com/production/uploads/images/55559802/picture_pc_1c7464887b75bf85df1fe5cc7f12e67d.png?width=1200)
続けて、左にある[App Home]より「App Display」の[Edit]をクリックし、ボット名とデフォルトのユーザー名を入力します。
![画像8](https://assets.st-note.com/production/uploads/images/55559834/picture_pc_13f3b770a2ad517b28b23813b4696dfc.png?width=1200)
![画像9](https://assets.st-note.com/production/uploads/images/55559844/picture_pc_40c2cdddf8868dc54cb627639640e64b.png)
![画像10](https://assets.st-note.com/production/uploads/images/55559857/picture_pc_cb66338beaa63abd222fff4deb7cb007.png?width=1200)
↑↑↑上部に「App display name saved!」が表示され、これで設定は完了です。
2-3_Slackアプリのインストール
最後に新規作成したSlackアプリをワークスペースにインストールします。
左の[Install App]より[Install to Workspace]をクリック、次のダイアログで[許可する]をクリックします。
![画像11](https://assets.st-note.com/production/uploads/images/55559876/picture_pc_6029e2f638872c02c91979d80952951c.png?width=1200)
![画像12](https://assets.st-note.com/production/uploads/images/55559897/picture_pc_bb754e644788fda0c31e56bbef80853c.png?width=1200)
ここで表示されるトークンをコピーし、GASのプロパティストアに格納しておきます。
![画像13](https://assets.st-note.com/production/uploads/images/55559947/picture_pc_e142e45a2e8f78f7f969ea6b32128e25.png?width=1200)
2_GASのスクリプト
スクリプトはこちら。
function slackBot_01() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
for (let i = 2; i <= lastRow; i++) {
const isSent = sheet.getRange(i, 3).getValue();
if (isSent == "") {
const message = sheet.getRange(i, 2).getValue();
postMessage(message);
sheet.getRange(i, 3).setValue(true);
if (i >= lastRow) {
sheet.getRange(2, 3, lastRow - 1).clearContent();
}
break;
}
}
}
function postMessage(message) {
const token = PropertiesService.getScriptProperties().getProperty('SlackBot_token');
const channel = "#general";
const options = {
"method": "post",
"contentType": "application/x-www-form-urlencoded",
"payload": {
"token": token,
"channel": channel,
"text": message
}
};
const url = 'https://slack.com/api/chat.postMessage';
UrlFetchApp.fetch(url, options);
}
2つのfunctionではそれぞれ以下の処理を実行します。
【function slackBot_01】
・2行目以降より上から順に、列C「isSent」が空白の行を探す
・列3=空白の行があったら列Bのメッセージを変数(message)に格納
・function postMessageを実行
・最終行に到達した場合は列C「isSent」をすべてクリア
【function postMessage】
・トークンをプロパティストアより取得
・投稿するチャンネルを「#general」に設定
・function slackBot_01から受け取った変数messageをSlackに投稿
3_GAS実行
GASを実行すると指定したチャンネルにメッセージが投稿されます。
![画像14](https://assets.st-note.com/production/uploads/images/55559974/picture_pc_f541fae2f3b2ed8762cd08b303e1b8f1.png?width=1200)
スプレッドシートを確認すると、列Cには投稿後に「TRUE」が記録され、
次回実行時には次の行のメッセージを投稿する仕組みになっています。
最終行を投稿後は列CのTRUEをすべてクリアし、最初の行から投稿が始まります。
![画像15](https://assets.st-note.com/production/uploads/images/55560005/picture_pc_bf801a7cfab257e6c5da6532e003767e.png)
「function SlackBot_01」に1日1回のトリガーを設定すると、毎日決められた時間帯に自動的に投稿することが出来ます。
※Bot作成についてはこちらの記事を参考にさせていただきました。
ありがとうございました。
※権限によっては投稿したメッセージが削除できない場合があります。Botのtokenを用いて削除する方法はこちら。
※類似記事を書きました。
※2022年9月に技術同人誌「会社員がVLOOKUPの次に覚えるQUERY関数超入門」を出版いたしました。
この記事が気に入ったらサポートをしてみませんか?