원격 창문 제어 API 개발자 가이드
서비스 개요
원격 창문 제어는 사용자가 모바일 애플리케이션을 통해 차량의 창문을 원격으로 닫거나, 특정한 경우 열 수 있는 텔레매틱스 서비스입니다.
서비스 특징
- 원격 창문 닫기 기능 중심
- 제한적인 창문 열기 기능 제공 (환기 모드)
- 끼임 방지(Anti-pinch) 안전 기능
- 실시간 안전 모니터링
- 지역별 규제 및 OEM 정책 준수
법적 요구사항
- 차량 창문 제어 관련 안전 규정 준수
- 끼임 방지(Anti-pinch) 안전 기능 적용 의무화
- 개인정보 보호법 준수
- 지역별 규제 차이 반영
주요 시나리오
시나리오 1: 원격 창문 잠금 요청 및 실행
엔티티별 API 흐름:
📱 앱 (사용자):
- 창문 잠금: 원격 창문 잠금 제어 요청
- 응답 수신: 202 Accepted 응답 수신
- 푸시 알림: 창문 잠금 결과 푸시 알림 수신
- UI 업데이트: 화면에 제어 결과 표시
🚗 차량 (TCU):
- 명령 수신: ECARUS로부터 창문 잠금 명령 수신
- 안전 검증: 시동 상태, 하드웨어 오버라이드 감지 확인
- BCM 제어: BCM으로 창문 잠금 신호 전송
- 결과 게시: 성공/실패 결과를 ECARUS로 게시
🏢 콜센터:
- 대리 잠금: 고객을 대신하여 창문 잠금
- 상태 확인: 창문 잠금 상태 확인
- 결과 수신: 창문 잠금 결과 수신
시나리오 2: 창문 잠금 해제 및 상태 모니터링
엔티티별 API 흐름:
📱 앱 (사용자):
- 창문 잠금 해제: 원격 창문 잠금 해제 제어 요청
- 응답 수신: 202 Accepted 응답 수신
- 푸시 알림: 창문 잠금 해제 결과 푸시 알림 수신
- 상태 조회: 창문 잠금 상태 확인
🚗 차량 (TCU):
- 명령 수신: 창문 잠금 해제 명령 수신
- BCM 제어: BCM으로 창문 잠금 해제 신호 전송
- 상태 전송: 잠금 해제 상태 서버 전송
- 이벤트 게시: 상태 변경 이벤트 게시
🏢 콜센터:
- 대리 해제: 고객을 대신하여 창문 잠금 해제
- 상태 모니터링: 실시간 창문 잠금 상태 확인
- 이력 조회: 창문 제어 이력 조회
시나리오 3: 창문 설정 관리 및 진단
엔티티별 API 흐름:
📱 앱 (사용자):
- 설정 조회: 창문 설정 조회
- 설정 업데이트: 창문 설정 업데이트
- 사양 조회: 창문 사양 정보 조회
- 진단 조회: 창문 시스템 진단 조회
🚗 차량 (TCU):
- 설정 적용: 창문 설정값 자동 적용
- 사양 보고: 창문 사양 정보를 서버로 보고
- 진단 실행: 창문 관련 부품 상태 진단
- 상태 보고: 현재 창문 상태 보고
🏢 콜센터:
- 설정 관리: 고객 설정값 관리 및 창문 설정 업데이트
- 사양 관리: 창문 사양 정보 자동 관리
- 진단 관리: 시스템 진단 자동 관리
- 이력 관리: 제어 이력 자동 관리
시나리오 4: 창문 제어 실패 및 예외 처리
엔티티별 API 흐름:
📱 앱 (사용자):
- 명령 요청: 창문 잠금/해제 명령 요청
- 실패 알림: 푸시 알림을 통해 실패 원인 수신
- 상태 확인: 현재 창문 상태 확인
- 명령 취소: 실행 중인 명령 취소
🚗 차량 (TCU):
- 안전 검증: 시동 상태, 하드웨어 오버라이드 감지 확인
- 실패 처리: 안전 조건 위반 시 실패 처리
- 결과 게시: 실패 결과 및 에러 코드 게시
- 상태 보고: 현재 창문 상태 보고
🏢 콜센터:
주요 기능
📱 앱 구현 기능
1. 원격 창문 제어 기능
- 창문 잠금: 원격 창문 잠금 제어 요청
- 창문 잠금 해제: 원격 창문 잠금 해제 제어 요청
- 명령 취소: 실행 중인 명령 취소 요청
- 상태 조회: 즉시 창문 잠금 상태 조회
2. 설정 관리 기능
- 설정 조회: 창문 설정 조회
- 설정 업데이트: 창문 설정 업데이트
- 사양 조회: 창문 사양 정보 조회
3. 실시간 상태 모니터링 기능
- 실시간 업데이트: SSE 스트림을 통한 실시간 상태 모니터링
- 이벤트 처리: 창문 상태 변경 이벤트 실시간 처리
- 상태 표시: 창문 잠금/해제 상태 실시간 표시
4. 알림 및 UI 기능
- 푸시 알림: 창문 제어 결과 푸시 알림 수신
- 에러 안내: 실패 시 사용자 친화적 에러 메시지 제공
- 상태 시각화: 창문 상태의 시각적 표현 제공
🏢 콜센터 구현 기능
1. 대리 창문 제어 기능
- 대리 잠금: 고객을 대신하여 창문 잠금
- 대리 해제: 고객을 대신하여 창문 잠금 해제
- 명령 취소: 명령 취소 처리
- 상태 확인: 창문 잠금 상태 확인
2. 이력 및 진단 관리 기능
- 이력 조회: 창문 제어 이력 조회
- 진단 조회: 창문 시스템 진단 조회
- 사양 조회: 창문 사양 정보 조회
- 통계 생성: 창문 제어 이용 통계 생성
3. 설정 관리 기능
- 설정 조회: 고객 창문 설정 확인
- 설정 업데이트: 고객 설정 변경 지원
- 설정 동기화: 차량과의 자동 설정 동기화
4. 고객 지원 기능
- 문제 해결: 창문 제어 실패 원인 분석
- 설정 지원: 고객 창문 설정 지원
- 보안 모니터링: 이상 접근 패턴 모니터링
🚗 차량(TCU) 처리 기능
1. 창문 제어 기능
- 명령 수신: 창문 제어 명령 수신
- 안전 검증: 시동 상태, 하드웨어 오버라이드 감지 확인
- BCM 제어: BCM으로 창문 잠금/해제 신호 전송
- 결과 게시: 제어 결과 게시
2. 상태 관리 기능
- 상태 수집: 창문 상태 데이터 실시간 수집
- 이벤트 게시: 상태 변경 이벤트 게시
- 상태 보고: 현재 창문 상태 보고
3. 안전 기능
- 하드웨어 오버라이드 감지: 물리 스위치 우선순위 감지
- 끼임 방지: 끼임 발생 시 자동 정지 수행
- 시동 상태 확인: 시동/ACC 상태 확인
시퀀스 다이어그램
원격 창문 제어 시스템 흐름

