[Mattermost 教學#8] 傳入的Webhook範例說明

[Mattermost 教學#7] Mattermost的OAuth 2.0應用程式整合的操作步驟提及Mattermost有四種整合方法:傳入的網站的Webhook(網路掛接)、傳出的Webhooks、斜線命令和OAuth 2.0應用程式,而由我們應用程式「餵」給Mattermost的最簡單作法就是Incoming Webhooks了。以下是操作傳入網站掛接的步驟。

1. 建立傳入掛接

由主選單【整合】→點擊【傳入的Webhook】,再按右上方的【增加傳入的Webhook】,依序填入欄位資料。範例中傳入的訊息預設會輸出到公眾大廳(Town-square)。

add

按〔儲存〕後將此網路掛接的網址複製起來,這個網址就是我們要傳入訊息的對象。
save link

2. 撰寫傳送訊息的程式

接著就是寫支傳送訊息的程式來測試看看。程式很簡單,隨便看看都能懂。回應的格式是JSON:{"text": "要顯示在頻道上的訊息"}

package com.company.test;

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

/**
 * Test for sending message to http://localhost:8065/hooks/d1e6r6z8tfbnxnwfa4bhcdsjpo.
 *
 * @version Jerry 2018-05-10 22:24
 */
public class TestIncoming {
  private static HttpURLConnection con;

  public static void main(String[] args) throws Exception {
    try {
      // 1. 建立連線
      String myWebhook = "http://localhost:8065/hooks/d1e6r6z8tfbnxnwfa4bhcdsjpo";
      URL url = new URL(myWebhook);
      URLConnection urlConnection = url.openConnection();

      con = (HttpURLConnection) urlConnection;
      con.setDoInput(true);
      con.setDoOutput(true);
      con.setUseCaches(false);
      con.setRequestMethod("POST");
      con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

      // 2. 送出訊息
      //language=JSON
      String msg = "{\"text\":\"Incoming Webhook 測試\"}";
      DataOutputStream _oDataOutput = new DataOutputStream(con.getOutputStream());
      byte[] bytes = msg.getBytes("UTF-8");
      _oDataOutput.write(bytes);

      // 3. 查看結果
      int code = con.getResponseCode();
      if (code != 200) {
        System.out.println("Error " + code + " " + con.getResponseMessage());
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      con.disconnect();
    }
  }
}

輸出結果如下:

sample output

3. 增加額外的輸出

輸出的JSON可以再加上額外的欄位,讓輸出呈現不同的樣貌。

  1. icon_url: 變更預設的圖示網址
  2. username: 變更設定的使用者名稱,由設定的incoming-message變更為指定的名稱
  3. channel: 變更輸出的頻道,要輸出給某個用戶則用「@用戶名稱」

以下把msg變數修改為額外欄位:

String msg = "{\"text\":\"Incoming Webhook 測試\", \n" +
  " \"icon_url\": \"http://localhost:8065/static/emoji/1f61c.png\", \n" +
  " \"username\":\"傳入的掛接\",\n" +
  " \"channel\": \"off-topic\"\n" +
  "}";

訊息輸出到指定的閒聊(off-topic)頻道:

send output

4. 使用附件格式

如果想要輸出更多格式,則可以再指訊息附件(attachments)欄位,attachments是個陣列,其內欄位定義可參考Message Attachments — Mattermost 4.10 documentation,範例如下;幾個欄位說明如下:

  • fallback: 彙總訊息的文字
  • color: 垂直的側邊條顏色
  • pretext: 附件之前的文字
String msg = "{\n" +
    "  \"text\": \"Incoming Webhook 測試\",\n" +
    "  \"icon_url\": \"http://localhost:8065/static/emoji/1f61c.png\",\n" +
    "  \"username\": \"傳入的掛接\",\n" +
    "  \"channel\": \"off-topic\",\n" +
    "  \"attachments\": [\n" +
    "    {\n" +
    "\"fallback\": \"訊息識別\",\n" +
    "\"color\": \"#ff0000\",\n" +
    "\"pretext\": \"pretext: 先導文字\",\n" +
    "\"author_name\": \"作者名稱\",\n" +
    "\"author_icon\": \"http://localhost:8065/static/emoji/1f61c.png\",\n" +
    "\"author_link\": \"http://jdev.tw/blog\",\n" +
    "\"title\": \"title: [分享] 濱野純訪談:為什麼 Google 接管開發 Git 2.0 了?\",\n" +
    "\"title_link\": \"http://jdev.tw/blog/5359/hamano-interview-git-2-0\",\n" +
    "\"text\": \"text: 訊息內容\",\n" +
    "\"image_url\": \"http://jdev.tw/blog/wp-content/uploads/2014/09/git-logo.png\",\n" +
    "\"fields\": [\n" +
    "  {\n" +
    "    \"short\": false,\n" +
    "    \"title\": \"長格式欄位\",\n" +
    "    \"value\": \"導讀:最近 Google 推出了 Git 協議的 2.0 版。\" \n" +
    "  },\n" +
    "  {\n" +
    "    \"short\": true,\n" +
    "    \"title\": \"短格式欄位1\",\n" +
    "    \"value\": \"短格式欄位1的內容描述\" \n" +
    "  },\n" +
    "  {\n" +
    "    \"short\": true,\n" +
    "    \"title\": \"短格式欄位2\",\n" +
    "    \"value\": \"短格式欄位2的內容描述\" \n" +
    "  },\n" +
    "  {\n" +
    "    \"short\": true,\n" +
    "    \"title\": \"短格式欄位3\",\n" +
    "    \"value\": \"短格式欄位3的內容描述\" \n" +
    "  }\n" +
    "]\n" +
    "    }\n" +
    "  ]\n" +
    "}";

attachments

附件還可以再加上actions欄位來定義互動式按鈕(Interactive Message Buttons),請待下回分解。

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

2 個回應

  1. RustyNail表示:

    太棒了,谢谢你的文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *