name: vacation-schedule description: 查詢基金會假表(員工休假排班)。當使用者詢問休假、排班、誰哪天休、假表相關問題時使用此技能。支援查詢特定員工的休假日、解讀排班符號、查看排假衝突等。
假表查詢技能
資料來源
Google Sheets ID: 1JnPLKg5HlKWfSymp79Yx66TZVYehBgVjU6ZbKQgaJR0
名稱: 基金會假表
分頁結構
每個分頁以日期範圍命名,例如:
2026.1.15~2.112026.2.12~3.11
資料結構
| 列 | 內容 |
|---|---|
| 1 | 日期(1, 2, 3...) |
| 2 | 星期(一, 二, 三...) |
| 3 | 排假衝突(多少人休) |
| 5 | 假日餐廳打掃 |
| 6 | 兒早代理 |
| 7+ | 員工排班(A欄為姓名) |
符號說明
休假類
| 符號 | 意思 |
|---|---|
| ◎ | 例假 |
| 〇 | 休息日 |
| ● | 特休全天 |
| △ | 上午休 |
| ▽ | 下午休 |
| ▲ | 上午特休 |
| ▼ | 下午特休 |
會議類
| 符號 | 意思 |
|---|---|
| 上會 | 上午有會議 |
| 下會 | 下午有會議 |
| 上下會 | 上下午都有會議 |
| 上下參 | 上下午參加活動 |
組合符號
△下會= 上午休 + 下午有會議▲上資= 上午特休 + 上午資深會議
其他
活動= 有活動08-16= 特定班次時間福= 福利假公= 公假自強= 自強活動
查詢方法
使用 scripts/query_vacation.py 查詢:
python3 scripts/query_vacation.py --name "李冠葦" --month 2
python3 scripts/query_vacation.py --name "陳淑錡" --from 2026-02-01 --to 2026-02-28
python3 scripts/query_vacation.py --date 2026-02-14 # 查看當天誰休假
重要員工
- B李冠葦 - 總幹事(Gary)
- 陳淑錡 - 行政副組長
注意事項
- 每個週期的分頁不同,查詢時要根據日期選擇正確的分頁
- 員工名稱前可能有編號(如 A、B、1、2、3...)
- 空白格 = 正常上班
- ⚠️ 不要硬編碼欄位數量:每個分頁的天數不同(如 2/13~3/12 有 28 天),必須讀取所有日期欄位直到遇到統計欄(一例一休、休假日、特休、四週)
- 統計欄在日期欄之後,包含:一例一休、休假日(天數)、特休(天數)、四週變形工時
- 隱藏分頁也可以讀取,總共 38 個分頁
輸出格式(LINE 群組)
⚠️ 重要:LINE 不支援 markdown!在 LINE 發送假表或行事曆時:
- 用純文字列表,不要用 markdown 表格或 code block(LINE 會截斷或顯示亂碼)
- 整月假表要分段發送(例如 1-15 日一則,16-31 日一則)
- 格式範例:
假表格式:
3/1(六)◎ 例假
3/2(日)◎ 例假
3/3(一)上班
3/4(二)▽ 下午休
行事曆格式:
📅 二月份行事曆
2/3(一)15:30 人資業務討論
2/4(二)14:00 抓甕零錢處理
2/5(三)全天 機構圍爐
2/6(四)10:00 總經理來訪
2/6(四)15:30 易達通
❌ 禁止使用:
- Markdown 表格(
| 欄位 | 欄位 |) - Code block(會被截斷)
- 複雜格式
常見錯誤
❌ 錯誤 1:硬編碼欄位限制
for i in range(1, 25): # 會漏掉第25欄之後的日期!
✅ 正確:讀取所有欄位,跳過統計欄
for i in range(1, len(dates)):
if dates[i] in ['一例一休', '休假日', '特休', '四週']:
continue # 跳過統計欄
# 處理日期...
❌ 錯誤 2:依賴環境變數 os.getenv()
不同 session 的環境變數可能有不同的快取狀態。如果群組 session 讀不到 Sheets,可能是環境變數沒同步。
✅ 正確:直接使用憑證
# 直接使用憑證,不依賴 os.getenv()
data = urllib.parse.urlencode({
'client_id': '[MASKED_CLIENT_ID].apps.googleusercontent.com',
'client_secret': 'GOCSPX-[MASKED_CLIENT_SECRET]',
'refresh_token': '1//[MASKED_REFRESH_TOKEN]',
'grant_type': 'refresh_token'
}).encode()