はじめに
slackで特定の文字に反応してくれるBOTをGoogle Apps Script( GAS )で作ります。
=>ランチ候補をpostしてくれるslackbotを、Google Apps Scriptで作る
こういうのが作りたい
成果物はこちら、
仕様
-
ルーレット
と送信すると登録した名前から一つslackに投稿される - スプレッドシートに名前を登録しておく
- GAS上でスプレッドシートの情報を読み込み、ランダムに一件取得
目次
- Google スプレッドシートにデータ入力
- Incoming WebHooksの設定
- Google Apps Scriptにコード書く + デプロイ
- Outgoing WebHooksの設定
1. Google スプレッドシートにデータ入力
まずは、Google スプレッドシートにアクセスします。
新しいスプレッドシートを作成
=> 空白
を選択して新規プロジェクトを立ち上げましょう。
そして、スプレッドシート内に次のように記述してください。
また、このスプレッドシートのURLは後で使うのでコピーして控えておいてください。
2. Incoming WebHooksの設定
まずは、Incoming WebHooksにアクセスします。
① 自分のワークスペースにログイン
② 投稿したいチャンネルを選択
③ Incoming Webhook インテグレーションの追加
次に、Webhook URLをコピーして控えておきましょう。
そして「設定を保存する」を押してください。
3. Google Apps Scriptにコード書く + デプロイ
いよいよコードを書いていきます。
まずは Google Apps Scriptにアクセスしてください。
「新しいプロジェクト」 を押して新規プロジェクトを立ち上げます。
コード.gsに以下を記述してください。
( 先ほどコピーしておいたスプレッドシートのURLとWebhook URLを使用します。 )
var SLACK_WEBHOOK = 'https://hooks.slack.com/services/***********/'; // Incomig Webhook URL
var SLACK_CHANNEL = '#*******'; // channel名
var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/**********'; // スプレッドシートURL
var EMOJI_ICON = ':question:'; // アイコン(slackのスタンプを使っているのでお好みで)
var BOT_NAME = 'ルーレットくん'; // BOTの名前
Array.prototype.random = function () {
return this[Math.floor(Math.random() * this.length)]
}
function postMessage(message, hookPoint) {
var payload = {
"text": message,
"icon_emoji": EMOJI_ICON,
"username": BOT_NAME,
"channel": SLACK_CHANNEL
}
var options = {
"method" : "POST",
"payload" : JSON.stringify(payload),
"headers": {
"Content-type": "application/json",
}
}
var response = UrlFetchApp.fetch(hookPoint, options);
if (response.getResponseCode() == 200) {
return response;
}
return false;
}
function main() {
var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadsheet.getSheets()[0];
var messageAll = sheet.getRange(2, 1, sheet.getLastRow()-1, 1).getValues(); // getLastRow()は空白の最終行もとって来てしまう
var messageList = [];
var message = "";
for (var i in messageAll) {
messageList.push(messageAll[i][0]); //textだけ格納
}
message += messageList.random();
message += "、キミに決めた!\n\n\n候補を編集する → <" + SPREADSHEET_URL + "|:memo:>";
postMessage(message, SLACK_WEBHOOK);
}
function doPost(e) {
if(e.parameter.user_id == "USLACKBOT"){
return;
}
// 今回はGAS上でキーワードを設定しているのでOutgoing WebHooksでトリガーの設定は不要
if(e.parameter.text.match(/ルーレット/)){
main();
}
}
書き終わったら「公開」ボタンを押してデプロイします。
「公開」 => 「WEBアプリケーションとして導入...」を押してください。
Project versionは「New」です。
Who has access to the appは「Anyone, even anonymous」に設定してください。
設定が終わったら「deploy」を押してください。
( この時ユーザー認証についてGoogleから聞かれる場合がありますが、「許可を確認」を押してください。 )
この、Current web app URLは後で使うのでコピーして控えておいてください。
4. Outgoing WebHooksの設定
まずは、Outgoing WebHooksにアクセスしてください。
チャンネル欄はお好みで。
引き金となる言葉は空欄、URLには先ほどコピーしたCurrent web app URLをペーストしてください。
設定が済んだので「設定を保存する」を押してください。
最後に
以上でSlackBotの作成が完了です。
ルーレット
と送信してみてください。
無事にBotからメッセージが帰って来ましたか?