← Back to Skills
Communication

seoul-subway

dukbong By dukbong 👁 11 views ▲ 0 votes

Seoul Subway assistant for real-time arrivals, route planning

GitHub
---
name: seoul-subway
description: Seoul Subway assistant for real-time arrivals, route planning, and service alerts (Korean/English)
model: sonnet
metadata: {"moltbot":{"emoji":"๐Ÿš‡","requires":{"bins":["curl","jq"]}}}
homepage: https://github.com/dukbong/seoul-subway
user-invocable: true
---

# Seoul Subway Skill

Query real-time Seoul Subway information. **No API key required** - uses proxy server.

## 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?" |
| **Last Train** | Last train times by station | "ํ™๋Œ€ ๋ง‰์ฐจ ๋ช‡ ์‹œ์•ผ?" | "Last train to Hongdae?" |
| **Exit Info** | Exit numbers for landmarks | "์ฝ”์—‘์Šค ๋ช‡ ๋ฒˆ ์ถœ๊ตฌ?" | "Which exit for COEX?" |
| **Accessibility** | Elevators, escalators, wheelchair lifts | "๊ฐ•๋‚จ์—ญ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ" | "Gangnam elevators" |
| **Quick Exit** | Best car for facilities | "๊ฐ•๋‚จ์—ญ ๋น ๋ฅธํ•˜์ฐจ" | "Gangnam quick exit" |
| **Restrooms** | Restroom locations | "๊ฐ•๋‚จ์—ญ ํ™”์žฅ์‹ค" | "Gangnam restrooms" |

### Natural Language Triggers / ์ž์—ฐ์–ด ํŠธ๋ฆฌ๊ฑฐ

๋‹ค์–‘ํ•œ ์ž์—ฐ์–ด ํ‘œํ˜„์„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค:

#### Real-time Arrival / ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "When's the next train at Gangnam?" | "๊ฐ•๋‚จ ๋ช‡ ๋ถ„ ๋‚จ์•˜์–ด?" |
| "Trains at Gangnam" | "๊ฐ•๋‚จ ์—ด์ฐจ" |
| "Gangnam arrivals" | "๊ฐ•๋‚จ ์–ธ์ œ ์™€?" |
| "Next train to Gangnam" | "๋‹ค์Œ ์—ด์ฐจ ๊ฐ•๋‚จ" |

#### Route Search / ๊ฒฝ๋กœ ๊ฒ€์ƒ‰
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "How do I get to Seoul Station from Gangnam?" | "๊ฐ•๋‚จ์—์„œ ์„œ์šธ์—ญ ์–ด๋–ป๊ฒŒ ๊ฐ€?" |
| "Gangnam โ†’ Seoul Station" | "๊ฐ•๋‚จ โ†’ ์„œ์šธ์—ญ" |
| "Gangnam to Seoul Station" | "๊ฐ•๋‚จ์—์„œ ์„œ์šธ์—ญ ๊ฐ€๋Š” ๊ธธ" |
| "Route from Gangnam to Hongdae" | "๊ฐ•๋‚จ๋ถ€ํ„ฐ ํ™๋Œ€๊นŒ์ง€" |

#### Service Alerts / ์šดํ–‰ ์•Œ๋ฆผ
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Is Line 2 running normally?" | "2ํ˜ธ์„  ์ •์ƒ ์šดํ–‰ํ•ด?" |
| "Any delays on Line 1?" | "1ํ˜ธ์„  ์ง€์—ฐ ์žˆ์–ด?" |
| "Subway status" | "์ง€ํ•˜์ฒ  ์ƒํ™ฉ" |
| "Line 3 alerts" | "3ํ˜ธ์„  ์•Œ๋ฆผ" |

#### Last Train / ๋ง‰์ฐจ ์‹œ๊ฐ„
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Last train to Gangnam?" | "๊ฐ•๋‚จ ๋ง‰์ฐจ ๋ช‡ ์‹œ์•ผ?" |
| "When is the last train at Hongdae?" | "ํ™๋Œ€์ž…๊ตฌ ๋ง‰์ฐจ ์‹œ๊ฐ„" |
| "Final train to Seoul Station" | "์„œ์šธ์—ญ ๋ง‰์ฐจ" |
| "Last train on Saturday?" | "ํ† ์š”์ผ ๋ง‰์ฐจ ์‹œ๊ฐ„" |

