SKILL.md
唯讀
名稱
k-schoollunch-menu
描述
當使用者以自然語言的教育廳和學校名稱查詢韓國學校餐點菜單(급식 식단)時使用,透過 k-skill-proxy 的 NEIS 學校搜尋和學校餐點路由。
韓國學校午餐菜單(NEIS)
這個技能做什麼
透過 k-skill-proxy 代理的 HTTP API 查詢 NEIS 教育資訊開放入口的 學校基本資訊 和 餐點菜單資訊。
- 使用者只需提供 市道教育廳名稱(自然語言)、學校名稱 和 日期。
- 代理程式先以
/v1/neis/school-search搜尋學校,再用回應中的SD_SCHUL_CODE和ATPT_OFCDC_SC_CODE呼叫/v1/neis/school-meal。 - 認證金鑰(
KEDU_INFO_KEY)僅存放在 代理伺服器,客戶端無需金鑰,只需呼叫代理 URL。
使用時機
- "서울특별시교육청 미래초등학교 오늘 급식 뭐야?"
- "○○초 급식 식단 알려줘"
- "이번 주 화요일 중학교 급식 메뉴"
- "급식 메뉴 조회해줘"(確認教育廳、學校、日期後進行)
前置需求
- 網路連線
- 可使用
curl的環境 - 能存取已設定
KEDU_INFO_KEY的k-skill-proxy部署(預設託管或自架)
憑證需求
- 使用者端 無需 任何密鑰。
KSKILL_PROXY_BASE_URL— 僅在使用自架或獨立代理時設定。若留空,則使用預設託管https://k-skill-proxy.nomadamas.org。KEDU_INFO_KEY僅放在 代理伺服器 的環境變數中。
代理基礎 URL
代理程式依以下方式決定基礎 URL:
BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
BASE="${BASE%/}"
工作流程
1) 收集輸入(請勿猜測)
若缺少以下資訊,簡短詢問使用者:
- 教育廳 — 接受自然語言(例如:
서울특별시교육청、서울、경기도교육청)。 - 學校名稱 — 自然語言(例如:
미래초등학교、○○중학교)。 - 餐點日期 —
YYYYMMDD或將使用者提到的日期轉換為韓國時間的YYYYMMDD。若省略,則預設為 今天(韓國時間)。
若教育廳表述模糊而回傳 ambiguous_education_office,則顯示回應中的 candidate_codes,並要求使用者提供更具體的名稱(例如:경상북도교육청 vs 경상남도교육청)。
2) 搜尋學校(/v1/neis/school-search)
curl -fsS --get "${BASE}/v1/neis/school-search" \
--data-urlencode "educationOffice=${EDU_OFFICE}" \
--data-urlencode "schoolName=${SCHOOL_NAME}"
EDU_OFFICE和SCHOOL_NAME可直接使用使用者輸入。代理會將教育廳名稱解析為代碼。- 回應中的
resolved_education_office.atpt_ofcdc_sc_code可確認實際匹配的市道教育廳代碼。
3) 若多所學校符合則消除歧義
若 schoolInfo 主體中的 row 有 多筆,則向使用者顯示 學校名稱、地址(ORG_RDNMA 等),並讓使用者選擇一筆。
若只有一筆,則使用該 row 的 ATPT_OFCDC_SC_CODE 和 SD_SCHUL_CODE 進行下一步。
4) 取得餐點(/v1/neis/school-meal)
curl -fsS --get "${BASE}/v1/neis/school-meal" \
--data-urlencode "educationOfficeCode=${ATPT}" \
--data-urlencode "schoolCode=${SD}" \
--data-urlencode "mealDate=${YYYYMMDD}"
ATPT/SD為步驟 3 確認的代碼。- 若只想看 早餐、午餐、晚餐,可加上
mealKindCode=1|2|3(選擇性)。
5) 為使用者摘要
- 根據
mealServiceDietInfo中的row進行摘要。 - 將菜單字串(
DDISH_NM等)中的<br/>替換為換行,以利閱讀。 - 若有熱量、營養資訊欄位,則附加一兩行說明。
- 若 NEIS 回傳空結果,則提示「該日期無餐點資料」的可能性。
上游參考
- 餐點與學校基本資訊資料來源:NEIS 教育資訊開放入口
完成條件
- 已確認教育廳、學校、日期。
- 學校搜尋已確定單一學校(或使用者已選擇)。
- 餐點 API 呼叫成功,並以使用者友善的方式整理菜單。
失敗模式
- 代理未設定
KEDU_INFO_KEY→503/upstream_not_configured - 教育廳名稱涵蓋多個市道 →
400/ambiguous_education_office - 學校名稱有多筆結果 — 請勿未經使用者選擇就隨意選取
- 假日、假期或未提供餐點日期導致空餐點
- NEIS API 暫時故障或呼叫限制
備註
- 不要讓使用者記住學校代碼。一律遵循
school-search→school-meal的順序。 - 不要直接貼上原始 JSON,應以摘要為主回覆。
- 詳細端點與欄位請參閱
docs/features/k-schoollunch-menu.md和docs/features/k-skill-proxy.md。






