아래 세 문서로 나뉩니다. 먼저 시나리오로 전체 흐름을 잡고, API 문서에서 채널·페이로드를 확인하세요.
주문은 오토메타 커머스 앱 → 오토메타 커머스 백엔드 → 비스캣 관제 경로로 진입하고, 관제가 미션을 생성해 대기 큐에 적재합니다. 로봇 서비스는 mode → goal → mission 3계층으로 정의하며, 한 mission(고객 오더 단위)은 여러 goal에 걸칠 수 있습니다(픽업 goal + 하차 goal). 관제가 수행 가능한 후보 로봇에게 MQTT로 미션을 제시(입찰 요청)하면 로봇들이 goal별 예상 도착시간을 입찰하고, 관제가 최소 도착시간 기준으로 배차를 결정해 통보합니다. 단지 인프라(엘리베이터·로비폰) 제어는 관제가 처리하므로, 로봇은 단지 인프라를 직접 호출하지 않습니다.
offer → bid → result). 후보 로봇에게 goal 배열을 제시 → 각 로봇이 goal별 예상 도착시간 입찰 → 관제가 최소 도착시간(추후 적재공간 포함)으로 배차 결정. mission.atomic으로 한 미션 goal들의 순서 보존 여부를 지정(재정렬 시에도 묶음 유지, 다른 미션 goal이 사이에 끼지 못함).quote/offer로 후보 로봇에 사전 견적을 질의하면 로봇이 quote/bid로 수행 가능 여부·ETA를 회신합니다. 미션을 만들지 않고 낙찰이 없는 2단계(질의 → 견적)이며, 배차 입찰과는 토픽을 분리(quote/*)해 운영합니다. 응답(bid) 스키마는 배차 입찰과 동일하고, 질의(offer) 본문만 축약형입니다.status는 같은 어휘를 씁니다 — standby · doing · done(취소 canceled).X-Robot-Signature) 부착.s2r/r2s)의 MQTT 단일 채널로 주고받습니다(상태·알람·미션·입찰·PIN·박스).| 구분 | 책임 | 채널 |
|---|---|---|
| 인증 | 비밀키·인증서 발급 수신(REST), 인증서로 MQTT 연결 | REST |
| 맵 등록 | UI 버튼으로 지도·노드를 siteId·제시 mapId 기준 업로드(등록 개시 → 업로드 URL에 PUT → commit) | REST |
| 미션 입찰 | 입찰 요청(offer) 수신 → goal별 예상 도착시간 자체 계산해 입찰(bid) 회신 → 배차 결과(result) 수신 | MQTT |
| 배송 가능여부 견적 | 견적 질의(quote/offer — quoteId·deliveryType·목적지 요약의 축약 본문) 수신 → goal별 수행 가능 여부·도착 예상 시각(available·estArrival) 회신(quote/bid). 응답 형식은 배차 입찰과 동일, 입찰과 달리 미션 미생성·낙찰 없음 | MQTT |
| goal 수행 | 낙찰 goal을 arrivalOrder 순으로 수행, 진행 상태(standby/doing/done·progress·estArrival) 발행. 관제가 발급한 goal·mission id 를 그대로 echo | MQTT |
| 상태·알람 | 상태/배터리/위치 발행(retain, 변동 필드만). 보행자 안전 이벤트·소프트웨어 인벤토리 발행. 이상 시 알람(code·level·msg) 발행 | MQTT |
| 인프라 요청 | 엘베·로비폰이 필요한 시점에 r2s/{robot_id}/resource로 관제에 요청 → resource/ready 수신 후 진행. 탑승·하차 완료 보고 필수(누락 시 엘베 콜 취소), 탑승 불가 시 로봇이 status: "cancelByRobot"으로 자진 취소도 가능 | MQTT |
| PIN 검증 | goal.mission[].PIN으로 로컬 검증 후 지정 도어 개방, 사용·검증 결과를 관제에 감사 이벤트로 보고 | MQTT |
| 적재함 | 관제가 goal.mission[].door(door1~doorN)로 지정한 칸을 열고/잠금 (칸 선택은 관제가 결정, 점주 임의 선택 불가). 칸 수 N은 로봇별 설정 | MQTT |
| 상차·하차 완료 보고 | 박스를 닫으면 해당 pickup/dropoff mission 을 done으로 발행 → 상차 done이 배달 출발 트리거, 하차 done이 수령 완료 | MQTT |
| 취소 사유 발행 | 수행 불가 시 goal·mission 을 canceled + reason으로 발행 (사유 없는 취소는 관제에 기록되지 않음) | MQTT |
s2r/r2s) 토픽의 브로커 정책(ACL) 매핑 확정.quote/*) 라운드도 동일 타임아웃 모델을 따르며, 무응답은 available=false로 간주합니다.goal.type: waiting/none 의미, arrivalOrder 동률·미지정 처리, 한 미션 goal 다수(예: 5개 이상) 시 배차 정책.idx 안정성 — 재등록 시 노드 idx가 유지되는지(관제 목적지 키의 원천). 밀리면 기존 주소 매핑이 다른 세대를 가리킵니다.state.status의 unused·빈 문자열 정리, r2s/resource의 orderId에 주문번호 사용(현재 로봇 내부 스텝 id 관측), 로봇 시계 NTP 동기(estArrival 절대 시각 정확도).