#### Exit Info / ์ถœ๊ตฌ ์ •๋ณด
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Which exit for COEX?" | "์ฝ”์—‘์Šค ๋ช‡ ๋ฒˆ ์ถœ๊ตฌ?" |
| "Exit for Lotte World" | "๋กฏ๋ฐ์›”๋“œ ์ถœ๊ตฌ" |
| "DDP which exit?" | "DDP ๋ช‡ ๋ฒˆ ์ถœ๊ตฌ?" |
| "Gyeongbokgung Palace exit" | "๊ฒฝ๋ณต๊ถ ๋‚˜๊ฐ€๋Š” ์ถœ๊ตฌ" |

#### Accessibility / ์ ‘๊ทผ์„ฑ ์ •๋ณด
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Gangnam station elevators" | "๊ฐ•๋‚จ์—ญ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ" |
| "Escalators at Seoul Station" | "์„œ์šธ์—ญ ์—์Šค์ปฌ๋ ˆ์ดํ„ฐ" |
| "Wheelchair lifts at Jamsil" | "์ž ์‹ค์—ญ ํœ ์ฒด์–ด๋ฆฌํ”„ํŠธ" |
| "Accessibility info for Hongdae" | "ํ™๋Œ€์ž…๊ตฌ ์ ‘๊ทผ์„ฑ ์ •๋ณด" |

#### Quick Exit / ๋น ๋ฅธํ•˜์ฐจ
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Quick exit at Gangnam" | "๊ฐ•๋‚จ์—ญ ๋น ๋ฅธํ•˜์ฐจ" |
| "Which car for elevator?" | "์—˜๋ฆฌ๋ฒ ์ดํ„ฐ ๋ช‡ ๋ฒˆ์งธ ์นธ?" |
| "Best car for exit 3" | "3๋ฒˆ ์ถœ๊ตฌ ๊ฐ€๊นŒ์šด ์นธ" |
| "Fastest exit at Samsung" | "์‚ผ์„ฑ์—ญ ๋น ๋ฅธ ํ•˜์ฐจ ์œ„์น˜" |

#### Restrooms / ํ™”์žฅ์‹ค
| English | ํ•œ๊ตญ์–ด |
|---------|--------|
| "Restrooms at Gangnam" | "๊ฐ•๋‚จ์—ญ ํ™”์žฅ์‹ค" |
| "Where's the bathroom at Myeongdong?" | "๋ช…๋™์—ญ ํ™”์žฅ์‹ค ์–ด๋””์•ผ?" |
| "Accessible restroom at Seoul Station" | "์„œ์šธ์—ญ ์žฅ์• ์ธ ํ™”์žฅ์‹ค" |
| "Baby changing station at Jamsil" | "์ž ์‹ค์—ญ ๊ธฐ์ €๊ท€ ๊ตํ™˜๋Œ€" |

---

## First Time Setup / ์ฒซ ์‚ฌ์šฉ ์•ˆ๋‚ด

When you first use this skill, you'll see a permission prompt for the proxy domain.

์ฒ˜์Œ ์‚ฌ์šฉ ์‹œ ํ”„๋ก์‹œ ๋„๋ฉ”์ธ ์ ‘๊ทผ ํ™•์ธ ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค.

**Select / ์„ ํƒ:** `Yes, and don't ask again for vercel-proxy-henna-eight.vercel.app`

This only needs to be done once. / ํ•œ ๋ฒˆ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

---

## Proxy API Reference

All API calls go through the proxy server. No API keys needed for users.

### Base URL

```
https://vercel-proxy-henna-eight.vercel.app
```

### 1. Real-time Arrival Info

**Endpoint**
```
GET /api/realtime/{station}?start=0&end=10
```

**Parameters**

| Parameter | Required | Description |
|-----------|----------|-------------|
| station | Yes | Station name (Korean, URL-encoded) |
| start | No | Start index (default: 0) |
| end | No | End index (default: 10) |
| format | No | `formatted` (markdown, default) or `raw` (JSON) |
| lang | No | `ko` (default) or `en` |

**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 |
| `isFastTrain` | Fast train flag (1=๊ธ‰ํ–‰) |

