iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
生成式 AI

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

【Day 15】新增取消訂閱邏輯:自動恢復預設 & 即時回覆訊息

  • 分享至 

  • xImage
  •  

恢復預設主題新聞

如果使用者取消了訂閱,那系統會自動恢復預設(科技新聞),根據剛剛「取消訂閱的節點」程式碼,我們要做一點更動,更改完的程式碼如下:

const userId = $input.first().json.body.events[0].source.userId;
const staticData = $getWorkflowStaticData('global');
let replyMessage;

// 檢查 subscriptions 物件是否存在,如果不存在就回覆沒有訂閱
if (!staticData.subscriptions) {
    staticData.subscriptions = {};
    replyMessage = '您沒有訂閱任何新聞。';
} else {
    // 取得使用者當前的訂閱主題
    const topic = staticData.subscriptions[userId];
    if (topic && topic !== '科技') {
        // 將主題恢復為預設的「科技」
        staticData.subscriptions[userId] = '科技';
        replyMessage = `已成功取消訂閱${topic}新聞,並恢復為「科技」新聞。`;
    } else {
        // 如果沒有訂閱任何主題,或主題已經是「科技」,就直接回覆
        staticData.subscriptions[userId] = '科技';
        replyMessage = '您沒有訂閱任何新聞,已設定為「科技」新聞。';
    }
}

return [{
    json: {
        replyToken: $input.first().json.body.events[0].replyToken,
        messages: [{
            type: "text",
            text: replyMessage
        }]
    }
}];

現在的功能比單純的刪除訂閱更複雜,包含了多種情境的判斷。

HTTP Request 節點傳訊息給使用者

在工作流尾端新增一個 HTTP Request 節點,並把剛剛做的兩個節點和這個節點連接起來。
前面的欄位都和昨天的 HTTP Request 節點一樣,請直接去把昨天的內容複製到相對應的欄位~
唯一不一樣的地方是:

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

  • JSON : {{ $json }}
    將上一個節點 (兩個 Code 節點)傳給整個 JSON 物件,當作 Body 的內容傳送出去。

目前的工作流長這樣:

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

今天的任務完成了!目前已經可以成功和 LINE Bot 互動,我有幾點要提醒一下:

  1. 要先訂閱才能取消訂閱
    雖然這句話聽起來很像廢話,但因為我實作的時候還是用測試模式的執行方式,我忘記每次執行都會清空之前的資料,所以執行結果一直出錯。
    如果你想測試取消訂閱的功能,請記得要切換成正式模式,然後要先訂閱才能取消訂閱喔~
  2. 做完一個節點就去測試結果
    你跟著實作的時候應該會在「測試模式」和「正式模式」之間瘋狂切換,請你在做完一個節點的時候就去測試使用者輸入各種訊息後會收到什麼樣的回覆,不要全部做完才一次測試。
    如果都沒有錯誤,那你很棒;如果執行錯誤,你可能有地方做錯而且要大改,所以最好是做完一小段就測試一下,免得你以為是 B 處的問題,後來才發現其實早在 A 處就出錯了。

下篇預告

明天(Day 16)會用到 Google Sheet 來記錄使用者訂閱主題,並加上其他主題的 RSS 來源。


上一篇
【Day 14】動手寫程式碼!實作訂閱與取消訂閱的邏輯
下一篇
【Day 16】用 n8n 與 Google 試算表建立穩定的新聞訂閱系統
系列文
打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言