Slack 是目前非常流行的溝通協作工具, 而且也支援API 提供呼叫。 有時想把一些系統重要訊息丟到Slack頻道裡,方便監控,甚至還能在手機上直接看,那將會非常實用.

--

Slack App Directory

Slack 有一個 App Directory (可理解為 Slack外掛商店), 這次使用的是 Incoming WebHooks , 可透過它,以HTTP Request方式傳遞訊息進去Slack. 如果只是單向傳訊息的用途, 那使用這App是不錯的選擇.

以下是操作步驟:

  1. 到Incoming WebHooks 這個App頁面申請 ,取得Webhook URL
  2. 發出 HTTP Request, 傳遞訊息進去 Slack

取得Webhook URL

以下是取得 Webhook URL的步驟

圖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)
});

參考資料