API 엔드포인트
헤더, 응답 코드 및 에러 형식은 공통 API 사양을 참조하십시오.
창문 잠금 요청
curl -X POST "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/lock" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{"action": "LOCK", "target": "REAR_WINDOWS"}'창문 잠금 해제 요청
curl -X POST "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/unlock" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{"action": "UNLOCK", "target": "REAR_WINDOWS"}'창문 잠금 상태 조회
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/lock-status" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"창문 제어 취소 요청
curl -X POST "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/cancel" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{"correlationId": "uuid-12345678", "reason": "사용자 취소", "force": false}'창문 제어 이력 조회
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/history?period=24h&limit=50" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"창문 사양 정보 조회
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/spec" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"창문 제어 설정 조회
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/config" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"창문 제어 설정 업데이트
curl -X PUT "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/config" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{"window": {"remoteControlEnabled": true, "childLockDefault": true, "autoLockEnabled": false, "individualControl": false}, "safety": {"hardwareOverrideDetection": true, "mainSwitchPriority": true, "interferenceTimeout": 3.0}}'창문 진단 정보 조회
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/diagnostics" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"창문 제어 정보 실시간 업데이트 수신 (SSE)
참고: 브라우저를 통해 접속하거나 전용 SSE 클라이언트 사용을 권장합니다.
curl -X GET "https://api.ecarus.run/api/v1/remotecontrol/vehicles/KMHSH81C7LU123456/window/updates/stream" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Accept: text/event-stream"데이터 모델
창문 제어 요청 (Control Request)
{
"action": "LOCK",
"target": "REAR_WINDOWS"
}action: OPEN, CLOSE, LOCK, UNLOCK, STOP
target: FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, FRONT_WINDOWS, REAR_WINDOWS, ALL_WINDOWS
창문 제어 응답 (Control Response)
{
"commandId": "cmd-uuid-12345",
"vin": "KMHSH81C7LU123456",
"status": "PENDING",
"message": "창문 제어 명령이 수신되었습니다.",
"estimatedDuration": 8,
"timestamp": "2026-01-12T14:30:00Z"
}status: PENDING, PROCESSING, SUCCESS, FAILED, CANCELLED
창문 잠금 상태 응답 (Status Response)
{
"vin": "KMHSH81C7LU123456",
"windows": {
"frontLeft": {"isLocked": true, "position": 0},
"frontRight": {"isLocked": true, "position": 0},
"rearLeft": {"isLocked": false, "position": 25},
"rearRight": {"isLocked": false, "position": 50}
},
"childSafetyLock": {
"isEngaged": true,
"controlledWindows": ["REAR_LEFT", "REAR_RIGHT"]
},
"timestamp": "2026-01-12T14:30:00Z"
}position: 0-100% (0=완전 닫힘, 100=완전 열림)
창문 취소 요청 (Cancellation Request)
{
"correlationId": "uuid-12345678",
"reason": "사용자 취소",
"force": false
}reason: User cancellation, Safety stop, System error, Emergency stop
force: 강제 취소 여부 (true인 경우 즉시 정지)
창문 제어 이력 요청 (History Request)
vin: KMHSH81C7LU123456
period: 24h
limit: 50
offset: 0period: 1h, 24h, 7d, 30d
창문 제어 이력 응답
{
"vin": "KMHSH81C7LU123456",
"history": [
{
"commandId": "cmd-uuid-12345",
"action": "LOCK",
"target": "REAR_WINDOWS",
"timestamp": "2026-01-12T14:30:00Z",
"status": "SUCCESS",
"executionTime": 8,
"userId": "user-123",
"source": "APP"
}
],
"total": 1,
"hasMore": false
}source: APP, CALL_CENTER, SYSTEM
status: PENDING, PROCESSING, SUCCESS, FAILED, CANCELLED
창문 사양 정보 응답 (Specification Response)
{
"vin": "KMHSH81C7LU123456",
"windowTypes": ["POWER_WINDOWS", "SUNROOF"],
"maxWindows": 4,
"hasAutoLock": true,
"hasChildSafetyLock": true,
"supportedActions": ["OPEN", "CLOSE", "LOCK", "UNLOCK", "STOP"],
"safetyFeatures": ["ANTI_PINCH", "CHILD_SAFETY_LOCK", "OBSTACLE_DETECTION"]
}windowTypes: MANUAL, POWER_WINDOWS, ELECTRIC
supportedActions: 지원 가능한 동작 목록
창문 제어 설정 응답 (Settings Response)
{
"vin": "KMHSH81C7LU123456",
"window": {
"remoteControlEnabled": true,
"childLockDefault": true,
"autoLockEnabled": false,
"individualControl": false,
"maxOpenPosition": 100,
"speedControl": "NORMAL"
},
"safety": {
"hardwareOverrideDetection": true,
"mainSwitchPriority": true,
"interferenceTimeout": 3.0,
"pinchSensitivity": "HIGH"
},
"updatedTime": "2026-01-12T10:00:00Z"
}speedControl: SLOW, NORMAL, FAST
pinchSensitivity: LOW, MEDIUM, HIGH
maxOpenPosition: 최대 열림 위치 (0-100%)
창문 진단 정보 응답 (Diagnostics Response)
{
"vin": "KMHSH81C7LU123456",
"systemStatus": "NORMAL",
"components": [
{
"name": "Window Motor Front Left",
"status": "ACTIVE",
"health": 98,
"lastMaintenance": "2025-06-15T00:00:00Z",
"operatingHours": 1250
},
{
"name": "Window Motor Front Right",
"status": "ACTIVE",
"health": 97,
"lastMaintenance": "2025-06-15T00:00:00Z",
"operatingHours": 1180
},
{
"name": "Anti-Pinch Sensor",
"status": "ACTIVE",
"health": 95,
"lastCalibration": "2025-12-01T00:00:00Z",
"sensitivityLevel": "HIGH"
}
],
"alerts": [],
"lastCheck": "2026-01-12T14:30:00Z"
}systemStatus: NORMAL, WARNING, ERROR, OFFLINE
component.status: ACTIVE, INACTIVE, ERROR, MAINTENANCE_REQUIRED
창문 상태 업데이트 (SSE)
{
"type": "WINDOW_STATUS_UPDATE",
"vin": "KMHSH81C7LU123456",
"timestamp": "2026-01-12T14:30:15Z",
"data": {
"windowId": "FRONT_LEFT",
"position": 25,
"isMoving": false,
"isLocked": false,
"changeType": "OPENED"
}
}type: WINDOW_STATUS_UPDATE, WINDOW_COMMAND_RESULT, WINDOW_SAFETY_ALERT
changeType: OPENED, CLOSED, LOCKED, UNLOCKED, STOPPED, OBSTRUCTION_DETECTED, SAFETY_STOP
보안 및 프라이버시
인증 및 권한 부여
- 사용자 인증 토큰 필요 (JWT/OAuth2)
- 차량 접근 권한 확인
- 창문 제어 기능 권한 확인
데이터 보안
- 모든 API 통신은 HTTPS/TLS 암호화
- 명령 위조 방지를 위한 Command Signing 적용
- 안전 관련 데이터의 최우선 처리
프라이버시 보호
- 차량 상태 정보 수집에 대한 명시적 동의
- 창문 제어 이력 수집 목적 명시
- 명령 실행 이력 보존 기간 정책 준수
접근 제어
- VIN 기반 차량 접근 권한 확인
- 다중 요소 인증(MFA) 요구
- Command Nonce 및 ID 사용
- 멱등성(Idempotency) 기반의 중복 명령 방지
예외 처리
네트워크 관련
- 연결 실패: 오프라인 모드 지원, 마지막 상태 캐싱
- 응답 지연: 로딩 인디케이터, 타임아웃 처리
- 서버 다운: 에러 메시지 표시, 재시도 제안
차량 상태 관련
- 차량 오프라인: 명령 전송 실패 알림, 큐 처리
- 안전 조건 미충족: 명령 거부 및 상세 사유 안내
- 규제 제약: 지역별 규제에 따른 기능 제한 알림
안전 관련
- 끼임 방지 작동: 즉시 정지 및 안전 알림 발송
- 과전류 감지: 즉시 정지 및 보호 알림 발송
- 센서 에러: 기능 제한 및 알림 발송
명령 실행 관련
- 일부 성공: 일부 창문만 제어된 경우 상세 안내
- 안전 정지: 안전 사유 명확히 표시
- 타임아웃: 명령 유효 시간(TTL) 만료 알림
테스트 설정
Base URL: https://api.ecarus.run/api/v1/remotecontrol
인증 토큰: sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d
샘플 VIN: KMHSH81C7LU123456
대화형 API 테스트를 위해 Swagger UI를 사용하십시오.
배포 고려사항
앱 스토어 등록
- 차량 제어 관련 권한 요청
- 생체 인증 권한 요청
- 근거리 통신(NFC/BLE 등) 권한 요청
법규 준수
- 개인정보 보호법 준수
- 차량 창문 제어 관련 규정 확인
- 지역별 규제 차이 반영
- 끼임 방지(Anti-pinch) 안전 기능 관련 법령 준수
차량 호환성
- 다양한 차종 지원
- OEM별 창문 제어 방식 차이 고려
- 지역별 규제 차이 반영
- 창문 구성 차이 (2도어/4도어 등) 반영