iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
IT 管理

《把瑣事交給 n8n:零基礎自動化工作流實戰》系列 第 24

Day 24: 【n8n x Webhook - 3】利用 Memory 打造 FB Messenger 智慧 AI 客服

  • 分享至 

  • xImage
  •  

昨天,我們讓 n8n 學會「看懂」外部世界 —— 它能辨識圖片、提取發票資訊,甚至自動對獎。
但這位助理還有個限制:他能「看」、能「聽」、能「說」,但不記得你說過什麼。
今天,我們要讓他學會對話、理解上下文,並記住使用者曾經說過的話,不再只是機械地回一句訊息,而能像人一樣「聊天」。
在今天的文章裡,會帶你完成以下四件事:

  • 開通 Facebook Webhook:讓 Messenger 訊息能即時觸發 n8n
  • 接收使用者訊息內容:取得用戶傳到粉專聊天室中的文字或圖片
  • 串接 AI Agent 與 Memory Tool:讓 AI 記得對話脈絡,產生更自然的回覆
  • 自動回傳 AI 回應:實現能互動、能理解的智慧客服

今天,我們要讓這位 AI 助理正式化身為一名 「n8n 官方周邊商品店」的電商客服人員 —— Nody。 他不只是回答問題,更懂得推銷商品、維持對話溫度,讓顧客的每一次提問,都成為一次愉快的購物體驗。讓我們直接開始吧!


一、開通 Facebook Webhook

前置作業

  • 在Meta Devekopers 中建立一個 APP
    • 可以沿用之前 IG 發文所創立的 Meta 應用程式
    • 詳情可見 FB篇 的文章
  • 已有 APP 者,可以在應用程式首頁「為應用程式新增產品」→ 選「Messenger」→ 進入 Messenger API 設定
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017H5ObJGPMsl.png

可以在應用程式介面左邊導航欄看有沒有 webhook 或是 Messenger 的項目,沒有的話就需要新增產品。

綁定 webhook

  1. 將 webhook URL 填入「回呼網址」中、「驗證權杖」填入回呼網址斜線後的那串(其實就是 n8n Webhook Trigger 中,Path欄位的內容)
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017NA0wjLwvgs.png

  2. 回到 n8n,建立一個工作流,添加一個 Webhook Trigger

    • HTTP Method 設成 get
    • Respond 設成 Using 'Respond to Webhook' Node
  3. 在 Webhook Trigger 後方添加一個 Respond to Webhook 節點

    • Response Body 設成 {{ $json.query['hub.challenge'] }}
      (記得要是 expression 狀態,FB 會透過 hub.challenge 這個參數驗證 webhook 有效性)
  4. execute workflow,使得 Webhook Trigger 在 Listening for Event 狀態(如果是 Test URL,那就是Listening for Test Event)

  5. 回到 Meta Developers 應用程式頁面,點選 【驗證並儲存】
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017IoRlXDACKv.png

此時認證會完成,如果進到另一個設定Webhooks 頁面,就和前面的幾乎一樣,重複步驟 1.、4.、5.
https://ithelp.ithome.com.tw/upload/images/20251008/20178017Qht6OZonwh.png

接下來應該就會回到應用程式設定介面,下方會出現 webhook 欄位內容。到這裡,你已經完成最麻煩的一步了。
https://ithelp.ithome.com.tw/upload/images/20251008/201780172oC0Zcs4F3.png

重點提示

  • 在點選 【驗證並儲存】 的當下,Webhook Trigger 必須正在 Listening 狀態,否則驗證會失敗。
  • n8n 的 Webhook URL 分為兩種:
    • Test URL:用於開發階段,可立即測試事件觸發。
    • Production URL:正式啟用後使用。
  • 若最初使用 Test URL 綁定,之後改成 Production URL 時,必須重複前面的步驟 重新驗證一次
  • Production URL 的事件監聽只有在工作流啟用(Active)時才有效,且在編輯介面上看不到觸發狀態,需到 Executions 頁籤查看事件記錄,這點務必注意

與 LINE 的綁定流程差異

LINE 綁定 Webhook 時,只需要貼上 URL 即可完成;但 Messenger 會多一步驗證流程 —— 你必須回傳hub.challenge給 Facebook,用來確認你的 Webhook 是否有效,並且這個驗證可能會須要進行兩次,麻煩非常多 ==。

不同的 Webhook Trigger 節點會有不同的 URL,因此建議不要換 Trigger 節點,不然換一個 Trigger 就要重新設定一次(但也可以拿來當練習)

綁定粉絲專頁

