ApiBorne
Sommaire du guide

issueForAppointment

La secrétaire pointe une arrivée dans votre agenda, sans passage borne : demandez le numéro à ApiBorne pour que la séquence reste partagée avec les check-ins borne — et que le ticket apparaisse au Cockpit.

POST/api/kioskTicket/issueForAppointment
Auth : Authorization = clé d'autorisation compte (brute)

Pourquoi ce service existe

Dans un établissement équipé, un patient peut être accueilli de deux façons : à la borne (qui réserve son ticket auprès d'ApiBorne au check-in) ou au guichet, quand la secrétaire pointe l'arrivée directement dans votre agenda. Si votre système numérotait seul ces arrivées guichet, il y aurait deux séquences divergentes : doublons de numéros, ordre d'appel faux sur les écrans, Cockpit incohérent.

Ce service vous donne un numéro pris dans la même séquence que les bornes — préfixe du type d'examen et décalage du lieu inclus — et rend le ticket immédiatement visible au Cockpit, comme un check-in borne.

Séquence : la secrétaire pointe une arrivée, le système de gestion demande le numéro à ApiBorne, l'adopte comme ticket d'appel, avec repli local en cas d'échec.Secrétaireguichet / agendaVotre systèmeServeur ApiBorneséquence par lieupointe l'arrivée du patientRDV « créé » → « arrivé », sans passage borneissueForAppointmentlicenceUuid + officePlaceId + requestUid (nouveau){ "number": 12, "formattedNumber": "SC-12" }préfixe + décalage du lieu appliquésadopte SC-12 comme ticket d'appel du RDVticket SC-12 affiché dans l'agendaticket confirmé → visible au CockpitApiBorne injoignable ? Numérotation LOCALE en replipointer une arrivée ne doit JAMAIS échouer
Pourquoi ce service : sans lui, les arrivées pointées au guichet et les check-ins borne auraient deux numérotations divergentes.

Authentification : AUTH_KEY et licenceUuid

AUTH_KEY est la « Clé d'autorisation compte » : le secret partagé de l'intégration, affiché dans l'admin ApiBorne → page Connectivité (champ copiable) et remis à votre système à l'installation. C'est la même clé que celle que vous validez en X-Kiosk-Auth-Key sur les appels entrants — ici elle s'envoie dans le header Authorization, brute (sans préfixe Bearer).

Le licenceUuid vient de la même page Connectivité : c'est l'identifiant (pas un secret) qui désigne la licence cible dans le corps de chaque appel.

Provisioning : l'admin ApiBorne (page Connectivité) fournit la clé d'autorisation compte et l'UUID de licence, stockés dans la configuration de l'éditeur.Admin ApiBornepage Connectivité« Clé d'autorisation compte » 🔑« UUID de la licence »copiées UNE FOIS, à l'installationConfiguration de votre systèmeclé → header Authorization (brute)et validation de X-Kiosk-Auth-Keyuuid → corps des appels sortantsLa clé est un SECRET (authentifie) · l'UUID est un identifiant (désigne la licence)
Deux valeurs copiées une fois, à l'installation — la clé authentifie tous les flux, l'UUID désigne la licence dans les appels sortants.

Requête et réponse

bash
# AUTH_KEY = la clé d'autorisation compte (la même que X-Kiosk-Auth-Key), envoyée BRUTE
curl -sS "$APIBORNE/api/kioskTicket/issueForAppointment" \
  -H "Authorization: $AUTH_KEY" -H 'Content-Type: application/json' -d '{
  "licenceUuid": "ecdb8b76-…",
  "officePlaceId": 1,
  "requestUid": "ris:1001:6f2c…",
  "prefix": "SC",
  "examTypeId": 2,
  "examTypeLabel": "SCANNER",
  "contractAppointmentId": "1001~8f3a…",
  "patientDisplayName": "Marie DURAND",
  "examLabel": "SCANNER THORACIQUE"
}'
# → 200 { "number": 12, "formattedNumber": "SC-12", "day": "2026-07-21" }
  • officePlaceId : le lieu du RDV (référentiel partagé /config/office-places) — il détermine la séquence et le décalage ;
  • prefix : optionnel — sans lui, ApiBorne calcule le préfixe depuis sa configuration (préfixes par type d'examen) à partir d'examTypeId / examTypeLabel ;
  • patientDisplayName / examLabel : affichés au Cockpit sur la ligne du ticket.

Ce que vous récupérez et devez en faire

  1. Adoptez le numéro : number / formattedNumber deviennent le ticket d'appel du RDV chez vous — stockez-les sur le RDV et affichez-les dans votre agenda (c'est ce numéro que les écrans d'appel montreront) ;
  2. Renvoyez-le ensuite sur le contrat : ce ticket est celui que vous exposez dans ticketNumber/ticketNumberFormatted du RDV — la borne dira « enregistrement déjà effectué, ticket N°SC-12 » si le patient repasse ;
  3. En cas d'échec (réseau, serveur indisponible) : basculez sur votre numérotation locale — pointer une arrivée ne doit jamais échouer à cause d'ApiBorne.

requestUid : unique par génération

L'idempotence par requestUid protège un rejeu réseau du même appel — pas plus. Annuler l'arrivée puis re-pointer doit consommer un nouveau uid, donc un nouveau numéro.

Implémentation de référence

typescript
// src/server/apiborne/client.ts (démo) — extrait
const data = await post("/api/kioskTicket/issueForAppointment", {
  ...payload,                                   // licenceUuid
  officePlaceId: Number(getSetting("officeId") ?? 0),
  requestUid: `demo-ris:${contractAppointmentId}:${crypto.randomUUID()}`,
  prefix: ticketPrefix,
  contractAppointmentId,
  patientDisplayName,
  examLabel: appointment.exam_label,
});
if (!data?.number || !data.formattedNumber) {
  return null;                                  // ← repli : numérotation LOCALE, jamais bloquer
}

Voir le fichier complet sur GitHub → (déclenché dans actions.ts au pointage d'une arrivée).