Confirmar una reserva en nombre del cliente
Dispara la acción `confirm_booking` del actor cliente desde la superficie del NEGOCIO (auditada como business_on_behalf). Dos usos: (1) LIVE — el personal confirma una franja para un cliente que reservó por teléfono; (2) SANDBOX — la superficie de magic-token del cliente es solo live (el enlace de un trabajo de sandbox nunca puede llegar a un cliente real), así que esta es la ÚNICA forma de hacer avanzar un trabajo de prueba de sandbox más allá de la reserva (book → quote → confirm → assign → complete). El cuerpo lleva el scheduled_at elegido por el cliente (datetime naive en hora local del negocio). TABLA DE DECISIÓN — cada 409 que devuelve este endpoint y el PRÓXIMO PASO correcto (ramifique según error_code, nunca según el estado HTTP): • JOB_REQUEST_STAGE_CONFLICT — el trabajo cambió desde que lo leyó (NOTA: cada intento FALLIDO de confirmación también incrementa status_version por diseño). Siguiente: vuelva a hacer GET del trabajo, reintente con el status_version actualizado. • JOB_REQUEST_ACTION_NOT_PENDING — el trabajo ya no está en el paso de confirmación (normalmente: ya confirmado). Siguiente: vuelva a hacer GET y muestre el estado actual; no reintente. • JOB_REQUEST_NO_TECHNICIAN_AVAILABLE — la HORA es inviable para todos (fuera del horario de trabajo / de la ventana del cliente, o nadie cualifica). Siguiente: elija otra hora mediante booking-windows / time-segments. NO es un caso de emergencia — el desplazamiento no puede crear capacidad. • JOB_REQUEST_TECH_INFEASIBLE — el técnico FORZADO nunca puede asumir el trabajo entonces; `data.reason` dice por qué: cannot_arrive_in_time (desplazamiento/inicio de turno — `data.earliest_feasible_at` (RFC3339 UTC) es la primera hora del mismo día en que PUEDE estar in situ → ofrézcala) | missing_required_skills | not_available_today | not_lead_tier. Siguiente: mantenga al técnico y reprograme a earliest_feasible_at+, O mantenga la hora y quite technician_id (selección automática) / elija otro técnico desde time-segments. NO es un caso de emergencia. • JOB_REQUEST_P0_REQUIRES_DISPLACEMENT — el ÚNICO código que enruta al flujo de EMERGENCIA: el trabajo es P0, el técnico cualifica, pero el carril está genuinamente ocupado. Siguiente: POST emergency/candidates → preview → commit (el commit auto-confirma). Advertencia: si los trabajos que ocupan son a su vez P0, la vista previa rechazará con EMERGENCY_RESCHEDULE_SLOT_OCCUPIED (P0 nunca desplaza a P0) — entonces elija otro técnico/hora.
Argumentos
curl -X POST "https://api.crisphive.com/v1/job-requests/9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01/confirm" \ -H "Authorization: Bearer chsk_test_4eC8xQ9mZ2pL7Ka0rT" \ -H "Content-Type: application/json" \ -d '{ "after_hours_override": true, "arrival_window_minutes": 1, "scheduled_at": "2030-06-14T09:00:00", "status_version": 2, "technician_id": "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01" }'