**Example**
```bash
curl "https://vercel-proxy-henna-eight.vercel.app/api/realtime/๊ฐ•๋‚จ"
```

---

### 2. Station Search

**Endpoint**
```
GET /api/stations?station={name}&start=1&end=10
```

**Parameters**

| Parameter | Required | Description |
|-----------|----------|-------------|
| station | Yes | Station name to search |
| start | No | Start index (default: 1) |
| end | No | End index (default: 10) |

**Response Fields**

| Field | Description |
|-------|-------------|
| `STATION_CD` | Station code |
| `STATION_NM` | Station name |
| `LINE_NUM` | Line name (e.g., "02ํ˜ธ์„ ") |
| `FR_CODE` | External station code |

**Example**
```bash
curl "https://vercel-proxy-henna-eight.vercel.app/api/stations?station=๊ฐ•๋‚จ"
```

---

### 3. Route Search

**Endpoint**
```
GET /api/route?dptreStnNm={departure}&arvlStnNm={arrival}
```

**Parameters**

| Parameter | Required | Description |
|-----------|----------|-------------|
| dptreStnNm | Yes | Departure station |
| arvlStnNm | Yes | Arrival station |
| searchDt | No | Datetime (yyyy-MM-dd HH:mm:ss) |
| searchType | No | duration / distance / transfer |
| format | No | `formatted` (markdown, default) or `raw` (JSON) |
| lang | No | `ko` (default) or `en` |

**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 |

**Example**
```bash
curl "https://vercel-proxy-henna-eight.vercel.app/api/route?dptreStnNm=์‹ ๋„๋ฆผ&arvlStnNm=์„œ์šธ์—ญ"
```

---

### 4. Service Alerts

**Endpoint**
```
GET /api/alerts?pageNo=1&numOfRows=10&format=enhanced
```

**Parameters**

| Parameter | Required | Description |
|-----------|----------|-------------|
| pageNo | No | Page number (default: 1) |
| numOfRows | No | Results per page (default: 10) |
| lineNm | No | Filter by line |
| format | No | `default` or `enhanced` (structured response) |

**Response Fields (Default)**

| Field | Description |
|-------|-------------|
| `ntceNo` | Notice number |
| `ntceSj` | Notice title |
| `ntceCn` | Notice content |
| `lineNm` | Line name |
| `regDt` | Registration date |

**Response Fields (Enhanced)**

| Field | Description |
|-------|-------------|
| `summary.delayedLines` | Lines with delays |
| `summary.suspendedLines` | Lines with service suspended |
| `summary.normalLines` | Lines operating normally |
| `alerts[].lineName` | Line name (Korean) |
| `alerts[].lineNameEn` | Line name (English) |
| `alerts[].status` | `normal`, `delayed`, or `suspended` |
| `alerts[].severity` | `low`, `medium`, or `high` |
| `alerts[].title` | Alert title |

**Example**
```bash
# Default format
curl "https://vercel-proxy-henna-eight.vercel.app/api/alerts"

# Enhanced format with status summary
curl "https://vercel-proxy-henna-eight.vercel.app/api/alerts?format=enhanced"
```

---

### 5. Last Train Time