接下來要綁定粉絲專頁,左側導航欄「產品」→ Messenger → Messenger API ,理論上綁定成功的話,會發現「設定 Webhooks」的卡片前面有一個綠勾勾,底下有一堆欄位

  • 往下滑,滑到「2. 產生存取權杖」的卡片,確認一下是否有綁定你要接收訊息的粉絲專頁。
    沒有的話,點選「連結」按鈕,選擇要接收訊息的粉絲專頁
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017P8AfTNFrVD.png
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017eAT8nFrhGH.png

  • 綁定成功的話,在「2. 產生存取權杖」的卡片左上角會顯示綠勾勾、中間會顯示已綁定的粉專
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017DNAAFD3Tr0.png

  • 點選【新增訂閱】,開通 Messenger API 的權限 (至少要開啟下面框起來的四個,保險一點也可以全開)
    https://ithelp.ithome.com.tw/upload/images/20251008/2017801714ab1GB6cI.png

取得 Messenger API 權杖(回覆訊息會用到)

若要回覆訊息,需要有 API 權杖。

  • 在「2. 產生存取權杖」點選權杖【產生】,就會出現產生權杖的視窗。
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017sQKldJ0eEK.png

  • 在 n8n 中添加粉專回覆權杖:加到 Facebook Graph API Credentials,建議命名一下,和之前粉專發文的區分開來
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017sKe5Skxo90.png

測試是否可接收到傳到粉專訊息

回到 n8n,把剛剛的 Webhook Trigger Method調回 POSTRespond 調回 Immediate (可以斷開與 Respond to Webhook 的連結) → 執行工作流(或切成 Listening for Test Event 狀態)→ 傳遞訊息到粉專聊天室 → Webhook Trigger 節點會接收到訊息

https://ithelp.ithome.com.tw/upload/images/20251008/201780170bHi0kCRS8.png

從 Webhook Trigger 的 output 會看得到資料的結構,而我們接下來就是要針對接收到的訊息進行處理、回覆


二、接收 Messenger 訊息

解析文字訊息結構

從上一張圖中,我們可以觀察出 Messenger 接收到的訊息的結構,我們就是要針對接收到的訊息進行處理。

如果你認真觀察,也會看到有訊息發送者 sender 的 ID,這個欄位的資料就是後續我們要回覆訊息時需要的欄位。

不同平台的訊息結構會不同,但只要抓得出我們要的資料在哪裡,後續就很好處理了

解析圖片訊息結構

如果我們想處理使用者傳到粉專聊天室中的圖片,我們也需要知道 Messenger 接收到的圖片訊息長什麼樣子。因此我們可以再次 Execute workflow,使得 webhook Trigger 在 Listening 狀態,然後傳一張圖片到聊天室,檢查一下回傳資料的結構,結果如下:
https://ithelp.ithome.com.tw/upload/images/20251008/20178017pbLcO6jUJc.png

聰明的你可能就會想到,只要把圖片抓得下來的話,也可以複製昨天的工作流,進行發票的歸檔和紀錄。沒錯,流程其實就是這個類似!而這邊下載檔案的方式是透過 HTTP Request 節點,設定如下:

  • MethodGET
  • URL:就是回傳的那整坨 URL
  • Response formatFile (回傳檔案)
  • Put output in fielddata(可以自行命名)

https://ithelp.ithome.com.tw/upload/images/20251008/20178017un2TPeh7tn.png

後續如果要辨識發票,接法幾乎一模一樣,唯一要調的是回傳訊息的部分,這晚點會說。

https://ithelp.ithome.com.tw/upload/images/20251008/20178017QOcG2erQvT.png

但這不是今天的重點,可以在讀完今天的文章之後去嘗試自行修改、練習


三、導入 AI Agent + Memory

在我們成功接收到使用者訊息後,下一步就是要讓 AI Agent 能夠針對這些訊息做回覆。今天的範例是一個電商客服,所以我們需要做幾件事:

  • 修改提示詞:讓 AI Agent 知道它的角色是「電商客服」,語氣、任務與限制。
  • 掛載商品資料工具(Google Sheet Tool):讓 AI Agent 可以即時查詢商品庫存、價格、顏色等資訊。
  • 記住使用者對話上下文:這就要用到今天的重頭戲 —— Memory

為什麼需要 Memory?

假設一個使用者問:「這雙鞋子有藍色嗎?」如果 AI Agent 只看到這句訊息,它可能不知道使用者指的是哪一款鞋子,也無法延續先前的對話脈絡。

Memory 就是用來幫助 AI 記住使用者之前說過的訊息,例如上一句提到的「跑步鞋款號 ABC123」,讓 AI 回覆時能自然地說:「這雙跑步鞋款 ABC123 有藍色款喔,而且目前有現貨!」

如何設定 Memory

