Slack 自動訊息通知

不知道你有沒有聽過 Slack?剛接觸 Slack 的時候,會覺得好像又是一套即時通訊軟體,但 Slack 本質上卻是個「團隊溝通平台」,有別於 Line 或 FB 訊息,Slack 更具備了特別為工作、專案...等所設計的功能和體驗,也因此現在許多的公司、團隊,都使用 Slack 作為內部訊息溝通的平台。
Slack 內建了可以串接各個服務與推播的能力,換句話說像是日曆、專案管理軟體、甚至是程式代碼都可以和它串接,做到無縫接軌的推播功能,這篇將會介紹如何透過 Slack,實現自動訊息通知的效果。
開始使用 Slack
進入 Slack 的官網 ( https://slack.com/ ) 或下載它的軟體安裝,有別於一般的通訊軟體,Slack 的概念是要建立一個 WorkSpace 或加入已經存在的 WorkSpace,所以如果沒有 WorkSpace,是沒有辦法使用的,如果你已經有註冊,可以點選 sign in 來找自己的 WorkSpace。
![]()
進入自己的 WorkSpace 之後,可以看到有很多的 Channel 可以使用,這裡就先使用 general 這個 Channel,來作為待會訊息通知的頻道。
![]()
安裝 Incoming WebHooks
點選 WorkSpace 右上方的小齒輪 icon,點選「Add an app」,增加一些應用程式到 WorkSpace 裡。
![]()
打開後點選上方選單的 Manage。
![]()
打開後再搜尋的地方,搜尋「Incoming WebHooks」
![]()
搜尋到 Incoming WebHooks 之後,點擊「Add configuration」將其增加到 WorkSpace 的配置當中。
![]()
接著就可以在 Manage 的 Custom Integrations 裡,看到 Incoming WebHooks,到這一步就算是安裝完成了。
![]()
設定 Incoming WebHooks
點擊 Incoming WebHooks 後方的筆型 icon,就可以開始進行相關設定。
![]()
說設定其實也不算設定,就只是要取得這串 Webhook URL 網址,有了這串網址,我們就可以可以透過 HTTP ,發送訊息到這個 WorkSpace 裡指定的 Channel。
![]()
發出第一則訊息
發訊息可以直接透過 CURL 命令來完成,輸入下列這些指令,就會有個名為「機器人」的通知機器人,發送出「大家好」的訊息,同時會顯示一隻「蟲」的圖案 ( empji ),按下 enter 發送成功之後就會顯示 ok,這時候在 Channel 裏頭,就會看到訊息通知了。。
curl -X POST \
--data-urlencode 'payload={"channel": "#general", "username": "機器人", "text": "大家好", "icon_emoji": ":bug:"}' \
https://hooks.slack.com/services/XXXX/XXXX/XXXXXXXXXXX
![]()
![]()
透過網頁發送訊息到 Slack
透過 JQuery 的 AJAX,就能夠很輕鬆地透過網頁,把訊息發送到 Slack 上,舉例來說,做個簡單的網頁,在裡頭放個輸入欄位和按鈕,搭配 JQuery 的寫法,就完成一個讓使用者可以發訊息給自己的簡單功能。
HTML
<input id="in">
<button id="btn">送出</button>
JavaScript
$('#btn').on('click', function() {
var text = $('#in').val();
slack(text);
});
function slack(t) {
var url = 'https://hooks.slack.com/services/XXXXX/XXXXXX/XXXXXXXX';
var channel = '#general';
var username = 'bot';
var emoji = ':bug:';
$.ajax({
data: 'payload=' + JSON.stringify({
"channel": channel,
"username": username,
"text": t,
"icon_emoji": emoji
}),
dataType: 'json',
processData: false,
type: 'POST',
url: url
});
}
![]()
透過 Node.js 發送訊息到 Slack
既然會在網頁前端發訊息,理所當然的可以在 Node.js 裡發訊息給 Slack,透過 request,在執行 Node.js 程式的當下,就會發送訊息到 general 頻道囉!
var request = require("request");
var slackurl = 'https://hooks.slack.com/services/XXXXX/XXXXXX/XXXXXXXX';
var channel = '#general';
var username = 'bot';
var text = 'Node.js 發的訊息';
var emoji = ':bug:';
var options = {
url: slackurl,
form: 'payload=' + JSON.stringify({
"channel": channel,
"username": username,
"text": text,
"icon_emoji": emoji
})
};
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
console.log('ok');
} else {
console.log('error: '+ response.statusCode + body);
}
});
透過 Google App Script 發送訊息到 Slack
因為我自己沒有伺服器空間,所以就算會用 Node.js 發送訊息,但仍然沒有辦法讓這個機器人 24 小時不休息,所以就嘗試使用 Google App Script 的UrlFetchApp來完成,因為 App Script 可以指定「觸發時間」,舉例來說就可以指定在中午 12:00 發送個訊息提醒要吃飯,或是下午六點發訊息提醒要下班,都是可以很輕鬆的實現。
function myFunction() {
var POST_URL = "https://hooks.slack.com/services/XXXXX/XXXXXX/XXXXXXXX";
var channel = '#general';
var username = 'bot';
var text = 'cool!!!';
var emoji = ':bug:';
var options = {
"method" : "post",
"payload": JSON.stringify({
"channel": channel,
"username": username,
"text": text,
"icon_emoji": emoji
})
};
UrlFetchApp.fetch(POST_URL, options);
}
![]()
小結
以上大概就是透過幾種不同的方式,傳送訊息到 Slack 裡指定的 Channel,這個方法在公司裡其實很好用,例如我自己公司裡頭幾個厲害的工程師,寫了許多的通知程式,會在伺服器發生狀況的時候及時通知,也會提醒大家要記得訂便當,而我自己則是用它來寫寫爬蟲與寄送電子報的通知,例如爬完資料就通知一下,電子報全部寄出之後就會發送通知,很好玩也很方便呦~