forked from Selig/openclaw-skill
Compare commits
3 Commits
main
...
improve/da
| Author | SHA1 | Date | |
|---|---|---|---|
| baa75d4e07 | |||
| 9a7801ffdc | |||
| 20801b19be |
@@ -17,51 +17,51 @@ tools:
|
|||||||
|
|
||||||
## 功能說明
|
## 功能說明
|
||||||
|
|
||||||
每日自動(或手動觸發)生成早安簡報,包含:
|
每日自動(或手動觸發)生成早安簡報,讓您一早就能快速掌握今日要務:
|
||||||
1. 🌤️ 今日天氣(台灣地區)
|
1. 🌤️ **今日天氣**:提供氣溫、降雨機率與貼心穿著建議(台灣地區)。
|
||||||
2. 📅 今日行程(來自 workspace/SCHEDULE.md 或 Google Calendar)
|
2. 📅 **今日行程**:條列即將到來的會議或活動(來自 `workspace/SCHEDULE.md` 或 Google Calendar)。
|
||||||
3. ✅ 待辦事項(來自 workspace/TODO.md)
|
3. ✅ **待辦事項**:列出尚未完成的重要任務(來自 `workspace/TODO.md`)。
|
||||||
4. 💡 今日重點提醒
|
4. 💡 **今日重點提醒**:標示到期專案或重要事項。
|
||||||
5. 📊 昨日工作回顧(選配)
|
5. 📊 **昨日工作回顧**(選配):簡單總結昨日進度。
|
||||||
|
|
||||||
## 設定
|
## 設定與個人化
|
||||||
|
|
||||||
在 `workspace/USER.md` 設定:
|
為獲得最佳體驗,請在 `workspace/USER.md` 設定您的偏好:
|
||||||
```markdown
|
```markdown
|
||||||
## 個人設定
|
## 個人設定
|
||||||
- 城市:台北
|
- 城市:台北(用於精準天氣預報)
|
||||||
- 時區:Asia/Taipei
|
- 時區:Asia/Taipei
|
||||||
- 簡報語言:繁體中文
|
- 簡報語言:繁體中文
|
||||||
- 天氣 API Key:<openweathermap-api-key>(選配)
|
- 天氣 API Key:<openweathermap-api-key>(選配,可提升預報準確度)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 輸出格式範例
|
## 輸出格式範例
|
||||||
|
|
||||||
```
|
```markdown
|
||||||
☀️ **早安!2026-02-20 週五**
|
# ☀️ 早安!2026-02-20 週五
|
||||||
|
|
||||||
🌤️ **今日天氣(台北)**
|
## 🌤️ 今日天氣(台北)
|
||||||
氣溫 16-22°C,多雲偶晴,東北風 2-3 級
|
**氣溫:** 16-22°C,多雲偶晴,東北風 2-3 級
|
||||||
穿著建議:可帶薄外套
|
💡 **穿著建議:** 早晚微涼,建議帶件薄外套。
|
||||||
|
|
||||||
📅 **今日行程**
|
## 📅 今日行程
|
||||||
• 09:00 - 週會(視訊)
|
- 09:00 - 📈 週會(視訊)
|
||||||
• 14:00 - 客戶簡報
|
- 14:00 - 🤝 客戶簡報
|
||||||
• 16:30 - Code Review
|
- 16:30 - 💻 Code Review
|
||||||
|
|
||||||
✅ **待辦事項(3 項)**
|
## ✅ 待辦事項(3 項)
|
||||||
• [ ] 完成 API 文件
|
- [ ] 完成 API 文件
|
||||||
• [ ] 回覆客戶 email
|
- [ ] 回覆客戶 email
|
||||||
• [ ] 更新 deploy 腳本
|
- [ ] 更新 deploy 腳本
|
||||||
|
|
||||||
💡 **今日提醒**
|
## 💡 今日提醒
|
||||||
• SSL 憑證 90 天後到期(2026-05-20)
|
- ⚠️ SSL 憑證 90 天後到期(2026-05-20)
|
||||||
• 本週 sprint 截止日:2026-02-21
|
- 🎯 本週 sprint 截止日:2026-02-21
|
||||||
|
|
||||||
有什麼想先處理的嗎?
|
✨ *新的一天準備好開始了嗎?有什麼想先處理的任務嗎?*
|
||||||
```
|
```
|
||||||
|
|
||||||
## Cron 設定
|
## 自動化 Cron 設定
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 每日 08:00 自動觸發
|
# 每日 08:00 自動觸發
|
||||||
@@ -75,11 +75,11 @@ sudo openclaw cron add \
|
|||||||
|
|
||||||
## 擴充:Google Calendar 整合
|
## 擴充:Google Calendar 整合
|
||||||
|
|
||||||
若要連接 Google Calendar,在 workspace/TOOLS.md 記錄:
|
若希望行事曆更即時同步,請在 `workspace/TOOLS.md` 加上:
|
||||||
```
|
```
|
||||||
Google Calendar API:
|
Google Calendar API:
|
||||||
- Service Account: <path-to-credentials.json>
|
- Service Account: <path-to-credentials.json>
|
||||||
- Calendar ID: primary
|
- Calendar ID: primary
|
||||||
```
|
```
|
||||||
|
|
||||||
然後 agent 可透過 Google Calendar API 抓取今日事件。
|
設定完成後,agent 即可透過 Google Calendar API 為您抓取最新行程。
|
||||||
|
|||||||
@@ -76,6 +76,9 @@ export async function handler(ctx: any) {
|
|||||||
const now = new Date();
|
const now = new Date();
|
||||||
const dateStr = formatDate(now);
|
const dateStr = formatDate(now);
|
||||||
const weekday = getWeekday(now);
|
const weekday = getWeekday(now);
|
||||||
|
const yesterday = new Date(now);
|
||||||
|
yesterday.setDate(yesterday.getDate() - 1);
|
||||||
|
const yesterdayStr = formatDate(yesterday);
|
||||||
|
|
||||||
// 讀取設定
|
// 讀取設定
|
||||||
const userMd = readWorkspaceFile(workspace, 'USER.md');
|
const userMd = readWorkspaceFile(workspace, 'USER.md');
|
||||||
@@ -87,7 +90,7 @@ export async function handler(ctx: any) {
|
|||||||
// 讀取待辦與行程
|
// 讀取待辦與行程
|
||||||
const todoContent = readWorkspaceFile(workspace, 'TODO.md');
|
const todoContent = readWorkspaceFile(workspace, 'TODO.md');
|
||||||
const scheduleContent = readWorkspaceFile(workspace, 'SCHEDULE.md');
|
const scheduleContent = readWorkspaceFile(workspace, 'SCHEDULE.md');
|
||||||
const memoryContent = readWorkspaceFile(workspace, `memory/${dateStr}.md`);
|
const memoryContent = readWorkspaceFile(workspace, `memory/${yesterdayStr}.md`);
|
||||||
|
|
||||||
const todos = parseTodos(todoContent);
|
const todos = parseTodos(todoContent);
|
||||||
const schedule = parseTodaySchedule(scheduleContent, dateStr);
|
const schedule = parseTodaySchedule(scheduleContent, dateStr);
|
||||||
@@ -103,20 +106,20 @@ export async function handler(ctx: any) {
|
|||||||
if (schedule.length > 0) {
|
if (schedule.length > 0) {
|
||||||
sections.push(`📅 **今日行程**\n${schedule.map(s => `• ${s}`).join('\n')}`);
|
sections.push(`📅 **今日行程**\n${schedule.map(s => `• ${s}`).join('\n')}`);
|
||||||
} else {
|
} else {
|
||||||
sections.push(`📅 **今日行程**\n• 暫無排程`);
|
sections.push(`📅 **今日行程**\n• 今日無排程,享受自由時光!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (todos.length > 0) {
|
if (todos.length > 0) {
|
||||||
sections.push(`✅ **待辦事項(${todos.length} 項)**\n${todos.map(t => `• ${t}`).join('\n')}`);
|
sections.push(`✅ **待辦事項(${todos.length} 項)**\n${todos.map(t => `• ${t}`).join('\n')}`);
|
||||||
} else {
|
} else {
|
||||||
sections.push(`✅ **待辦事項**\n• 今日無待辦,保持輕鬆!`);
|
sections.push(`✅ **待辦事項**\n• 目前無待辦,繼續保持!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memoryContent) {
|
if (memoryContent) {
|
||||||
sections.push(`📝 **昨日記錄**\n${memoryContent.slice(0, 200)}...`);
|
sections.push(`📝 **昨日回顧**\n${memoryContent.slice(0, 200)}...`);
|
||||||
}
|
}
|
||||||
|
|
||||||
sections.push(`\n有什麼想先處理的嗎?`);
|
sections.push(`\n💡 *有什麼想先處理的嗎?我隨時為您服務。*`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
reply: sections.join('\n\n'),
|
reply: sections.join('\n\n'),
|
||||||
|
|||||||
Reference in New Issue
Block a user