home / skills / openclaw / skills / seoul-metro
/skills/dukbong/seoul-metro
This skill provides real-time Seoul Metro arrivals, route planning, and service alerts to help users navigate efficiently.
npx playbooks add skill openclaw/skills --skill seoul-metroReview the files below or copy the command above to add this skill to your agents.
---
name: seoul-metro
description: Seoul Metro assistant for real-time arrivals, route planning, and service alerts (Korean/English)
metadata: {"moltbot":{"emoji":"๐","requires":{"bins":["curl","jq"],"env":["SEOUL_OPENAPI_KEY","DATA_GO_KR_KEY"]},"primaryEnv":"SEOUL_OPENAPI_KEY"}}
homepage: https://github.com/dukbong/seoul-metro
user-invocable: true
---
# Seoul Metro Skill
Query real-time Seoul Metro information.
## Features
| Feature | Description | Trigger Example (KO) | Trigger Example (EN) |
|---------|-------------|----------------------|----------------------|
| Real-time Arrival | Train arrival times by station | "๊ฐ๋จ์ญ ๋์ฐฉ์ ๋ณด" | "Gangnam station arrivals" |
| Station Search | Line and station code lookup | "๊ฐ๋จ์ญ ๋ชํธ์ ?" | "What line is Gangnam?" |
| Route Search | Shortest path with time/fare | "์ ๋๋ฆผ์์ ์์ธ์ญ" | "Sindorim to Seoul Station" |
| Service Alerts | Delays, incidents, non-stops | "์งํ์ฒ ์ง์ฐ ์์ด?" | "Any subway delays?" |
## Environment Variables
| Variable | Usage | Provider |
|----------|-------|----------|
| `SEOUL_OPENAPI_KEY` | Arrival info, station search | data.seoul.go.kr |
| `DATA_GO_KR_KEY` | Route search, alerts | data.go.kr |
**How to get API keys:**
1. **SEOUL_OPENAPI_KEY**: Sign up at [data.seoul.go.kr](https://data.seoul.go.kr), go to "My Page" > "API Key Management"
2. **DATA_GO_KR_KEY**: Sign up at [data.go.kr](https://www.data.go.kr), search for the API service, and request access
---
## API Reference
### 1. Real-time Arrival Info
**Endpoint**
```
http://swopenAPI.seoul.go.kr/api/subway/{KEY}/json/realtimeStationArrival/{start}/{end}/{station}
```
**Response Fields**
| Field | Description |
|-------|-------------|
| `subwayId` | Line ID (1002=Line 2, 1077=Sinbundang) |
| `trainLineNm` | Direction (e.g., "์ฑ์ํ - ์ญ์ผ๋ฐฉ๋ฉด") |
| `arvlMsg2` | Arrival time (e.g., "4๋ถ 20์ด ํ") |
| `arvlMsg3` | Current location |
| `btrainSttus` | Train type (์ผ๋ฐ/๊ธํ) |
| `lstcarAt` | Last train (0=No, 1=Yes) |
---
### 2. Station Search
**Endpoint**
```
http://openapi.seoul.go.kr:8088/{KEY}/json/SearchInfoBySubwayNameService/{start}/{end}/{station}
```
**Response Fields**
| Field | Description |
|-------|-------------|
| `STATION_CD` | Station code |
| `STATION_NM` | Station name |
| `LINE_NUM` | Line name (e.g., "02ํธ์ ") |
| `FR_CODE` | External station code |
---
### 3. Route Search
**Endpoint**
```
https://apis.data.go.kr/B553766/path/getShtrmPath
```
**Parameters**
| Parameter | Required | Description |
|-----------|----------|-------------|
| `serviceKey` | Yes | DATA_GO_KR_KEY |
| `dptreStnNm` | Yes | Departure station |
| `arvlStnNm` | Yes | Arrival station |
| `searchDt` | Yes | Datetime (yyyy-MM-dd HH:mm:ss) |
| `dataType` | Yes | JSON |
| `searchType` | No | duration / distance / transfer |
**Response Fields**
| Field | Description |
|-------|-------------|
| `totalDstc` | Total distance (m) |
| `totalreqHr` | Total time (seconds) |
| `totalCardCrg` | Fare (KRW) |
| `paths[].trainno` | Train number |
| `paths[].trainDptreTm` | Departure time |
| `paths[].trainArvlTm` | Arrival time |
| `paths[].trsitYn` | Transfer flag |
---
### 4. Service Alerts
**Endpoint**
```
https://apis.data.go.kr/B553766/ntce/getNtceList
```
**Parameters**
| Parameter | Required | Description |
|-----------|----------|-------------|
| `serviceKey` | Yes | DATA_GO_KR_KEY |
| `dataType` | Yes | JSON |
| `pageNo` | No | Page number |
| `numOfRows` | No | Results per page |
| `lineNm` | No | Filter by line |
**Response Fields**
| Field | Description |
|-------|-------------|
| `noftTtl` | Alert title |
| `noftCn` | Alert content |
| `noftOcrnDt` | Timestamp |
| `lineNmLst` | Affected line(s) |
| `nonstopYn` | Non-stop flag |
| `xcseSitnBgngDt` | Incident start |
| `xcseSitnEndDt` | Incident end |
---
## Line ID Mapping
| Line | ID | Line | ID |
|------|----|------|----|
| Line 1 | 1001 | Line 6 | 1006 |
| Line 2 | 1002 | Line 7 | 1007 |
| Line 3 | 1003 | Line 8 | 1008 |
| Line 4 | 1004 | Line 9 | 1009 |
| Line 5 | 1005 | Sinbundang | 1077 |
| Gyeongui-Jungang | 1063 | Gyeongchun | 1067 |
| Airport Railroad | 1065 | Suin-Bundang | 1075 |
---
## Station Name Mapping (English โ Korean)
์ฃผ์ ์ญ ์ด๋ฆ์ ์์ด-ํ๊ธ ๋งคํ ํ
์ด๋ธ์
๋๋ค. API ํธ์ถ ์ ์์ด ์
๋ ฅ์ ํ๊ธ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
### Line 1 (1ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Seoul Station | ์์ธ์ญ | City Hall | ์์ฒญ |
| Jonggak | ์ข
๊ฐ | Jongno 3-ga | ์ข
๋ก3๊ฐ |
| Jongno 5-ga | ์ข
๋ก5๊ฐ | Dongdaemun | ๋๋๋ฌธ |
| Cheongnyangni | ์ฒญ๋๋ฆฌ | Yongsan | ์ฉ์ฐ |
| Noryangjin | ๋
ธ๋์ง | Yeongdeungpo | ์๋ฑํฌ |
| Guro | ๊ตฌ๋ก | Incheon | ์ธ์ฒ |
| Bupyeong | ๋ถํ | Suwon | ์์ |
### Line 2 (2ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Gangnam | ๊ฐ๋จ | Yeoksam | ์ญ์ผ |
| Samseong | ์ผ์ฑ | Jamsil | ์ ์ค |
| Sindorim | ์ ๋๋ฆผ | Hongdae (Hongik Univ.) | ํ๋์
๊ตฌ |
| Hapjeong | ํฉ์ | Dangsan | ๋น์ฐ |
| Yeouido | ์ฌ์๋ | Konkuk Univ. | ๊ฑด๋์
๊ตฌ |
| Seolleung | ์ ๋ฆ | Samsung | ์ผ์ฑ |
| Sports Complex | ์ข
ํฉ์ด๋์ฅ | Gangbyeon | ๊ฐ๋ณ |
| Ttukseom | ๋์ฌ | Seongsu | ์ฑ์ |
| Wangsimni | ์์ญ๋ฆฌ | Euljiro 3-ga | ์์ง๋ก3๊ฐ |
| Euljiro 1-ga | ์์ง๋ก์
๊ตฌ | City Hall | ์์ฒญ |
| Chungjeongno | ์ถฉ์ ๋ก | Ewha Womans Univ. | ์ด๋ |
| Sinchon | ์ ์ด | Sadang | ์ฌ๋น |
| Nakseongdae | ๋์ฑ๋ | Seoul Nat'l Univ. | ์์ธ๋์
๊ตฌ |
| Guro Digital Complex | ๊ตฌ๋ก๋์งํธ๋จ์ง | Mullae | ๋ฌธ๋ |
### Line 3 (3ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Gyeongbokgung | ๊ฒฝ๋ณต๊ถ | Anguk | ์๊ตญ |
| Jongno 3-ga | ์ข
๋ก3๊ฐ | Chungmuro | ์ถฉ๋ฌด๋ก |
| Dongguk Univ. | ๋๋์
๊ตฌ | Yaksu | ์ฝ์ |
| Apgujeong | ์๊ตฌ์ | Sinsa | ์ ์ฌ |
| Express Bus Terminal | ๊ณ ์ํฐ๋ฏธ๋ | Gyodae | ๊ต๋ |
| Nambu Bus Terminal | ๋จ๋ถํฐ๋ฏธ๋ | Yangjae | ์์ฌ |
| Daehwa | ๋ํ | Juyeop | ์ฃผ์ฝ |
### Line 4 (4ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Myeongdong | ๋ช
๋ | Hoehyeon | ํํ |
| Seoul Station | ์์ธ์ญ | Sookmyung Women's Univ. | ์๋์
๊ตฌ |
| Dongdaemun History & Culture Park | ๋๋๋ฌธ์ญ์ฌ๋ฌธํ๊ณต์ | Hyehwa | ํํ |
| Hansung Univ. | ํ์ฑ๋์
๊ตฌ | Mia | ๋ฏธ์ |
| Mia Sageori | ๋ฏธ์์ฌ๊ฑฐ๋ฆฌ | Gireum | ๊ธธ์ |
| Chongshin Univ. | ์ด์ ๋์
๊ตฌ | Sadang | ์ฌ๋น |
### Line 5 (5ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Gwanghwamun | ๊ดํ๋ฌธ | Jongno 3-ga | ์ข
๋ก3๊ฐ |
| Dongdaemun History & Culture Park | ๋๋๋ฌธ์ญ์ฌ๋ฌธํ๊ณต์ | Cheonggu | ์ฒญ๊ตฌ |
| Wangsimni | ์์ญ๋ฆฌ | Haengdang | ํ๋น |
| Yeouido | ์ฌ์๋ | Yeouinaru | ์ฌ์๋๋ฃจ |
| Mapo | ๋งํฌ | Gongdeok | ๊ณต๋ |
| Gimpo Airport | ๊นํฌ๊ณตํญ | Banghwa | ๋ฐฉํ |
### Line 6 (6ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Itaewon | ์ดํ์ | Samgakji | ์ผ๊ฐ์ง |
| Noksapyeong | ๋
น์ฌํ | Hangang | ํ๊ฐ์ง |
| Sangsu | ์์ | Hapjeong | ํฉ์ |
| World Cup Stadium | ์๋์ปต๊ฒฝ๊ธฐ์ฅ | Digital Media City | ๋์งํธ๋ฏธ๋์ด์ํฐ |
### Line 7 (7ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Gangnam-gu Office | ๊ฐ๋จ๊ตฌ์ฒญ | Cheongdam | ์ฒญ๋ด |
| Konkuk Univ. | ๊ฑด๋์
๊ตฌ | Children's Grand Park | ์ด๋ฆฐ์ด๋๊ณต์ |
| Junggok | ์ค๊ณก | Ttukseom Resort | ๋์ฌ์ ์์ง |
| Express Bus Terminal | ๊ณ ์ํฐ๋ฏธ๋ | Nonhyeon | ๋
ผํ |
| Hakdong | ํ๋ | Bogwang | ๋ณด๊ด |
| Jangam | ์ฅ์ | Dobongsan | ๋๋ด์ฐ |
### Line 8 (8ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Jamsil | ์ ์ค | Mongchontoseong | ๋ชฝ์ดํ ์ฑ |
| Gangdong-gu Office | ๊ฐ๋๊ตฌ์ฒญ | Cheonho | ์ฒํธ |
| Bokjeong | ๋ณต์ | Sanseong | ์ฐ์ฑ |
| Moran | ๋ชจ๋ | Amsa | ์์ฌ |
### Line 9 (9ํธ์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Sinnonhyeon | ์ ๋
ผํ | Express Bus Terminal | ๊ณ ์ํฐ๋ฏธ๋ |
| Dongjak | ๋์ | Noryangjin | ๋
ธ๋์ง |
| Yeouido | ์ฌ์๋ | National Assembly | ๊ตญํ์์ฌ๋น |
| Dangsan | ๋น์ฐ | Yeomchang | ์ผ์ฐฝ |
| Gimpo Airport | ๊นํฌ๊ณตํญ | Gaehwa | ๊ฐํ |
| Olympic Park | ์ฌ๋ฆผํฝ๊ณต์ | Sports Complex | ์ข
ํฉ์ด๋์ฅ |
### Sinbundang Line (์ ๋ถ๋น์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Gangnam | ๊ฐ๋จ | Sinsa | ์ ์ฌ |
| Yangjae | ์์ฌ | Yangjae Citizen's Forest | ์์ฌ์๋ฏผ์์ฒ |
| Pangyo | ํ๊ต | Jeongja | ์ ์ |
| Dongcheon | ๋์ฒ | Suji District Office | ์์ง๊ตฌ์ฒญ |
| Gwanggyo | ๊ด๊ต | Gwanggyo Jungang | ๊ด๊ต์ค์ |
### Gyeongui-Jungang Line (๊ฒฝ์์ค์์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Seoul Station | ์์ธ์ญ | Hongdae (Hongik Univ.) | ํ๋์
๊ตฌ |
| Gongdeok | ๊ณต๋ | Hyochang Park | ํจ์ฐฝ๊ณต์์ |
| Yongsan | ์ฉ์ฐ | Oksu | ์ฅ์ |
| Wangsimni | ์์ญ๋ฆฌ | Cheongnyangni | ์ฒญ๋๋ฆฌ |
| DMC | ๋์งํธ๋ฏธ๋์ด์ํฐ | Susaek | ์์ |
| Ilsan | ์ผ์ฐ | Paju | ํ์ฃผ |
### Airport Railroad (๊ณตํญ์ฒ ๋)
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Seoul Station | ์์ธ์ญ | Gongdeok | ๊ณต๋ |
| Hongdae (Hongik Univ.) | ํ๋์
๊ตฌ | Digital Media City | ๋์งํธ๋ฏธ๋์ด์ํฐ |
| Gimpo Airport | ๊นํฌ๊ณตํญ | Incheon Airport T1 | ์ธ์ฒ๊ณตํญ1ํฐ๋ฏธ๋ |
| Incheon Airport T2 | ์ธ์ฒ๊ณตํญ2ํฐ๋ฏธ๋ | Cheongna Int'l City | ์ฒญ๋ผ๊ตญ์ ๋์ |
### Suin-Bundang Line (์์ธ๋ถ๋น์ )
| English | Korean | English | Korean |
|---------|--------|---------|--------|
| Wangsimni | ์์ญ๋ฆฌ | Seolleung | ์ ๋ฆ |
| Gangnam-gu Office | ๊ฐ๋จ๊ตฌ์ฒญ | Seonjeongneung | ์ ์ ๋ฆ |
| Jeongja | ์ ์ | Migeum | ๋ฏธ๊ธ |
| Ori | ์ค๋ฆฌ | Jukjeon | ์ฃฝ์ |
| Suwon | ์์ | Incheon | ์ธ์ฒ |
---
## Usage Examples
**Real-time Arrival**
```bash
curl "http://swopenAPI.seoul.go.kr/api/subway/${SEOUL_OPENAPI_KEY}/json/realtimeStationArrival/0/10/๊ฐ๋จ"
```
**Station Search**
```bash
curl "http://openapi.seoul.go.kr:8088/${SEOUL_OPENAPI_KEY}/json/SearchInfoBySubwayNameService/1/10/๊ฐ๋จ"
```
**Route Search**
```bash
curl -G "https://apis.data.go.kr/B553766/path/getShtrmPath?serviceKey=${DATA_GO_KR_KEY}&dataType=JSON" \
--data-urlencode "dptreStnNm=์ ๋๋ฆผ" \
--data-urlencode "arvlStnNm=์์ธ์ญ" \
--data-urlencode "searchDt=$(date '+%Y-%m-%d %H:%M:%S')"
```
**Service Alerts**
```bash
curl "https://apis.data.go.kr/B553766/ntce/getNtceList?serviceKey=${DATA_GO_KR_KEY}&dataType=JSON&pageNo=1&numOfRows=10"
```
---
## Output Format Guide
### Real-time Arrival
**Korean:**
```
[๊ฐ๋จ์ญ ๋์ฐฉ ์ ๋ณด]
| ํธ์ | ๋ฐฉํฅ | ๋์ฐฉ | ์์น | ์ ํ |
|------|------|------|------|------|
| 2ํธ์ | ์ฑ์ํ | 3๋ถ | ์ญ์ผ | ์ผ๋ฐ |
```
**English:**
```
[Gangnam Station Arrivals]
| Line | Direction | Arrival | Location | Type |
|------|-----------|---------|----------|------|
| Line 2 | Seongsu-bound | 3 min | Yeoksam | Regular |
```
### Station Search
**Korean:**
```
[๊ฐ๋จ์ญ]
| ํธ์ | ์ญ์ฝ๋ | ์ธ๋ถ์ฝ๋ |
|------|--------|----------|
| 2ํธ์ | 222 | 0222 |
```
**English:**
```
[Gangnam Station]
| Line | Station Code | External Code |
|------|--------------|---------------|
| Line 2 | 222 | 0222 |
```
### Route Search
**Korean:**
```
[๊ฐ๋จ -> ํ๋์
๊ตฌ]
์์์๊ฐ: 38๋ถ | ๊ฑฐ๋ฆฌ: 22.1 km | ์๊ธ: 1,650์ | ํ์น: 1ํ
1. 09:03 ๊ฐ๋จ ์ถ๋ฐ (2ํธ์ ์ฑ์๋ฐฉ๋ฉด)
2. 09:18 ์ ๋๋ฆผ ํ์น (2ํธ์ -> 1ํธ์ )
3. 09:42 ํ๋์
๊ตฌ ๋์ฐฉ
```
**English:**
```
[Gangnam -> Hongdae]
Time: 38 min | Distance: 22.1 km | Fare: 1,650 KRW | Transfers: 1
1. 09:03 Depart Gangnam (Line 2 towards Seongsu)
2. 09:18 Transfer at Sindorim (Line 2 -> Line 1)
3. 09:42 Arrive Hongdae
```
### Service Alerts
**Korean:**
```
[์ดํ ์๋ฆผ]
[1ํธ์ ] ์ข
๋ก3๊ฐ์ญ ๋ฌด์ ์ฐจ (15:00 ~ 15:22)
- ์ฝ๋ ์ผ ์ด์ฐจ ์ฐ๊ธฐ ๋ฐ์์ผ๋ก ์ธํจ
[2ํธ์ ] ์ ์ ์ดํ
```
**English:**
```
[Service Alerts]
[Line 1] Jongno 3-ga Non-stop (15:00 ~ 15:22)
- Due to smoke from Korail train
[Line 2] Normal operation
```
### Error
**Korean:**
```
์ค๋ฅ: ์ญ์ ์ฐพ์ ์ ์์ต๋๋ค.
"๊ฐ๋จ" (์ญ ์ด๋ฆ๋ง)์ผ๋ก ๊ฒ์ํด ๋ณด์ธ์.
```
**English:**
```
Error: Station not found.
Try searching with "Gangnam" (station name only).
```
### API Key Errors
**Korean:**
```
์ค๋ฅ: API ์ธ์ฆํค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค.
ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ฃผ์ธ์: SEOUL_OPENAPI_KEY
๋ฐ๊ธ ์๋ด:
- ์์ธ์ด๋ฆฐ๋ฐ์ดํฐ๊ด์ฅ: https://data.seoul.go.kr
- ๊ณต๊ณต๋ฐ์ดํฐํฌํธ: https://www.data.go.kr
```
**English:**
```
Error: API key is not configured.
Please set environment variable: SEOUL_OPENAPI_KEY
Get your API key:
- Seoul Open Data Plaza: https://data.seoul.go.kr
- Korea Public Data Portal: https://www.data.go.kr
```
**Korean:**
```
์ค๋ฅ: API ์ธ์ฆํค๊ฐ ์ ํจํ์ง ์์ต๋๋ค.
์ธ์ฆํค๋ฅผ ํ์ธํด์ฃผ์ธ์.
```
**English:**
```
Error: Invalid API key.
Please verify your API key.
```
This skill provides a Seoul Metro assistant for real-time arrivals, station lookup, route planning, and service alerts in Korean and English. It connects to Seoul Open Data and Korea Public Data APIs to fetch live subway arrivals, station codes, shortest routes with time and fare, and current service notifications. The skill returns human-friendly bilingual outputs and handles common API key and lookup errors.
The skill calls Seoul OpenAPI endpoints for realtimeStationArrival and SearchInfoBySubwayNameService to get arrival times and station metadata. For routing and alerts it uses data.go.kr services (getShtrmPath and getNtceList) to compute shortest paths, travel time, fares, and incident notices. Inputs accept English or Korean station names; English inputs are mapped to Korean before API calls. Responses are formatted into concise bilingual summaries showing line, direction, arrival, transfers, times, fares, and alert details.
What API keys are required?
Set SEOUL_OPENAPI_KEY for Seoul OpenAPI (arrivals and station search) and DATA_GO_KR_KEY for data.go.kr (route and alerts).
What if a station name is not found?
Try a simpler station name (single token) or use the EnglishโKorean mapping included with the skill; the skill returns an error suggestion if lookup fails.