在 n8n 的 AI Agent 節點中,你可以直接在下方找到 Memory 分支,點「+」,選擇 Simple Memory

  • Simple Memory:可以簡單地記錄使用者傳遞的訊息,並且可以用一個 Key 來辨識每個使用者。
  • Key 的概念:想像你在寫資料庫,每個使用者就是一個獨立的檔案,而 Key 就是這個檔案的「名字」。AI 回覆時,會根據 Key 去抓取對應使用者的記憶,避免不同使用者的訊息混在一起。

如何決定 Memory Key?

這個時候你可能有另一個問題了:所有傳到聊天室的訊息都會透過 Webhook 傳到 n8n,我要怎麼知道哪個訊息是誰的? 答案是,每個使用者在 Messenger 都有一個唯一的 ID,也就是 sender.id

所以我們可以把 Memory Key 設定為使用者 ID,其實就是前面我們從 webhook 獲得的 sender id。

這樣每個使用者的訊息就會存放在不同的記憶中,AI Agent 回覆時會自動抓取對應的對話歷史,避免訊息混淆。

完整設定範例

  1. AI Agent Prompt:設定角色為「電商客服」,語氣友善且專業。
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017S5hCiEfdIQ.png

  2. Memory 設定
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017JWBdC2EDHF.png

  3. 掛載 Google Sheet Tool:讓 AI Agent 查詢商品資訊,以下是我請 AI 生的範例:
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017Gjux7uQ9At.png

  4. 輸出範例與 AI Agent 最終接法如下:
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017PfBkQIcPg1.png

  5. 接下來一樣將輸出用 Code 節點轉成 JSON 格式(其實這步不一定要,也可以在 AI Agent 中請他直接輸出,我要回傳給使用者時直接抓整個 output 就好。只是因為我是拿昨天的改的 XD)
    https://ithelp.ithome.com.tw/upload/images/20251008/20178017MN7c9K8AZu.png


四、回復使用者訊息

得到 AI 的輸出之後,就是要把這則訊息回傳給使用者了,Line 傳遞訊息是使用 Messege API,而 FB則是使用自家的 Graph API,可以透過 HTTP Request 節點或是 Graph API 節點,以下我以 Graph API 節點舉例,設定如下:

  • Credential:選擇剛剛存的那個粉專回覆權杖

  • MethodPOST

  • Versionv23.0

  • Node粉專 ID,可以從 webhook trigger output 抓 recipient id

  • Edgemessages(要 +s )

  • 從 Options下面添加 Query Parameters JSON,並輸入:

    {
      "recipient":{"id":"{{ $('Webhook').item.json.body.entry[0].messaging[0].sender.id }}"}, //這則訊息要傳給誰。就是 webhook 收到的訊息的發送者
      "messaging_type":"RESPONSE", //訊息種類
      "message":{"text":{{ $json.reply.toJsonString() }} } //訊息內容
    } 
    

    https://ithelp.ithome.com.tw/upload/images/20251008/20178017YUnr8iNjo9.png

執行後,粉專就會回覆訊息了!


五、成果展示、完整工作流

以下為今天打造的工作流示意圖:
https://ithelp.ithome.com.tw/upload/images/20251008/20178017WRJUABlDWr.png

成果展示部分截圖:(客服回的訊息有點過於冗長,提示詞還需要稍微修改來提升效果,但接昨天發票歸檔的可以成功執行)
https://ithelp.ithome.com.tw/upload/images/20251008/20178017hbWhTzNUdI.png

因為我是用 Test URL,所以其實我傳訊息到粉專前,都 execute workflow 一次。將工作流切成 active 並設定成 production webhook URL 後,就可以正常和這個智能AI聊天了!


六、結語與明日預告

今天,我們成功讓 n8n 的 AI 助理跨出重要一步——它不只會「看」和「聽」,現在還能「記得對話脈絡」、理解使用者訊息,並以自然、貼近人類的方式回覆問題。

我們完成了:

  1. 設定 Messenger 的 Webhook,讓我們也能接收到來自 FB 的訊息
  2. 使用 Memory 記住使用者訊息,延續對話脈絡
  3. 自動回傳訊息,完成一個可互動的智慧客服

這幾天分享的東西有點多,因此明天可能暫時不會分享新的東西,而是做一次小整理 —— 把這幾天的工作流與設定整理成完整流程,讓你可以快速回顧、複習,確保每個環節都清楚掌握。我們明天見!


上一篇
Day 23: 【n8n x Webhook - 2】(閹割版)發票管理器:讓你的 LINE 幫你收、存、對發票
下一篇
Day 25: 【本週小整理】
系列文
《把瑣事交給 n8n:零基礎自動化工作流實戰》30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言