> **์ฐธ๊ณ :** ์ด API๋Š” ์ฃผ์š” ์—ญ 77๊ฐœ์˜ ๋ง‰์ฐจ ์‹œ๊ฐ„์„ ์ •์  ๋ฐ์ดํ„ฐ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
> ์„œ์šธ๊ตํ†ต๊ณต์‚ฌ 2025๋…„ 1์›” ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
>
> **์ง€์› ์—ญ (77๊ฐœ):**
> ๊ฐ€์‚ฐ๋””์ง€ํ„ธ๋‹จ์ง€, ๊ฐ•๋‚จ, ๊ฐ•๋‚จ๊ตฌ์ฒญ, ๊ฐ•๋ณ€, ๊ฑด๋Œ€์ž…๊ตฌ, ๊ฒฝ๋ณต๊ถ, ๊ณ ์†ํ„ฐ๋ฏธ๋„, ๊ณต๋•, ๊ด‘๋‚˜๋ฃจ, ๊ด‘ํ™”๋ฌธ, ๊ต๋Œ€, ๊ตฌ๋กœ, ๊ตฐ์ž, ๊น€ํฌ๊ณตํ•ญ, ๋…ธ๋Ÿ‰์ง„, ๋‹น์‚ฐ, ๋Œ€๋ฆผ, ๋™๋Œ€๋ฌธ, ๋™๋Œ€๋ฌธ์—ญ์‚ฌ๋ฌธํ™”๊ณต์›, ๋””์ง€ํ„ธ๋ฏธ๋””์–ด์‹œํ‹ฐ, ๋š์„ฌ, ๋งˆํฌ๊ตฌ์ฒญ, ๋ช…๋™, ๋ชจ๋ž€, ๋ชฝ์ดŒํ† ์„ฑ, ๋ณต์ •, ๋ถˆ๊ด‘, ์‚ฌ๊ฐ€์ •, ์‚ฌ๋‹น, ์‚ผ๊ฐ์ง€, ์‚ผ์„ฑ, ์ƒ๋ด‰, ์„œ์šธ๋Œ€์ž…๊ตฌ, ์„œ์šธ์—ญ, ์„ ๋ฆ‰, ์„ฑ์ˆ˜, ์ˆ˜์œ , ์‹œ์ฒญ, ์‹ ๋…ผํ˜„, ์‹ ๋‹น, ์‹ ๋„๋ฆผ, ์‹ ์‚ฌ, ์‹ ์ดŒ, ์•ˆ๊ตญ, ์••๊ตฌ์ •, ์•ฝ์ˆ˜, ์–‘์žฌ, ์—ฌ์˜๋„, ์—ญ์‚ผ, ์—ฐ์‹ ๋‚ด, ์˜๋“ฑํฌ, ์˜ฅ์ˆ˜, ์˜ฌ๋ฆผํ”ฝ๊ณต์›, ์™•์‹ญ๋ฆฌ, ์šฉ์‚ฐ, ์„์ง€๋กœ3๊ฐ€, ์„์ง€๋กœ4๊ฐ€, ์„์ง€๋กœ์ž…๊ตฌ, ์‘์•”, ์ด๋Œ€, ์ด์ดŒ, ์ดํƒœ์›, ์ธ์ฒœ๊ณตํ•ญ1ํ„ฐ๋ฏธ๋„, ์ธ์ฒœ๊ณตํ•ญ2ํ„ฐ๋ฏธ๋„, ์ž ์‹ค, ์ •์ž, ์ข…๊ฐ, ์ข…๋กœ3๊ฐ€, ์ข…ํ•ฉ์šด๋™์žฅ, ์ฒœํ˜ธ, ์ฒญ๋‹ด, ์ถฉ๋ฌด๋กœ, ํŒ๊ต, ํ•ฉ์ •, ํ˜œํ™”, ํ™๋Œ€์ž…๊ตฌ, ํšจ์ฐฝ๊ณต์›์•ž

**Endpoint**
```
GET /api/last-train/{station}?direction=up&weekType=1
```

**Parameters**

| Parameter | Required | Description |
|-----------|----------|-------------|
| station | Yes | Station name (Korean or English) |
| direction | No | `up`, `down`, or `all` (default: all) |
| weekType | No | `1`=Weekday, `2`=Saturday, `3`=Sunday/Holiday (default: auto) |

**Response Fields**

| Field | Description |
|-------|-------------|
| `station` | Station name (Korean) |
| `stationEn` | Station name (English) |
| `lastTrains[].direction` | Direction (Korean) |
| `lastTrains[].directionEn` | Direction (English) |
| `lastTrains[].time` | Last train time (HH:MM) |
| `lastTrains[].weekType` | Day type (Korean) |
| `lastTrains[].weekTypeEn` | Day type (English) |
| `lastTrains[].line` | Line name |
| `lastTrains[].lineEn` | Line name (English) |
| `lastTrains[].destination` | Final destination |
| `lastTrains[].destinationEn` | Destination (English) |

**Example**
```bash
# Auto-detect day type
curl "https://vercel-proxy-henna-eight.vercel.app/api/last-train/ํ™๋Œ€์ž…๊ตฌ"

# English station name
curl "https://vercel-proxy-henna-eight.vercel.app/api/last-train/Hongdae"

# Specific direction and day
curl "https://vercel-proxy-henna-eight.vercel.app/api/last-train/๊ฐ•๋‚จ?direction=up&weekType=1"
```

