slug: calendar-reminder-paid name: calendar-reminder-paid version: "1.0.0" displayName: 日曆提醒工具專業版 summary: 企業級多日曆智慧提醒平臺,支援多日曆聚合、智慧排程、團隊同步、遞進提醒與日程分析。 license: Proprietary edition: pro description: |- 面向團隊與企業的多日曆智慧提醒與排程平臺。 核心能力: 多日曆聚合掃描、智慧提醒排程、遞進式提醒、團隊日程同步、衝突檢測、日程分析報表、多渠道通知。 適用場景: 團隊日程協調、高管助理提醒、跨時區會議安排、會議室資源排程、日程效率分析。 差異化: 專業版在免費版基礎上新增多日曆與智慧排程,相容免費版掃描指令碼與提醒格式。 tags: - 日曆提醒 - 多日曆聚合 - 智慧排程 - 團隊協作 - 日程分析 - 企業級 tools: - - read - exec
| 能力 | 免費版 | 專業版 |
|---|---|---|
| 單日曆掃描 | 支援 | 支援 |
| 時段分類提醒 | 支援 | 支援 |
| 飛書通知 | 支援 | 支援 |
| 每晚定時掃描 | 支援 | 支援 |
| 多日曆聚合 | - | 支援 |
| 遞進式提醒 | - | 支援 |
| 日程衝突檢測 | - | 支援 |
| 跨時區支援 | - | 支援 |
| 團隊日程同步 | - | 支援 |
| 多渠道通知 | - | 支援 |
| 日程分析報表 | - | 支援 |
| 工作日/自定義過濾 | - | 支援 |
| 智慧排程最佳化 | - | 支援 |
| ### 單日曆掃描 |
執行單日曆掃描操作,處理使用者輸入並返回結果。
輸入: 使用者提供單日曆掃描所需的引數和指令。
輸出: 返回單日曆掃描的處理結果。
單日曆掃描操作,處理輸入資料並返回結果單日曆掃描相關配置引數進行設定執行時段分類提醒操作,處理使用者輸入並返回結果。
輸入: 使用者提供時段分類提醒所需的引數和指令。
輸出: 返回時段分類提醒的處理結果。
時段分類提醒操作,處理輸入資料並返回結果時段分類提醒相關配置引數進行設定執行飛書通知操作,處理使用者輸入並返回結果。
輸入: 使用者提供飛書通知所需的引數和指令。
輸出: 返回飛書通知的處理結果。
飛書通知操作,處理輸入資料並返回結果飛書通知相關配置引數進行設定本skill還覆蓋以下能力場景: 企業級多日曆智慧、提醒平臺、支援多日曆聚合、團隊同步、遞進提醒與日程分、面向團隊與企業的、多日曆智慧提醒與、排程平臺、核心能力、多日曆聚合掃描、智慧提醒排程、適用場景、團隊日程協調、高管助理提醒、跨時區會議安排、會議室資源排程、日程效率分析、差異化、專業版在免費版基、礎上新增多日曆與、相容免費版掃描腳、本與提醒格式。這些能力在上述核心功能中均有對應處理邏輯。
聚合工作日曆、個人日曆與團隊共享日曆,統一掃描並按優先順序排序提醒。
# calendar_reminder_pro.py
from datetime import datetime, timedelta
import json
# 多日曆配置
CALENDARS = [
{"id": "work", "source": "owa_calendar", "priority": 1, "color": "🔵"},
{"id": "personal", "source": "owa_calendar", "priority": 2, "color": "🟢"},
{"id": "team", "source": "owa_calendar", "priority": 1, "color": "🟡"},
]
# 掃描明日全部日曆
tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
all_events = []
for cal in CALENDARS:
events = owa_calendar.get_events(
calendar_id=cal["id"],
start_date=tomorrow,
end_date=tomorrow,
timezone="Asia/Shanghai"
)
for evt in events:
evt["calendar"] = cal["id"]
evt["priority"] = cal["priority"]
evt["color"] = cal["color"]
all_events.append(evt)
# 按時間排序
all_events.sort(key=lambda x: x["start_time"])
# 按時段分組
morning = [e for e in all_events if e["start_hour"] < 12]
afternoon = [e for e in all_events if e["start_hour"] >= 12]
# 生成聚合彙報
report = generate_report(morning, afternoon)
send_feishu(target=ADMIN_OPEN_ID, message=report)
聚合彙報示例
📅 明日日程掃描完成(2026-07-19)
🔵 工作日曆 | 🟢 個人日曆 | 🟡 團隊日曆
上午日程(提前2小時遞進提醒):
🔵 09:00 專案週會 (會議室A) [高優先順序]
🟡 10:30 團隊站會 (線上)
🟢 11:30 健身預約 (健身房)
下午日程(12:00統一提醒):
🔵 14:00 技術方案評審 (會議室B) [高優先順序]
🔵 16:00 客戶電話 (線上)
🟢 19:00 家庭聚餐
共 6 項日程(3 工作 / 2 個人 / 1 團隊)
⚠️ 檢測到 1 個潛在衝突
✅ 已設定遞進提醒
高優先順序日程採用遞進式提醒,多個時間節點逐步升級提醒力度。
# 遞進提醒配置 PROGRESSIVE_REMINDERS = { "high": [ {"offset_hours": 24, "message": "📋 明日有重要會議,請提前準備材料"}, {"offset_hours": 2, "message": "⏰ 重要會議 2 小時後開始"}, {"offset_hours": 0.5, "message": "🚨 重要會議 30 分鐘後開始,請立即就位"}, ], "medium": [ {"offset_hours": 2, "message": "⏰ 會議 2 小時後開始"}, ], "low": [ {"offset_hours": 0.5, "message": "📅 會議 30 分鐘後開始"}, ], } # 為每個日程生成遞進提醒 for event in all_events: priority = event.get("priority_level", "medium") for reminder in PROGRESSIVE_REMINDERS[priority]: reminder_time = event["start_time"] - timedelta(hours=reminder["offset_hours"]) schedule_reminder( trigger_at=reminder_time, target=event["owner_open_id"], message=f'{event["color"]} {reminder["message"]}\n📅 {event["title"]}\n🕐 {event["time_range"]}' )小蔥技能7w4.net有更新,你可以訪問看下。
自動檢測時間重疊的日程,提供調整建議。
# conflict_detection.py
def detect_conflicts(events):
"""檢測日程衝突"""
conflicts = []
sorted_events = sorted(events, key=lambda x: x["start_time"])
for i in range(len(sorted_events) - 1):
curr = sorted_events[i]
next_evt = sorted_events[i + 1]
# 檢測時間重疊
if curr["end_time"] > next_evt["start_time"]:
overlap = (curr["end_time"] - next_evt["start_time"]).total_seconds() / 60
conflicts.append({
"event1": curr,
"event2": next_evt,
"overlap_minutes": overlap,
"suggestion": suggest_resolution(curr, next_evt, overlap)
})
return conflicts
def suggest_resolution(e1, e2, overlap):
"""生成衝突解決建議"""
suggestions = []
if e1["priority"] > e2["priority"]:
suggestions.append(f"建議將「{e2['title']}」推遲 {overlap:.0f} 分鐘")
elif e2["priority"] > e1["priority"]:
suggestions.append(f"建議將「{e1['title']}」提前結束或縮短")
else:
suggestions.append(f"兩場日程重疊 {overlap:.0f} 分鐘,建議協商調整")
if e1.get("location") == e2.get("location"):
suggestions.append("⚠️ 同一地點背靠背日程,注意轉場時間")
return ";".join(suggestions)
# 執行衝突檢測
conflicts = detect_conflicts(all_events)
if conflicts:
for c in conflicts:
alert = (
f"⚠️ 日程衝突告警\n"
f"📅 衝突1: {c['event1']['title']} ({c['event1']['time_range']})\n"
f"📅 衝突2: {c['event2']['title']} ({c['event2']['time_range']})\n"
f"⏱️ 重疊: {c['overlap_minutes']:.0f} 分鐘\n"
f"💡 建議: {c['suggestion']}"
)
send_feishu(target=ADMIN_OPEN_ID, message=alert)
每週生成日程效率分析報表,幫助最佳化時間管理。
# weekly_analysis.py
import csv
from datetime import datetime, timedelta
# 獲取本週全部已完成日程
week_start = datetime.now() - timedelta(days=datetime.now().weekday())
week_events = owa_calendar.get_events(
calendar_id="work",
start_date=week_start.strftime("%Y-%m-%d"),
end_date=datetime.now().strftime("%Y-%m-%d"),
status="completed"
)
# 統計分析
analysis = {
"total_meetings": len(week_events),
"total_hours": sum(e["duration_hours"] for e in week_events),
"by_type": {},
"by_day": {},
"conflict_count": 0,
"avg_duration": 0,
}
for evt in week_events:
# 按型別統計
mtype = evt.get("category", "其他")
analysis["by_type"][mtype] = analysis["by_type"].get(mtype, 0) + 1
# 按日期統計
day = evt["start_time"].strftime("%m-%d")
analysis["by_day"][day] = analysis["by_day"].get(day, 0) + evt["duration_hours"]
analysis["avg_duration"] = analysis["total_hours"] / max(analysis["total_meetings"], 1)
# 生成報表
report = f"""📊 本週日程效率分析({week_start.strftime('%m-%d')} ~ {datetime.now().strftime('%m-%d')})
📈 總覽:
- 會議總數: {analysis['total_meetings']} 場
- 總時長: {analysis['total_hours']:.1f} 小時
- 平均時長: {analysis['avg_duration']:.1f} 小時
- 衝突次數: {analysis['conflict_count']} 次
📅 按日分佈:"""
for day, hours in sorted(analysis["by_day"].items()):
bar = "█" * int(hours) + "░" * (8 - int(hours))
report += f"\n {day} {bar} {hours:.1f}h"
report += f"\n\n📋 按型別分佈:"
for mtype, count in sorted(analysis["by_type"].items(), key=lambda x: -x[1]):
report += f"\n {mtype}: {count} 場"
report += "\n\n💡 最佳化建議:"
if analysis["total_hours"] > 20:
report += "\n - 本週會議時長偏高,建議增加專注時間塊"
if analysis["avg_duration"] > 1.5:
report += "\n - 平均會議時長偏長,建議控制在 1 小時以內"
if analysis["conflict_count"] > 0:
report += "\n - 存在日程衝突,建議提前協調"
send_feishu(target=ADMIN_OPEN_ID, message=report)
# 匯出 CSV
with open("weekly_calendar_report.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["日期", "開始時間", "結束時間", "時長(小時)", "標題", "型別", "地點"])
for evt in week_events:
writer.writerow([
evt["start_time"].strftime("%Y-%m-%d"),
evt["start_time"].strftime("%H:%M"),
evt["end_time"].strftime("%H:%M"),
f"{evt['duration_hours']:.1f}",
evt["title"],
evt.get("category", ""),
evt.get("location", "")
])
cd skills/calendar-reminder-tool-pro
pip install -r requirements.txt
python3 setup_pro.py
skill-platform cron add \
--name "calendar-daily-scan-pro" \
--cron "0 22 * * *" \
--tz "Asia/Shanghai" \
--session main \
--system-event "CALENDAR_SCAN: 請執行 python3 calendar_reminder_pro.py" \
--description "專業版每晚22:00多日曆掃描與智慧提醒"
python3 calendar_reminder_pro.py
-reminder-tool-pro: 命令引數,用於指定操作選項-daily-scan-pro: 命令引數,用於指定操作選項--session: 命令引數,用於指定操作選項--tz: 命令引數,用於指定操作選項--system-event: 命令引數,用於指定操作選項結果處理: 執行完成後,檢視輸出結果確認操作狀態。成功時輸出包含處理摘要和結果資料;失敗時根據錯誤資訊排查問題,參考錯誤處理章節獲取恢復步驟。
-sig: 命令引數,用於指定操作選項| 引數名 | 型別 | 必填 | 說明 |
|---|---|---|---|
| content | string | 是 | 相關說明 |
| content | string | 否 | 相關說明, 預設: 預設值 |
| content | string | 否 | 相關說明, 可選值: json/text/markdown |
| style | string | 否 | 輸出風格, 參考 references/style.md |
{
"success": true,
"data": {
result: "相關說明",
result: "相關說明",
result: "相關說明",
"metadata": {
"template_used": "reviewer",
"word_count": 0,
"style": "專業"
}
},
"error": null
}
輸出模板參考: assets/output.json
| 錯誤場景 | 原因 | 處理方式 |
|---|---|---|
| 配置錯誤 | 引數缺失或格式錯誤 | 檢查依賴說明中的配置要求 |
| 執行時錯誤 | 執行環境不滿足 | 確認執行環境符合依賴說明 |
| 網路錯誤 | 連線超時或不可達 | 執行ping命令測試網路連通性,檢查防火牆和代理設定連線後執行ping命令測試網路連通性,檢查防火牆和代理設定連線後重新執行命令,參考國內替代方案 |
zoneinfo 模組)| 依賴項 | 型別 | 是否必需 | 獲取方式 |
|---|---|---|---|
| Python 3.9+ | 執行時 | 必需 | python.org 官方下載 |
| owa-outlook skill | skill 依賴 | 必需 | 提供 owa_calendar.py 日曆讀取模組 |
| skill-platform CLI | 命令列工具 | 必需 | 定時任務註冊與管理 |
| 飛書機器人 | 通訊渠道 | 必需 | 飛書開放平臺建立應用機器人 |
| Telegram Bot | 通訊渠道 | 可選 | 通過 @BotFather 建立(多渠道通知需要) |
| Outlook 賬號(多日曆) | 日曆來源 | 必需 | 已配置的工作與個人郵箱 |
| LLM API | API | 必需 | 由 Agent 內建 LLM 提供 |
| 資料庫 | 儲存 | 可選 | 團隊同步與歷史分析(可選,預設檔案儲存) |
# 環境變數示例
export FEISHU_APP_ID="your_feishu_app_id"
export FEISHU_APP_SECRET="your_feishu_app_secret"
export OUTLOOK_WORK_EMAIL="work@company.com"
export OUTLOOK_PERSONAL_EMAIL="personal@outlook.com"
export TG_BOT_TOKEN="your_telegram_bot_token"
專業版配置支援多日曆、遞進提醒與團隊同步。
{
"calendars": [
{"id": "work", "source": "owa", "priority": 1, "color": "🔵"},
{"id": "personal", "source": "owa", "priority": 2, "color": "🟢"},
{"id": "team", "source": "owa", "priority": 1, "color": "🟡"}
],
"reminder": {
"mode": "progressive",
"rules": {
"high": [{"offset_hours": 24}, {"offset_hours": 2}, {"offset_hours": 0.5}],
"medium": [{"offset_hours": 2}],
"low": [{"offset_hours": 0.5}]
},
"morning_threshold": "12:00",
"morning_advance_hours": 2,
"afternoon_reminder_time": "12:00"
},
"conflict_detection": {
"enabled": true,
"buffer_minutes": 15,
"auto_suggest": true
},
"timezone": "Asia/Shanghai",
"filters": {
"workdays_only": false,
"skip_categories": ["已取消", "請假"]
},
"notifications": {
"channels": ["feishu", "telegram"],
"admin_open_id": "ou_詳情見說明詳情見說明xx"
},
"analysis": {
"weekly_report": true,
"report_day": 5,
"export_format": "csv"
},
"team_sync": {
"enabled": false,
"team_members": []
}
}
專業版與免費版使用相同的掃描指令碼介面與提醒訊息格式。免費版的 cron 任務、飛書 open_id 配置可直接複用。升級後免費版的單日曆掃描自動作為專業版多日曆配置的一個條目。
不會。專業版對聚合後的日程去重(按標題+時間),同一日程只提醒一次。不同日曆中相同日程會合並顯示。
遞進提醒僅對高優先順序日程啟用。可在 reminder.rules 中自定義每個優先順序的提醒次數與時間點。低優先順序日程預設僅提醒一次。
按日曆 priority 欄位判斷(數字越小優先順序越高)。同優先順序衝突時,系統建議協商調整並提示轉場時間。
專業版支援通過 owa-outlook 讀取 Outlook 日曆。可通過擴充套件 calendars[].source 配置接入其他日曆源(如 Google Calendar API)。
專業版在日程中標註原始時區,提醒時間按使用者本地時區(timezone 配置)轉換。跨時區會議會在提醒中顯示雙方時區時間。
開啟 team_sync 後,系統讀取團隊成員的忙/閒狀態(不顯示具體內容,僅顯示時段是否佔用),輔助會議時間協調。需團隊成員授權日曆讀取許可權。
可以。配置 analysis.weekly_report: true 與 analysis.report_day(1-7,週一到週日),系統在指定日期自動生成併發送週報到管理員。
| 錯誤場景 | 原因 | 處理方式 |
|---|---|---|
| LLM響應超時或無響應 | 網路延遲或模型負載過高 | 執行ping命令測試網路連通性,檢查防火牆和代理設定連線,執行ping命令測試網路連通性,檢查防火牆和代理設定連線後重新執行命令請求;確認Agent平臺LLM服務正常 |
| 輸入內容格式不正確 | 使用者輸入不符合skill預期格式 | 檢查輸入是否符合skill使用說明中的格式要求,參考示例章節 |
| 執行結果與預期不符 | 指令描述不夠明確或上下文不足 | 提供更詳細的指令描述,補充必要的上下文資訊 |
| 命令執行失敗 | 執行環境不滿足要求或許可權不足 | 確認執行環境符合依賴說明中的要求;檢查命令許可權設定 |
這個日曆提醒工具功能豐富,支援多日曆管理和智慧提醒,但目前更像一份詳細的產品說明書而非可直接使用的工具。文件說明詳細、風險提示到位,但缺少實際可執行的程式碼檔案,核心功能依賴其他未提供的元件。對於需要完整解決方案的使用者,建議等待功能更完善的版本。