사용자 결제 전, "지금 주문 시 ~분 후" 표시를 위해 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: 각 콜백 수신 → 앱·월패드 표출
#7 매장 도착: 로봇이 매장에 도착. 점주가 박스를 열 점주 PIN을 함께 전달.
#8 배달 출발: 점주 상차 후 박스 닫힘이 출발 트리거. (구 "로봇 상차 완료" API는 삭제되어 이 이벤트로 통일.)
#9 예정/도착/하차:phase로 예정·도착·하차 완료를 구분.
#10 알림 노티: 도착 5분 전 등 알림 이벤트. 비스캣은 코드만 보내고 문구는 오토메타가 관리.
5. 위치·도착 예상시간 폴 보완
콜백(#10) 누락·화면 재진입·통신 실패 복구를 위해 오토메타가 폴링으로 보완할 수 있습니다.
#5 위치 실시간 조회:GET /v1/automa/dispatch/{robotId}/tracking — 위치·진행 단계(phase)·ETA(분).