Confirmer une réservation au nom du client
Déclenche l'action `confirm_booking` de l'acteur client depuis la surface ENTREPRISE (auditée comme business_on_behalf). Deux usages : (1) LIVE — le personnel confirme un créneau pour un client ayant réservé par téléphone ; (2) SANDBOX — la surface à jeton magique du client est réservée au live (le lien d'une intervention sandbox ne peut jamais atteindre un vrai client), c'est donc la SEULE façon de faire progresser une intervention de test sandbox au-delà de la réservation (book → quote → confirm → assign → complete). Le corps porte le scheduled_at choisi par le client (date-heure locale de l'entreprise, naïve). TABLE DE DÉCISION — chaque 409 renvoyé par cet endpoint, et l'ÉTAPE SUIVANTE correcte (branchez sur error_code, jamais sur le statut HTTP) : • JOB_REQUEST_STAGE_CONFLICT — l'intervention a changé depuis votre lecture (NOTE : chaque tentative de confirmation ÉCHOUÉE incrémente aussi status_version, à dessein). Suite : re-GET l'intervention, réessayez avec le status_version à jour. • JOB_REQUEST_ACTION_NOT_PENDING — l'intervention n'est plus à l'étape de confirmation (généralement : déjà confirmée). Suite : re-GET et affichez le statut actuel ; ne réessayez pas. • JOB_REQUEST_NO_TECHNICIAN_AVAILABLE — l'HORAIRE est irréalisable pour tout le monde (hors heures de travail / hors fenêtre client, ou personne ne qualifie). Suite : choisissez une autre heure via booking-windows / time-segments. PAS un cas d'urgence — le déplacement ne peut pas créer de la capacité. • JOB_REQUEST_TECH_INFEASIBLE — le technicien IMPOSÉ ne peut jamais prendre l'intervention à ce moment ; `data.reason` explique pourquoi : cannot_arrive_in_time (trajet/début de service — `data.earliest_feasible_at` (RFC3339 UTC) est la première heure du jour même où il PEUT être sur site → proposez-la) | missing_required_skills | not_available_today | not_lead_tier. Suite : gardez le technicien et reprogrammez à earliest_feasible_at ou après, OU gardez l'heure et retirez technician_id (sélection auto) / choisissez un autre technicien depuis time-segments. PAS un cas d'urgence. • JOB_REQUEST_P0_REQUIRES_DISPLACEMENT — le SEUL code qui aiguille vers le flux d'URGENCE : l'intervention est P0, le technicien qualifie, mais la voie est réellement occupée. Suite : POST emergency/candidates → preview → commit (la validation confirme automatiquement). Réserve : si les interventions occupantes sont elles-mêmes P0, l'aperçu rejettera avec EMERGENCY_RESCHEDULE_SLOT_OCCUPIED (un P0 ne déplace jamais un P0) — choisissez alors un autre technicien/une autre heure.
Arguments
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" }'