原來 Slack 通知還蠻多人用的
之前跟別的公司開會時,突然對方說了一句:「現在很流行主機發生問題,就發送 Slack 訊息來通知。」
August 聽到後才想到,啊對,也有身邊朋友的公司就是用 Slack 來通知主機或哪裡有問題的,就想說來研究一下,寫個一篇。
純靜態?
那為什麼標題上要加個「純靜態」呢?是因為這篇寫的自動通知,就是單純發送個訊息的,無法跟訊息有互動。
Slack 的通知除了發送純文字外,還可以加上按鈕、選單,那就得要建一個 App,當使用者點了按鈕或是選單,App 就可以判斷選了哪個選項,給下一步的動作,對,就是機器人。
這種可互動的寫在下一篇:Slack 通知功能 可互動
本篇主要寫純通知的功能。
註冊 Slack,跳過
基本上會看這篇,就代表用了 Slack 一段時間了,知道 Slack 要怎麼用。
像 August 這種公司沒在用的,自己東摸摸西摸摸一下,也不小心就註冊了一個 Workspace,建了一個 Channel 來玩自動通知。
所以聰明如你,關於怎麼安裝跟建一個 Workspace、Channel 的部份,這篇就不寫了,咱們繼續看下去。
1 開通自動通知功能
自動通知不是預設就有的功能,要另外裝 App 來使用。
登入進 Slack 後,右側會有一排選單,點選「Apps」展開子選單,接著點「Add App」:
會出現一個搜尋框,輸入「incoming」,就會看見第一個結果是「Incoming WebHooks」:
Incoming WebHooks 就是要安裝的 App,點了以後會跳出 Incoming WebHooks 的頁面:
接著點「Add to Slack」,會出現一個詢問要裝在哪個 Channel 的選單,選擇好後就,按下「Incoming WebHooks integration」。
安裝完後,會進到 Incoming Webhooks 的設定頁面:
頁面裡第一行「Webhook URL」最重要,我們只要 POST 到這個 URL,就可以發出自動通知的訊息。
Webhook URL 的格式會是這樣:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
我們先存起來,之後發自動通知的部份會用到。
除了提供 URL,這個頁面也有一些基本使用範例,也可以設定自動通知的頭像。都確認完後就可以按下最下面的「Save Settings」。
1-2 忘記了 Webhook URL?
這邊補一段,如果沒存到 Webhook URL 該怎麼辦?
一樣進登入 Slack,接著看向左側的選單,上面會有一個「Apps」的按鈕:
接著會出現安裝了什麼 App,會看見我們之前裝的 App:
顯示的頭像跟名稱會是我們在設定頁那邊設定的,所以不會是這邊的 Demo 圖。
點選 App 後,會出現這個 App 是哪一個功能的,因為我們是安裝 Incoming Webhook,所以會出現的是 Incoming Webhook 的資料:
接著點「View in App Directory」,就會開啟網頁,會看到我們的 App:
最後 App 旁邊的鉛筆按鈕,就會回到設定頁面,頁面裡就有 Webhook URL 了。
2 發送訊息
有了 Webhook URL 後,就可以 POST 到這個 URL 來發送訊息。
August 這邊寫了三段,分別是用 fetch API、jQuery 的 POST,以及在 Google Apps Script 上的 POST 方式:
var webhook_url
要替換成你取得的 Webhook URL。
如果訊息上想要折行,就用 \n
。
試發一下後,會看見收到訊息了:
因為自動發送訊息是由 App 發送的,所以名稱右側會出現「App」字樣。顯示的名稱跟頭像就是我們在設定頁上設定的。
3 設定自動發送
自動發送的部份,如果是主機掛了要自動通知,那就是主機的專業領域了,August 不懂主機那塊這邊就不亂寫。
這邊會寫的是定時發送的。
如果主機是用 Google Cloud Platform 的話,可以建一個 cron.yaml 檔案來觸發 POST,請參考這篇:
簡單來說就是新增一個 corn.yaml 檔,然後布署到 GCP 上就行。
如果是用 Google Apps Script 的排程,請參考這篇:
簡單來說就是可以直接用 GAS 的介面來新增,但最小單位是小時,無法控到幾分鐘的部份。
4 除了純文字的訊息,還有多種格式
Slack 自動發送的訊息格式,除了純文字外,也有提供多種格式,還貼心的提供了生成器:
https://api.slack.com/tools/block-kit-builder
一整個好棒棒,但要注意的是,本篇筆記的是純靜態的訊息,所以如果在生成器用了按鈕或選單,收到訊息的人點擊後是不會有任何效果及回應的。
但還是可以用他的生成器建立一些不同於純文字的訊息,像這樣:
或是這樣:
可以用生成器玩一下不同的訊息樣式。