---

### 6. Exit Information

> **์ฐธ๊ณ :** ์ด API๋Š” ์ฃผ์š” ์—ญ 77๊ฐœ์˜ ์ถœ๊ตฌ ์ •๋ณด๋ฅผ ์ •์  ๋ฐ์ดํ„ฐ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
>
> **์ง€์› ์—ญ (77๊ฐœ):**
> ๊ฐ€์‚ฐ๋””์ง€ํ„ธ๋‹จ์ง€, ๊ฐ•๋‚จ, ๊ฐ•๋‚จ๊ตฌ์ฒญ, ๊ฐ•๋ณ€, ๊ฑด๋Œ€์ž…๊ตฌ, ๊ฒฝ๋ณต๊ถ, ๊ณ ์†ํ„ฐ๋ฏธ๋„, ๊ณต๋•, ๊ด‘๋‚˜๋ฃจ, ๊ด‘ํ™”๋ฌธ, ๊ต๋Œ€, ๊ตฌ๋กœ, ๊ตฐ์ž, ๊น€ํฌ๊ณตํ•ญ, ๋…ธ๋Ÿ‰์ง„, ๋‹น์‚ฐ, ๋Œ€๋ฆผ, ๋™๋Œ€๋ฌธ, ๋™๋Œ€๋ฌธ์—ญ์‚ฌ๋ฌธํ™”๊ณต์›, ๋””์ง€ํ„ธ๋ฏธ๋””์–ด์‹œํ‹ฐ, ๋š์„ฌ, ๋งˆํฌ๊ตฌ์ฒญ, ๋ช…๋™, ๋ชจ๋ž€, ๋ชฝ์ดŒํ† ์„ฑ, ๋ณต์ •, ๋ถˆ๊ด‘, ์‚ฌ๊ฐ€์ •, ์‚ฌ๋‹น, ์‚ผ๊ฐ์ง€, ์‚ผ์„ฑ, ์ƒ๋ด‰, ์„œ์šธ๋Œ€์ž…๊ตฌ, ์„œ์šธ์—ญ, ์„ ๋ฆ‰, ์„ฑ์ˆ˜, ์ˆ˜์œ , ์‹œ์ฒญ, ์‹ ๋…ผํ˜„, ์‹ ๋‹น, ์‹ ๋„๋ฆผ, ์‹ ์‚ฌ, ์‹ ์ดŒ, ์•ˆ๊ตญ, ์••๊ตฌ์ •, ์•ฝ์ˆ˜, ์–‘์žฌ, ์—ฌ์˜๋„, ์—ญ์‚ผ, ์—ฐ์‹ ๋‚ด, ์˜๋“ฑํฌ, ์˜ฅ์ˆ˜, ์˜ฌ๋ฆผํ”ฝ๊ณต์›, ์™•์‹ญ๋ฆฌ, ์šฉ์‚ฐ, ์„์ง€๋กœ3๊ฐ€, ์„์ง€๋กœ4๊ฐ€, ์„์ง€๋กœ์ž…๊ตฌ, ์‘์•”, ์ด๋Œ€, ์ด์ดŒ, ์ดํƒœ์›, ์ธ์ฒœ๊ณตํ•ญ1ํ„ฐ๋ฏธ๋„, ์ธ์ฒœ๊ณตํ•ญ2ํ„ฐ๋ฏธ๋„, ์ž ์‹ค, ์ •์ž, ์ข…๊ฐ, ์ข…๋กœ3๊ฐ€, ์ข…ํ•ฉ์šด๋™์žฅ, ์ฒœํ˜ธ, ์ฒญ๋‹ด, ์ถฉ๋ฌด๋กœ, ํŒ๊ต, ํ•ฉ์ •, ํ˜œํ™”, ํ™๋Œ€์ž…๊ตฌ, ํšจ์ฐฝ๊ณต์›์•ž

**Endpoint**
```
GET /api/exits/{station}
```

**Parameters**

| Parameter | Require

... (truncated)
communication

Comments

Sign in to leave a comment

Loading comments...