Xử lý sự cố khi hỗ trợ đối tác Pilot. Mỗi tình huống: Dấu hiệu · Nguyên nhân thường gặp · Cách kiểm tra · Khi nào mở Hotfix Sprint.
Nguyên tắc: chỉ mở Hotfix cho blocker (chặn luồng Availability→Booking→Confirm→Cancel và không có workaround). Còn lại → Issue Log Backlog.
Tham chiếu: Error Catalog · Integration Guide.
Luôn xin đối tác: endpoint · payload (ẩn PII) · x-request-id · HTTP status · error.code. KHÔNG nhận API key. Rẽ nhánh theo error.code, không theo message.
UNAUTHENTICATED){"ok":false,"error":{"code":"UNAUTHENTICATED"}}, HTTP 401.x-bng-api-key; key bị revoke/hết hạn; Partner bị suspend/revoke (cổng Partner ở auth).npm run ops -- show-provisioning --customer <partnerId> --json → xem status key (active?) + lastUsedAt.show-audit --partner <partnerId> (có partner.suspended/partner.revoked?).x-bng-api-key).Hai loại — phân biệt theo body:
error.code.curl -s -o /dev/null -w "%{http_code}" <BASE>/api/booking/availability?... từ IP đối tác → 403 HTML. /health vẫn 200.TENANT_INACTIVE hoặc TENANT_CONTEXT_MISMATCHerror.code = TENANT_INACTIVE (tenant suspended/archived/provisioned) hoặc TENANT_CONTEXT_MISMATCH (client gửi tenantId sai).tenant-health --tenant <tenantId> → status. Nếu suspended/archived/provisioned ⇒ đúng thiết kế.TENANT_INACTIVE = trạng thái vận hành (reactivate nếu cần); TENANT_CONTEXT_MISMATCH = đối tác bỏ tenantId khỏi request.error.code = LISTING_UNIT_NOT_FOUND / RESERVATION_NOT_FOUND / PRICING_NOT_FOUND / NOT_FOUND.unitId/reservationId sai hoặc thuộc tenant khác (cross-tenant cố ý trả 404); chưa seed inventory/giá; sai route.tenant-health --tenant <tenantId> (units > 0?); đối chiếu unitId với danh sách đã giao; kiểm route theo openapi.yaml.PRICING_NOT_FOUND ở unit lẽ ra có giá ⇒ kiểm seed; vẫn không phải code fix.error.code = AVAILABILITY_NOT_AVAILABLE / RESERVATION_INVALID_STATUS_TRANSITION / RESERVATION_CAPACITY_EXCEEDED / LISTING_UNIT_INACTIVE / IDEMPOTENCY_KEY_CONFLICT / IDEMPOTENCY_IN_PROGRESS.show-audit --tenant / list reservations); logic idempotency của đối tác.IDEMPOTENCY_IN_PROGRESS → đối tác backoff rồi thử lại.INTERNAL, HTTP 500){"ok":false,"error":{"code":"INTERNAL","message":"Lỗi máy chủ nội bộ"}}, HTTP 500.grep '"status":5' <api log>), npm run ops -- health, kiểm DB kết nối. Lấy x-request-id để truy vết./health phản hồi? ops health? Độ trễ DB? Đối tác đã đặt timeout hợp lý + kèm Idempotency-Key khi tạo đơn (để retry không tạo trùng)?429 + Retry-After.| Tình huống | Hotfix Sprint? |
|---|---|
| 401/403/404/409 (đúng thiết kế / cấu hình / dữ liệu) | ❌ Không |
| 403a nginx (allowlist) | ❌ Không (ops allowlist) |
| Timeout do mạng/đối tác | ❌ Không |
| Rate limit | ❌ Không (chưa bật) |
| 5xx tái hiện chặn luồng lõi | ✅ Có — chỉ sửa blocker |
| Lỗi hệ thống khác chặn Pilot, không workaround | ✅ Có — chỉ sửa blocker, ghi Decision Log |
Mọi trường hợp mở Hotfix: ghi Issue Log (severity=Blocker) + Decision Log, và không mở rộng phạm vi ngoài blocker.