오토메타 연동 개발 시나리오

오토메타 커머스 백엔드가 비스캣 코어와 연동해 주문 한 건을 처리하는 흐름입니다. 엔드포인트·페이로드 상세는 연동 API 문서를, 메인은 개발 가이드를 참조하세요.

1. 주문 진입 흐름

아이파크홈 앱은 비스캣 코어와 직접 통신하지 않습니다. 오토메타가 주문을 받아 비스캣 API를 호출하고, 비스캣이 발신하는 상태 통지를 받아 앱·월패드에 표출합니다.

flowchart LR APP["아이파크홈 앱"] AUTOMA["오토메타
커머스 백엔드"] CORE["비스캣 코어
(로봇 관제)"] APP --> AUTOMA AUTOMA -->|"#1~#6 인바운드 (X-Api-Key)"| CORE CORE -->|"#7~#10 콜백 (HMAC 서명)"| AUTOMA AUTOMA --> APP

2. 배송 가능 여부 조회 (결제 전)

사용자 결제 전, "지금 주문 시 ~분 후" 표시를 위해 POST /v1/automa/delivery/availability를 호출합니다. 비스캣은 배차 자원·거리 기준으로 가능 여부와 매장 도착 예상시간(분)을 반환합니다. 이 단계는 미션을 생성하지 않습니다.

3. 배차 요청·PIN 교환

결제 완료 후 POST /v1/automa/dispatch로 실제 배차합니다. 오토메타는 점주 PIN(고정 4자리)을 동봉하고, 비스캣은 미션을 생성·로봇을 점유한 뒤 사용자 PIN(랜덤 4자리)과 배차로봇ID를 응답합니다.

sequenceDiagram participant A as 오토메타 participant C as 비스캣 코어 A->>C: POST /v1/automa/dispatch (ownerPin 동봉, Idempotency-Key) alt 배차 가능 C-->>A: 202 { missionId, robotId, userPin(랜덤), shopEtaMinutes } else 로봇 없음 / 수량 초과 C-->>A: 503 NO_ROBOT_AVAILABLE / 422 DISPATCH_LOAD_EXCEEDED end Note over A: userPin·robotId 보관 → 이후 추적·취소에 사용

멱등성

배차 요청은 Idempotency-Key 헤더를 필수로 부착합니다. 동일 키로 24시간 내 재시도하면 첫 응답이 그대로 반환되고, 동일 키 + 다른 페이로드는 409 ORDER_DUPLICATE로 거절됩니다. 재시도 시 키를 동일하게 유지하세요.

4. 배송 진행·상태 통지·알림 노티

배차 이후 로봇 진행 상태는 비스캣이 오토메타 콜백 URL로 발신합니다(#7~#9). 별도로 알림 노티(#10)는 상태 식별자 코드만 전달하고, 사용자 표출 문구는 오토메타가 관리합니다.

sequenceDiagram participant C as 비스캣 코어 participant A as 오토메타 C->>A: #7 robot.shop_arrived (매장 도착, 점주PIN 포함) C->>A: #8 delivery.departed (박스 닫힘 = 출발) C->>A: #10 notify.event (code=NOTI_ETA_5MIN) C->>A: #9 delivery.status_changed (arrived) C->>A: #9 delivery.status_changed (unloaded, 하차 완료) Note over A: 각 콜백 수신 → 앱·월패드 표출

5. 위치·도착 예상시간 폴 보완

콜백(#10) 누락·화면 재진입·통신 실패 복구를 위해 오토메타가 폴링으로 보완할 수 있습니다.

6. 배차 취소

POST /v1/automa/dispatch/{robotId}/cancel로 배차를 취소합니다. 단 출발 후에는 취소할 수 없습니다(5/22 룰) — 409 DISPATCH_NOT_CANCELABLE.

7. 콜백 재시도·멱등 처리

비스캣 콜백(#7~#10)은 2xx 응답을 받지 못하면 지수 백오프로 최대 24회/24시간 재시도합니다. 각 시도는 동일 X-Biscat-Delivery ID를 가지므로, 오토메타는 이 ID로 멱등 처리해 중복 표출을 방지해야 합니다.

콜백 수신 시 확인할 헤더

시나리오·페이로드가 협의로 바뀌면 본 문서와 연동 API 문서를 함께 갱신하세요.