Slack 是目前非常流行的溝通協作工具, 而且也支援API 提供呼叫。 有時想把一些系統重要訊息丟到Slack頻道裡,方便監控,甚至還能在手機上直接看,那將會非常實用.
Slack App Directory
Slack 有一個 App Directory (可理解為 Slack外掛商店), 這次使用的是 Incoming WebHooks , 可透過它,以HTTP Request方式傳遞訊息進去Slack. 如果只是單向傳訊息的用途, 那使用這App是不錯的選擇.
以下是操作步驟:
- 到Incoming WebHooks 這個App頁面申請 ,取得Webhook URL
- 發出 HTTP Request, 傳遞訊息進去 Slack
取得Webhook URL
以下是取得 Webhook URL的步驟
- 先登入 Slack
- 進入Incoming WebHooks 頁面 https://my.slack.com/services/new/incoming-webhook/
- 選擇你想傳訊息進去的Slack頻道 (例: #test) (圖1)
- 取得 Webhook URL (圖2)
圖1: 選擇Slack頻道
圖2: 取得Webhook URL
呼叫範例
說明: 將訊息整理成 JSON 格式, 然後使用 HTTP Request (POST)傳進去URL 即可. 然而,這個 Webhook URL 直接寫在程式碼裡,可能會有點安全性的考量,可考慮改從環境變數讀進來較佳. * 依照 Slack 的文件, 你的發送頻率原則上最多是每秒1則 (允許小量的突發)
這邊提供三種呼叫方式供參考:
- cURL
- Python
- Node.js
使用 cURL
使用cURL 的方式:
curl -X POST -H "Content-type:application/json" --data '{"text":"HelloWorld!!"}' https://hooks.slack.com/services/T00000000/B00000000/000000000000000000000000
在Windows 下, cURL 遇到JSON的格式,需要一些跳脫字元才能搞定, 例如:
curl -X POST -H "Content-type:application/json" --data "{\"text\":\"HelloWorld!!\"}" https://hooks.slack.com/services/T00000000/B00000000/000000000000000000000000
使用 Python
# encoding: utf-8
import json
import requests
def main():
'''main
'''
# HTTP POST Request
s_url = 'https://hooks.slack.com/services/T00000000/B00000000/000000000000000000000000'
dict_headers = {'Content-type': 'application/json'}
dict_payload = {
"text": "[EC2] 有一台 p2.16xlarge 啟動($14.4/hr)! 快去瞧瞧! Instance ID: i-0f79c4167c706776c "}
json_payload = json.dumps(dict_payload)
rtn = requests.post(s_url, data=json_payload, headers=dict_headers)
print(rtn.text)
return None
if __name__ == '__main__':
main()
使用 Node.js
var request = require('request');
var options = {
uri: 'https://hooks.slack.com/services/T00000000/B00000000/000000000000000000000000',
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
json: {
"text": "[EC2] 有一台 p2.16xlarge 啟動($14.4/hr)! 快去瞧瞧! Instance ID: i-0f79c4167c706776c"
}
};
request(options, function (error, response, body) {
console.log(body)
});