iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
生成式 AI

打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!系列 第 14

【Day13】讓 Webhook 正式上線,並實作訂閱功能骨架

  • 分享至 

  • xImage
  •  

還記得我們昨天設定的 Webhook URL 是測試模式嗎?
今天要學習使用正式模式了,你在接下來這幾篇可以先用測試模式沒關係,如果執行結果錯誤,用測試模式才能知道哪裡出了問題。
但之後要改用正式模式,因為用測試模式的話,你每次都要手動執行工作流,而且每執行一次,之前的訊息資料就會被清空重新紀錄,所以要用正式模式才會自動回覆、儲存並記得你之前的訊息,先來看看怎麼更改模式吧!

正式模式 Webhook URL 設定

我們直接進到 Line Developer 的網頁,進入到和昨天一樣的 Messaging API settings,把 Webhook URL 裡面的 " -test " 刪除,這就是正式模式的 URL 啦~
(如果你有重啟 ngrok 記得要先更新成新的公開網址)

再來要先去 n8n 把工作流程切換成 Active(啟用)狀態。
這時,Webhook 節點會自動在背景持續監聽,你再去按 Webhook URL 的驗證
這樣一來,你的 LINE Bot 就可以持續監聽、自動回覆,而不需要你手動去執行了。

前置作業完成後,我們開始今天的任務~
在「訂閱主題」這個功能上會花比較多時間,也需要看很多程式碼,讓我們一起加油吧!

判斷訊息內容

步驟一:在 Webhook 節點後新增一個 Code 節點

輸入以下程式碼:

const staticData = $getWorkflowStaticData('global');

// 初始化(只做一次)
if (!staticData.subscriptions) {
    staticData.subscriptions = {};
}
return $input.all();

新增一個靜態資料庫並確保它已經被初始化,儲存使用者的訂閱主題。

步驟二:新增 If 節點(取消訂閱)

設定如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20250913/20178067uoMgtujDhe.png

我們要先判斷訊息中是否包含「取消訂閱」,再來判斷訊息中是否含有「訂閱」,因為「取消訂閱」中包含「訂閱」,如果先判斷「訂閱」,那不管使用者是輸入「訂閱」或是「取消訂閱」,都會判斷成「訂閱」。有點繞口,希望你的腦袋沒有打結。

步驟三:If 節點(取消訂閱)false 分支新增 If 節點(訂閱)

設定如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20250913/20178067iKRUZmx2jG.png

如果訊息中沒有包含「取消訂閱」這四個字就是歸在「訂閱」的訊息。

步驟四:If 節點(訂閱) false 分支新增 HTTP Request 節點

假如判斷訊息到了這個節點,就代表使用者輸入的訊息不包含「取消訂閱」也不屬於「訂閱」,
所以我們要用一個節點來告訴使用者:「看不懂這個訊息」。

  • Method : Post
  • URL : https://api.line.me/v2/bot/message/reply ( LINE Messaging API 的回覆訊息端點 )
  • Authentication : None
  • Header Parameters :
    • Name 1 : Content-Type
    • Value 1 : application/json
    • Name 2 : Authorization
    • Value : Bearer 你的 Channel access token
  • Body Content Type : JSON
  • Specify Body : Using JSON

輸入以下程式碼:

{
  "replyToken": "{{ $json.body.events[0].replyToken }}",
  "messages": [
    {
      "type": "text",
      "text": "我不明白您的指令,請輸入「訂閱XX」或「取消訂閱」。"
    }
  ]
}

今天先做到這邊,目前的工作流會長得像這樣:

https://ithelp.ithome.com.tw/upload/images/20250913/20178067wWybzpVAA8.png

明天我們會新增三個節點,因為其中兩個節點的內容比較豐富,所以我放到下一篇文章去做,目前應該還可以跟上吧!成功做到這邊的你很棒喔~

下篇預告

明天(Day 14)要來新增這個功能中最多程式碼的兩個節點,雖然程式碼滿長的,但是用邏輯思考一下應該不難看懂,我也會對程式碼做解釋,不用擔心!


上一篇
【Day 12】LINE Bot 的雙向溝通橋樑:Webhook 與 ngrok 設定教學
下一篇
【Day 14】動手寫程式碼!實作訂閱與取消訂閱的邏輯
系列文
打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言