我們已經成功建立了一套系統,能自動收集資料到 Google Sheets,並在每天早上,將彙整好的戰情報告廣播到 Slack。
這非常棒,團隊成員可以被動地接收每日的宏觀資訊。
但工作中的真實場景,往往是主動且即時的。
【今天的問題】
如果團隊成員 A 在下午突然想知道「XX 專案」目前的負責人是誰;成員 B 想確認一下「OOO 活動」的報名人數。難道他們要等到明早的報告嗎?還是要去翻那個可能已經有數百行的 Google Sheets 總表?
這個過程太繁瑣,資訊的取得有很高的摩擦力。
【今天的解法】
我們要打造一個團隊專屬的查詢機器人。團隊中的任何人,都可以在 Slack 頻道中,透過 @ 我們打造的機器人,加上他們想查詢的關鍵字,n8n 就會化身為一個秒回的智慧助理,立刻去我們的 Google Sheets 中央資料庫查詢,並將結果直接回傳到 Slack。
學習點:Slack (Bot / App Mention) 觸發器、Set 節點(文字解析)、Google Sheets (Search for Rows 模式)。
第一步:設定 n8n 的「耳朵」 (Slack Trigger)
使用 @mention 的好處是,我們幾乎不需要在 Slack 後台做任何複雜的設定。只要確保我們前一天建立的機器人 App (n8n-reporter-bot) 已經被邀請到要使用的頻道裡,剩下的工作就全部在 n8n 內完成。
在 n8n 中,建立一個新的工作流。
點擊第一個節點,在 Trigger 搜尋框中找到 Slack。
Trigger On: 點開下拉選單,選擇 Bot / App Mention。
Credential: 選擇你之前已經建立好的 Slack 憑證。
就這樣,n8n 的耳朵已經設定好了。
現在,只要有任何人在任何頻道 @ 你的機器人,這個工作流就會被立刻觸發。
第二步:解析指令,聽懂人話 (Set 節點)
當使用者在 Slack 中輸入「@n8n-reporter-bot 查詢XX專案」時,n8n 收到的原始文字會包含一段像標籤一樣的使用者 ID,例如 <@U0123ABCDE> 查詢XX專案。
我們需要一個加工步驟,把前面的 <@U0123ABCDE> 去掉,只取出後面真正的查詢指令。
在 Slack Trigger 後面,加上一個 Set 節點,並命名為「解析指令」。
Add Value:
Name: query_keyword
Value (Expression):
{{ $trigger.body.event.text.replace(/<@.*?>\s/, '') }}
第三步:查詢資料庫 (Google Sheets - Search)
現在我們的機器人聽懂了指令,就要開始動腦去資料庫找答案了。
在「解析指令」節點後,加上一個 Google Sheets 節點。
Operation: 選擇 Get row(s) in sheet。
Document / Sheet : 選擇我們的「團隊任務總表」以及要查詢的分頁。
Add Filter: 填入你要在哪一個「欄位」進行搜尋。例如,任務名稱。
Value: 填入我們要搜尋的「關鍵字」。這裡我們就要使用上一步解析出來的乾淨關鍵字:
{{ $json.query_keyword }}
第四步:回覆查詢結果
大腦找到資料後,就要開口回覆了。而且,我們要確保不論「找到」或「找不到」,都能給使用者一個明確的回應。
IF 的 false 出口 (找不到):連接到一個新的 Slack 節點,在 Text 欄位寫:「抱歉,我找不到關於「{{ $items("解析指令")[0].json.query_keyword }}」的任務。」。
IF 的 true 出口 (找到了):連接到另一個新的 Slack 節點,用查到的資料來組合回覆。
Channel: 指定回覆到「當初發問的頻道」:{{ $trigger.body.event.channel }}。
Text: 我們可以用簡單的文字先組合出結果:
嗨!幫你找到了任務進度:
任務名稱: {{ $json.body['任務名稱'] }}
目前狀態: {{ $json.body['狀態'] }}
負責人: {{ $json.body['負責人'] }}
現在,回到你的 Slack,在任何一個有機器人成員的頻道,輸入 @你的機器人名稱 你的任務關鍵字,然後按下 Enter。
幾秒鐘後,你的 n8n 機器人就會帶著查詢結果,優雅地出現在你面前。
今天,你的 n8n 不再只是一個後台的自動化引擎。
你賦予了它一個「互動介面」,讓它成為了團隊成員可以隨時呼叫、即時應答的智慧助理!