在昨天的運動打卡實作中,提到因為無法正確無法正確篩選Notion中的運動日期欄位,而沒辦法抓取到當天的運動紀錄,進而導致無法順利判斷運動狀態。
經過這次繼續嘗試,發現到是因為Date&Time節點的輸出通常是 ISO 8601 (YYYY-MM-DD 或帶時間的格式),而Notion日期是 YYYY/MM/DD 格式,因此後續在取得當日任務時會出現問題,所以需要先使用code轉成統一日期格式,並統一時區與取消帶時間的格式,只存取 YYYY/MM/DD的日期。
這次做的是當使用者輸入今天的運動後會自動輸入到Notion中,每天晚上七點會檢查當日是否有運動,有的話傳送讚美的訊息,沒有的話傳送鼓勵提醒運動的訊息。因此會有兩個工作流。
一、輸入運動紀錄到Notion
這部分與昨天內容大致相同就不多做說明
二、檢查當日是否有運動並傳送對應的訊息
建立schedule trigger節點
建立Date&Time節點,取得當日的日期
建立code節點,編輯date的格式為yyyy/mm/dd(與notion格式相同)
const dateString =$('取得當天日期1').first().json.currentDate ;
const tz = "Asia/Taipei";
const d = new Date(dateString);
// 取得 YYYY/MM/DD
const yyyy = d.toLocaleString('en-US', { timeZone: tz, year: 'numeric' });
const mm = d.toLocaleString('en-US', { timeZone: tz, month: '2-digit' });
const dd = d.toLocaleString('en-US', { timeZone: tz, day: '2-digit' });
const formatted = `${yyyy}/${mm}/${dd}`;
return [{ json: { formattedDate: formatted } }];
建立notion節點,功能為gat database page
建立IF節點,來分支「有運動」和「沒運動」的路徑,並各自加上code節點來編輯訊息
「有運動」→ 讚美,會隨機從五個語句中選出一個傳送
// 有運動的情況
const messages = [
"太棒了!今天完成了運動 💪",
"持續努力超讚 👏",
"你今天的堅持讓人佩服 🔥",
"今日運動完成!好習慣正在養成 ✨",
"今日運動完成!堅持就是勝利 🔥"
];
// 隨機挑一句
const message = messages[Math.floor(Math.random() * messages.length)];
return [{ json: { message } }];
「沒運動」→ 鼓勵提醒,會隨機從四個語句中選出一個傳送
// 沒有運動的情況
const messages = [
"今天還沒有運動喔,加油!動起來 💡",
"再小的運動也是進步,趕快動一下吧 ⚡",
"記得流點汗,給自己一點能量 💦",
"別忘了運動,保持好狀態 🔥"
];
// 隨機挑一句
const message = messages[Math.floor(Math.random() * messages.length)];
return [{ json: { message } }];
建立telegram節點,功能為send a message