k-schoollunch-menu

k-schoollunch-menu

熱門

當使用者以自然語言的教育廳和學校名稱查詢韓國學校餐點菜單(급식 식단)時使用,透過 k-skill-proxy 的 NEIS 學校搜尋和學校餐點路由。

6505星標
746分支
更新於 2026/7/27
SKILL.md
唯讀
名稱
k-schoollunch-menu
描述

當使用者以自然語言的教育廳和學校名稱查詢韓國學校餐點菜單(급식 식단)時使用,透過 k-skill-proxy 的 NEIS 學校搜尋和學校餐點路由。

韓國學校午餐菜單(NEIS)

這個技能做什麼

透過 k-skill-proxy 代理的 HTTP API 查詢 NEIS 教育資訊開放入口的 學校基本資訊餐點菜單資訊

  • 使用者只需提供 市道教育廳名稱(自然語言)、學校名稱日期
  • 代理程式先以 /v1/neis/school-search 搜尋學校,再用回應中的 SD_SCHUL_CODEATPT_OFCDC_SC_CODE 呼叫 /v1/neis/school-meal
  • 認證金鑰(KEDU_INFO_KEY)僅存放在 代理伺服器,客戶端無需金鑰,只需呼叫代理 URL。

使用時機

  • "서울특별시교육청 미래초등학교 오늘 급식 뭐야?"
  • "○○초 급식 식단 알려줘"
  • "이번 주 화요일 중학교 급식 메뉴"
  • "급식 메뉴 조회해줘"(確認教育廳、學校、日期後進行)

前置需求

  • 網路連線
  • 可使用 curl 的環境
  • 能存取已設定 KEDU_INFO_KEYk-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) 收集輸入(請勿猜測)

若缺少以下資訊,簡短詢問使用者:

  1. 教育廳 — 接受自然語言(例如:서울특별시교육청서울경기도교육청)。
  2. 學校名稱 — 自然語言(例如:미래초등학교○○중학교)。
  3. 餐點日期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_OFFICESCHOOL_NAME 可直接使用使用者輸入。代理會將教育廳名稱解析為代碼。
  • 回應中的 resolved_education_office.atpt_ofcdc_sc_code 可確認實際匹配的市道教育廳代碼。

3) 若多所學校符合則消除歧義

schoolInfo 主體中的 row多筆,則向使用者顯示 學校名稱、地址(ORG_RDNMA 等),並讓使用者選擇一筆。

若只有一筆,則使用該 row 的 ATPT_OFCDC_SC_CODESD_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 回傳空結果,則提示「該日期無餐點資料」的可能性。

上游參考

完成條件

  • 已確認教育廳、學校、日期。
  • 學校搜尋已確定單一學校(或使用者已選擇)。
  • 餐點 API 呼叫成功,並以使用者友善的方式整理菜單。

失敗模式

  • 代理未設定 KEDU_INFO_KEY503 / upstream_not_configured
  • 教育廳名稱涵蓋多個市道 → 400 / ambiguous_education_office
  • 學校名稱有多筆結果 — 請勿未經使用者選擇就隨意選取
  • 假日、假期或未提供餐點日期導致空餐點
  • NEIS API 暫時故障或呼叫限制

備註

  • 不要讓使用者記住學校代碼。一律遵循 school-searchschool-meal 的順序。
  • 不要直接貼上原始 JSON,應以摘要為主回覆。
  • 詳細端點與欄位請參閱 docs/features/k-schoollunch-menu.mddocs/features/k-skill-proxy.md