Slack 是學習如何使用事件驅動的後端“無伺服器”應用程式的好方法。 當您使用無伺服器時,您隻需為需要通過您的應用程式每秒處理的事件數量付費,而不是讓伺服器啟動并等待這些事件。
盡管 Lolo 的工作方式略有不同,但她遵循了這個概念,是以在你必須每秒處理超過幾千個事件之前,你根本不需要支付任何費用。 這是令人難以置信的成本效益。
我們将建構一個 HTTP 回調,它将充當我們的 Webhook,并将由 Slack 通過他們的 Slash 指令觸發。 這個想法是讓您處理更複雜的事情,但這讓您了解它是多麼簡單。 我們會打乒乓球。 看看我們下面的工作流程。
簡要解釋一下我們的 Lolo 工作流程。
- 我們首先在菜單面闆中添加一個 HTTP 觸發器,它将充當我們的 Webhook。
- 然後我們将在 Response 節點中發回一個帶有 200 狀态碼的響應。這是為了確定我們快速将确認發送回 Slack。
- 最後,我們将使用從收到的有效負載中提取的 response_url 發送一個 HTTP 釋出請求。
結果将是 Slack 中的 /ping 斜杠指令将以 pong 響應。
您需要管理者通路 Slack 工作區才能設定您的 Slack 應用程式,然後是免費的 Lolo 帳戶。
設定你的 Lolo 應用和 Webhook
我們需要一個 Slack 的請求 URL,是以當有人使用 /ping 指令時,Slack 可以向我們發送一個事件。是以,我們将首先設定我們的 Lolo 應用程式。
在 Lolo 中建立一個新應用程式并在菜單面闆中添加一個 HTTP 觸發器。一旦你在你的圖表中輕按兩下它,你就可以配置它。
我們将通過“參數”頁籤将其設定為 POST 請求,并将端點設定為 /slack。您也可以将節點重命名為 Slack Webhook,但這是可選的。設定路徑後,複制為您設定的外部 URL。
我們現在已經設定了觸發器,它将觸發這個應用程式。 您可以儲存您的應用程式,但還不需要運作它。
設定您的 Slack 應用程式
通過 api.slack.com 設定一個新應用程式。 你可以随心所欲地稱呼它。 您将需要對要為其安裝 Slack 工作區的管理者通路權限。
建立應用程式後,轉到 Slash 指令,您将在其中設定新指令。 使用您剛剛從 Lolo 應用程式複制的 URL。
請記住也将應用程式安裝到您的工作區。 導航到您的 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,是以我們将 路由整個有效載荷。
請記住,還要将 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 的應用程式設定中導航到子產品,然後将其添加到那裡。 它将在您儲存并運作您的應用程式時安裝。
總而言之,如果您添加了新函數,在其處理程式中添加了上面的代碼,在您的子產品中添加了 [email protected] 并連接配接了所有節點,您可以再次儲存并運作您的應用程式。
請注意,由于我們已經安裝了依賴項,是以現在部署可能需要一分鐘。 在 Logs 中查找 Listen to Port 4000 以檢視它是否已成功部署。 您可以來回更改标簽,我們都可以。
測試您的 Slack 應用程式
打開您的 Slack,然後再次嘗試您的斜杠指令。 我已經設定了 /ping 并且我的響應将是 pong。 看看下面的樣子。
從這裡您可以使用消息中的 Slack 操作添加到它,然後在使用者與其互動時從有效負載事件中提取值。 有關建立 slack 消息的幫助,請參閱 Slack 的 Block Kit 建構器。
關注七爪網,擷取更多APP/小程式/網站源碼資源!