[教學] 如何透過webhook將訊息送進slack

Slack是現在很多辦公的人在使用的溝通工具,除了可以在上面能互相交流以外,也可以建立public或是private的頻道將做相關專案的人放置同一個群組,也能夠設定允許通知的時間,可以設定上班的時間才會通知,這樣子在下班時間即使有人密語,手機APP也不會跳通知出來,另外對工程師最有趣的部分是可以接機器人,依據收到的訊息解析後用機器人自動回訊息,也能透過外部自動直接把訊息傳至頻道或特定人士,可以讓watchdog這樣的程式再有警急的時候用slack通知,本篇教學如何透過外部將訊息送至slack。

使用Webhook將訊息送至特定人士或channel

要到slack網頁上https://my.slack.com/services/new/incoming-webhook/ 申請一個webhook的url

先選擇自己想要通知訊息的channel或是 user

接著便可以取得webhook的 url 將其記下

另外這個頁面可以設定webhook的icon與機器人名稱

如果webhook有加成功channel會顯示有加成功的訊息

接下來就可以寫程式來送通知訊息了

這邊以最簡單的訊息當作範例 (其他更進階的格式可以參考官方document: https://api.slack.com/incoming-webhooks)

首先我們要送的訊息為

Hello Slack Webhook

將其包成JSON格式

{
    "text" : "Hello Slack Webhook"
}

接著只要這個JSON資料POST到剛剛取得的webhook的url就可以了

這邊以PHP程式碼當作範例:

<?php
$webhook_url = "取得的webhook url";
$json_data = [
    "text" => "Hello Slack Webhook"
];

// POST 資料
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $webhook_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json_data));
curl_exec($ch);
curl_close($ch);

傳送成功後就會看到channel中顯示送出的訊息