天天看點

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

作者:莊志炎

Slack 是學習如何使用事件驅動的後端“無伺服器”應用程式的好方法。 當您使用無伺服器時,您隻需為需要通過您的應用程式每秒處理的事件數量付費,而不是讓伺服器啟動并等待這些事件。

盡管 Lolo 的工作方式略有不同,但她遵循了這個概念,是以在你必須每秒處理超過幾千個事件之前,你根本不需要支付任何費用。 這是令人難以置信的成本效益。

我們将建構一個 HTTP 回調,它将充當我們的 Webhook,并将由 Slack 通過他們的 Slash 指令觸發。 這個想法是讓您處理更複雜的事情,但這讓您了解它是多麼簡單。 我們會打乒乓球。 看看我們下面的工作流程。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

簡要解釋一下我們的 Lolo 工作流程。

  1. 我們首先在菜單面闆中添加一個 HTTP 觸發器,它将充當我們的 Webhook。
  2. 然後我們将在 Response 節點中發回一個帶有 200 狀态碼的響應。這是為了確定我們快速将确認發送回 Slack。
  3. 最後,我們将使用從收到的有效負載中提取的 response_url 發送一個 HTTP 釋出請求。

結果将是 Slack 中的 /ping 斜杠指令将以 pong 響應。

您需要管理者通路 Slack 工作區才能設定您的 Slack 應用程式,然後是免費的 Lolo 帳戶。

設定你的 Lolo 應用和 Webhook

我們需要一個 Slack 的請求 URL,是以當有人使用 /ping 指令時,Slack 可以向我們發送一個事件。是以,我們将首先設定我們的 Lolo 應用程式。

在 Lolo 中建立一個新應用程式并在菜單面闆中添加一個 HTTP 觸發器。一旦你在你的圖表中輕按兩下它,你就可以配置它。

我們将通過“參數”頁籤将其設定為 POST 請求,并将端點設定為 /slack。您也可以将節點重命名為 Slack Webhook,但這是可選的。設定路徑後,複制為您設定的外部 URL。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

我們現在已經設定了觸發器,它将觸發這個應用程式。 您可以儲存您的應用程式,但還不需要運作它。

設定您的 Slack 應用程式

通過 api.slack.com 設定一個新應用程式。 你可以随心所欲地稱呼它。 您将需要對要為其安裝 Slack 工作區的管理者通路權限。

建立應用程式後,轉到 Slash 指令,您将在其中設定新指令。 使用您剛剛從 Lolo 應用程式複制的 URL。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

請記住也将應用程式安裝到您的工作區。 導航到您的 Slack 應用程式的基本設定以執行此操作。 每當您添加斜杠指令時,您都需要将應用程式重新安裝到您的工作區。

響應 HTTP 調用

Slack 指令将期望在 3 秒内得到響應,是以當對您的 URL 進行 HTTP 調用時,首先要做的是在 Lolo 應用程式中發出帶有 200 狀态代碼的響應。

Slack 将向我們發送帶有有效負載對象的資料,我們可以使用它來響應。 也就是說,我們不直接響應斜杠指令,我們隻是提取 response_url 以便我們稍後可以通過 POST 請求發回對消息的響應。 這也允許您在回答之前進行更多處理。

首先在您的 Lolo 應用程式中建立一個新函數,然後在其處理程式中添加以下代碼。

exports.handler = async(ev, ctx) => {
  const { emit, log, route } = ctx;

  // send back a response to Slack
  emit('response', {statusCode: '200'});

  // Log contents of the payload Slack has sent us 
  log.info("slack data: ", ev.body);

  // route the payload data to the next function/node
  route(ev.body);
};           

通過像使用 route(ev.body) 一樣将 Slack 有效負載資料路由到下一個函數,我們可以在下一個節點/函數中提取 response_url。 這個 Slack 應用程式隻做兩件事,是以我們不需要從有效負載中提取太多内容,但是當您建構更豐富的 Slack 應用程式時,您将希望提取有關指令的更多資訊,而不僅僅是 response_url,是以我們将 路由整個有效載荷。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

請記住,還要将 HTTP 觸發器與您建立的新函數連接配接起來。 需要連接配接節點以使代碼能夠在exports.handler 中運作。

儲存并運作您的應用程式。

如果您已将應用程式安裝到您的 Slack 工作區,您現在可以測試您在 Slack 中設定的指令。 它不會給你任何回報,但隻要它不給你一個錯誤,你就知道它正在工作。

向 Slack 發回響應

我們需要做的最後一件事是使用該 response_url 向 Slack 發送一個 HTTP POST 請求以及我們對指令的回答。 是以我們可以看到對 /ping 指令的 pong 響應。

在您的 Lolo 圖中建立另一個新函數并添加以下代碼。

const Fetch = require("node-fetch");

exports.handler = async (ev, ctx) => {
  const { log } = ctx;
  const responseURL = ev.response_url;

  // our Slack response
  const body = {
    replace_original: "false",
    text: "pong"
  };

  // send back the Slack response
  Fetch(responseURL, {
    method: "post",
    body: JSON.stringify(body),
    headers: {"Content-Type": "application/json"}
  }).catch(err => log.info(err));
};           

我們還需要添加 [email protected] 作為依賴項,以便能夠在我們的代碼中使用它。 在 Lolo 的應用程式設定中導航到子產品,然後将其添加到那裡。 它将在您儲存并運作您的應用程式時安裝。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

總而言之,如果您添加了新函數,在其處理程式中添加了上面的代碼,在您的子產品中添加了 [email protected] 并連接配接了所有節點,您可以再次儲存并運作您的應用程式。

請注意,由于我們已經安裝了依賴項,是以現在部署可能需要一分鐘。 在 Logs 中查找 Listen to Port 4000 以檢視它是否已成功部署。 您可以來回更改标簽,我們都可以。

測試您的 Slack 應用程式

打開您的 Slack,然後再次嘗試您的斜杠指令。 我已經設定了 /ping 并且我的響應将是 pong。 看看下面的樣子。

七爪源碼:在幾分鐘内使用無伺服器建構 Slack 應用程式

從這裡您可以使用消息中的 Slack 操作添加到它,然後在使用者與其互動時從有效負載事件中提取值。 有關建立 slack 消息的幫助,請參閱 Slack 的 Block Kit 建構器。

關注七爪網,擷取更多APP/小程式/網站源碼資源!

繼續閱讀