昨天我們新增了試算表 sheet2 的欄位,並輸入預設值:三個主題點擊次數皆為 0。
接下來就要取得試算表資料,所以我們先在昨天最後一個節點:Google Sheets
節點後面再新增一個相同的節點,功能改成:「Get row(s) in sheet」。
userId
{{$json.userId}}
取得試算表資料後,我們要用一個 Code
節點來更新使用者點擊主題選單的次數。
在 Get row(s) in sheet
節點後新增 Code
節點,輸入以下程式碼:
const inputs = $input.all();
const menuTopicEN = inputs[inputs.length - 1].json.menuTopicEN;
const row = inputs[0].json;
// 確保使用者選擇的欄位有值,沒有就預設為 0
let current = row[menuTopicEN] || 0;
// 如果 current 不是數字,將其轉為數字
if (isNaN(current)) {
current = parseInt(current, 10) || 0;
}
// 根據使用者選擇的主題,將欄位值 +1
row[menuTopicEN] = current + 1;
return $input.all();
雖然我在前兩篇文章說到我要改這個主題選單功能的內容,但我後來努力嘗試,終於找到了可以讓對應主題做正確更新的辦法,於是這篇文章就是回歸最原本的計畫了。
Google Sheets
節點和 LINE Webhook
節點的資料,避免後續需要用到的資料流失,inputs
陣列中,取得最後一個資料項目,並從中提取 menuTopicEN
。inputs
陣列中,取得第一個資料項目,並將其賦予給 row
變數。使用者可能會點選很多次主題選單,我們要找出最新一筆使用者的點擊紀錄,並將所有相關的資訊整合後回傳。
在剛剛的 Code
節點後新增另一個 Code
節點,輸入以下程式碼:
const inputs = $input.all();
const row = inputs[0].json;
const userId = inputs[0].json.userId;
const menuTopicEN = inputs[0].json.menuTopicEN;
let maxRowNumber = -1;
let lastClickedItem = {};
// 遍歷所有輸入資料項目,找到 row_number 最大的那一個
for (const item of inputs) {
const currentRowNumber = item.json.row_number;
// 如果目前的 row_number 更大,就將整個 item 儲存起來
if (currentRowNumber > maxRowNumber) {
maxRowNumber = currentRowNumber;
lastClickedItem = item.json;
}
}
// 最後一次點擊的主題轉換成英文
const lastTopicEN = lastClickedItem.menuTopicEN;
let lastTopicCN;
switch(lastTopicEN){
case "intworld": lastTopicCN = "國際"; break;
case "technology": lastTopicCN = "科技"; break;
case "stars": lastTopicCN = "娛樂"; break;
}
return {
json: {
userId,
lastTopicCN,
menuTopicEN,
intworld: row.intworld,
technology: row.technology,
stars: row.stars
}
};
row_number
最大的那筆,因為這代表最新的資料。找到最新的點擊之後,我們要對試算表進行更新。
在剛剛的 Code
節點後新增一個 Update row in sheet
節點。
下方傳送的是我們要更新的欄位,使用者輸入的主題和三種主題的點擊次數都要做更新。
今天把最重要的「點擊次數更新」部分做完了,我一次次嘗試,執行了好多次工作流,想了好多條可能可行的路,終於迎來成功了!
試算表在使用者一次次點擊時更新的結果會像這樣:
更新的次數都在第一列。
明天「Day 25」我們將進入另一個需要邏輯分析的部分,完成使用者點擊選單的次數超過上限的對策。