経緯
- 毎朝電話当番の通知を手動で書き込んでいるのをなんとかしたい!
- botつくってみたい!!!!! ←本音
参考にさせて頂きました
GoogleAppsScriptからSlackに通知を送るスクリプト - ①
Slack APIのTokenの取得・場所
弊社猫会長に日直当番を任命していただくbotを作った
材料
- slack
- googleアカウント
- ノリと勢い
作り方
1.GoogleDriveにスプレッドシートを作成
GoogleDriveを開いて右クリックでgoogleスプレッドシートを作成
2.スクリプトエディタを開いて上記リンクからソースコードコピペどーん
スプレッドシートのツール>スクリプトエディタを開く
3.上記リンクを参考にslackのtokenをゲットしてメモしておく
作りたいチャンネルの横のCreate Tokenボタンを押すと生成されるので忘れずにメモ等する
4.コピペして作成したスクリプトにtokenやらbotの名前やらをかいていく
(function(global){
var Slack = (function() {
function Slack(options){
var options = options || {};
this.url = options.url || "https://slack.com/api/chat.postMessage";
this.token = options.token || "メモしたtoken";
this.channel = options.channel || "#チャンネル名";
this.username = options.username || "botの名前";
this.icon_emoji = options.icon_emoji || "botのアイコン";
}
Slack.prototype.send = function(text) {
var self = this;
UrlFetchApp.fetch(self.url, {
"method" : "POST",
"payload" : {
token: self.token,
channel: self.channel,
username: self.username,
icon_emoji: self.icon_emoji,
text: text
}
});
};
return Slack;
})();
global.Slack = Slack;
})(this);
5.メインスクリプトを勢いで編集
function myFunction() {
//平日のみ実行
var currentDate = new Date();
if (!isWeekDay(currentDate)) {
return;
}
//祝日は実行しない
if (isEventsForDay(currentDate)) {
return;
}
var slack = new Slack();
//Sheetとの接続
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A1:A6");
var count = range.getNumRows();
var members = range.getValues();
var mainUser = members[0];
var subUser = members[1];
var msg = "本日の電話当番です。";
slack.send(msg);
msg = "メイン: " + mainUser;
slack.send(msg);
msg = "サブ: " + subUser;
slack.send(msg);
//先頭1人を後へ
for(var i = 1; i < count; i++){
range.getCell(i, 1).setValue(members[i]);
}
range.getCell(count, 1).setValue(mainUser);
}
6.トリガーを設定する
スクリプトエディタの上にある 編集>現在のプロジェクトのトリガー もしくは時計マークを押して作成しましょう。
設定は以下のようにしてます。
- 実行したい関数名
- 時間主導型
- 日タイマー
- 午前 9時〜10時
まとめ
GASを使うとかんたんなbotならひよっこな自分でもらくらく作成できましたので、ぜひぜひみなさんも作ってみてくださいね_( _*°ヮ。)_
追記
いつからかメンションの表記方法が変わったのでメモ
以前の表記方法は<@username>
でメンションできましたが、
現在はユーザーごとに設定されているユニークなid(Uから始まる大文字英数字9文字)<@user_id>
でなければメンションされません。
Slack Api user.listなどのテスターで確認しましょう。ヾ( ノシ*°ヮ。)ノシ
参考 -> SlackのAPI経由でのメンションの仕様変更(2018/9/12~)