端點
POST /reminder/send
Content-Type: application/json
請求參數 (Body)
| 欄位 |
型別 |
必填 |
說明 |
remind_type |
String |
是 |
六大條件代碼之一 |
case_id_number |
String |
是 |
個案身分證字號(用於對照 Space ID) |
teacher_name |
String |
否 |
老師姓名。有填:「林佳茵老師,老師您好:…」;不填:直接「老師您好:…」開始 |
event_date |
String |
是 |
相關日期,例如 115/04/08 |
六大條件代碼
| 代碼 |
情境 |
RECORD_TEMP | 服務紀錄:暫存提醒 |
RECORD_NG | 服務紀錄:退件提醒 |
VISIT_CONFIRM | 下次訪視日期:確認/催辦 |
PLAN_EXPIRE | 計畫期程:到期提醒(提前 2 週) |
CLOSE_REPORT_AUTO | 結案報告:催繳提醒 |
CLOSE_REPORT_MANUAL | 提前結案報告:催繳提醒 |
curl 範例
curl -X POST https://<your-host>/reminder/send \
-H "Content-Type: application/json" \
-d '{
"remind_type": "VISIT_CONFIRM",
"case_id_number": "A123456789",
"teacher_name": "林佳茵",
"event_date": "115/04/08"
}'
成功回應 (HTTP 200)
{
"success": true,
"data": {
"remind_type": "VISIT_CONFIRM",
"space_id": "AAQA...",
"message_text": "林佳茵老師,老師您好:...",
"log_id": "a5306ec3-5526-...",
"waited_ms": 0,
"sent_at": "2026-05-05T07:56:11.767Z"
}
}
錯誤回應
| HTTP |
情境 |
範例 error 訊息 |
| 400 |
參數驗證失敗 |
remind_type must be one of: ... |
| 404 |
csms_client 找不到對應 case_id_number(同時會寫一筆 success=false 的 log) |
case_id_number not found in csms_client: ... |
| 200 + success:false |
Google Chat 發送失敗(如 bot 被踢出聊天室)— 本身請求處理正常,只是 Google Chat 拒收 |
Google Chat API PERMISSION_DENIED 403: ... |
| 502 |
Directus 連線失敗(連 log 都寫不進去) |
failed to query directus... |
處理邏輯
- 驗證必填欄位與
remind_type 是否為合法代碼。
- 依
remind_type 渲染模板:有 teacher_name 時開頭為「{teacher_name}老師,老師您好:…」;沒有時直接「老師您好:…」開始。
- 從 Directus 的
csms_client 依 client_identity = case_id_number 查 google_chat_room_id;找不到 → 寫一筆 success=false 的 log 後回 404。
- 進入序列化佇列,與前一筆間隔 ≥ 1 秒後送至 Google Chat。
- Google Chat 失敗(bot 被踢、API error 等)→
success=false,error_message 記錄原因。
- 無論成功或失敗,都寫一筆紀錄到 Directus 的
csms_reminder_log。
- 等實際發送完成後才回 response(同步模式)。