MeetingHub MeetingHub Télécharger la collection Postman

Référence — listes d'inscrits

Le dépôt des membres d’une classe, champ par champ.

Déposer les membres d'une classe. La route s'appelle avec une clé d'intégration : voir Conventions.

PUT /api/institutions/:institutionId/classes/by-ref/:ref/roster

Rattache une liste de personnes à une classe, en créant les comptes qui manquent. Exige roster.write — la portée roster:write.

Paramètre de cheminTypeDescription
institutionIduuidL'établissement de la clé, rendu par GET /api/me
refstringVotre ref de la classe, encodée pour une URL. La classe doit exister : créée par un dépôt d'emploi du temps avec ce group.ref, ou dans MeetingHub avec cette référence
Paramètre de requêteTypeDéfautDescription
dryRunstringabsentAbsent : ESSAI À BLANC, rien n'est écrit. false ou 0 : la liste est appliquée. Toute autre valeur : essai à blanc

L'essai à blanc est le comportement par défaut, à l'inverse du dépôt d'emploi du temps : appliquer une liste crée des comptes.

Corps de la requête

{
  "members": [
    { "email": "awa@ecole.fr", "displayName": "Awa Diallo" },
    { "phone": "6 99 12 34 56", "displayName": "Ben Traoré" }
  ]

}
ChampTypeObligatoireRègles
membersobject[]ouiDe 1 à 5 000 entrées

Chaque entrée de members :

ChampTypeObligatoireRègles
emailstringl'un des deuxEspaces de bord retirés, mis en minuscules. Doit avoir la forme nom@domaine.ext, 254 caractères au plus
phonestringl'un des deuxUn numéro de téléphone. Espaces, points, tirets, parenthèses et barres obliques sont ignorés. Rendu au format international : +237699123456. Sans indicatif — ni +, ni 00 —, il est supposé camerounais, et doit alors avoir neuf chiffres
displayNamestringouiLe nom qui figurera sur les feuilles de présence. Espaces de bord retirés, tronqué à 120 caractères, ne peut pas être vide

Une entrée peut porter le courriel et le téléphone. C'est le courriel, quand il y en a un, qui identifie la personne dans la liste ; le téléphone sinon.

Traitement

Chaque entrée est vérifiée dans l'ordre du tableau : courriel, téléphone, présence de l'un des deux, doublon, puis nom. La première règle qui échoue la fait refuser ; les autres entrées continuent.

Pour chaque personne retenue, un compte est cherché par son courriel, puis par son téléphone :

La route ne retire jamais personne : une personne absente de la liste reste dans la classe.

Réponse

201 si la liste est appliquée, 200 si c'est un essai à blanc — dans les deux cas même si des entrées sont refusées.

{
  "dryRun": false,
  "read": 2,
  "accountsCreated": 1,
  "accountsFound": 1,
  "addedToOrg": 1,
  "addedToGroup": 1,
  "alreadyInGroup": 0,
  "joinedFromOutside": [],
  "awaitingAcceptance": ["+237699123456"],
  "rejected": [],
  "invitations": [
    {
      "email": "awa@ecole.fr",
      "phone": null,
      "displayName": "Awa Diallo",
      "link": "https://reunion.votre-etablissement.fr/app/?setup=…",
      "delivered": false
    }
  ]

}
ChampTypeDescription
dryRunbooleantrue pour un essai à blanc
readintegerLe nombre d'entrées reçues
accountsCreatedintegerComptes créés, ou qui le seraient en essai à blanc
accountsFoundintegerPersonnes retenues qui avaient déjà un compte
addedToOrgintegerPersonnes rattachées à l'établissement, nouveaux comptes compris
addedToGroupintegerPersonnes ajoutées à la classe
alreadyInGroupintegerPersonnes qui en étaient déjà membres
awaitingAcceptancestring[]Les comptes inscrits hors de l'établissement : invités, ils n'entrent qu'en acceptant. Désignés par le courriel, à défaut le téléphone, que la liste donnait
joinedFromOutsidestring[]Obsolète, toujours vide : un compte d'ailleurs n'entre plus d'office. Voir awaitingAcceptance
rejectedRejet[]Les entrées refusées, dans l'ordre du tableau
invitationsInvitation[]Une par compte créé ; toujours vide en essai à blanc

Un rejet :

ChampTypeDescription
lineintegerLa position de l'entrée dans members, en comptant à partir de 1
valuestringLa valeur lue : le courriel ou le téléphone fautif, ou, pour un doublon ou un nom absent, l'identifiant normalisé ; vide s'il manquait
reasonstringLa cause, ci-dessous
reasonCause
adresse-invalideemail fourni, mais sans la forme nom@domaine.ext
telephone-invalidephone fourni, mais qui n'est pas un numéro lisible
identifiant-absentNi email ni phone
doublon-dans-le-fichierCe courriel — à la casse près — ou ce téléphone figure déjà plus haut dans la liste
nom-absentdisplayName absent ou vide

Une invitation :

ChampTypeDescription
emailstring ou nullLe courriel du compte créé
phonestring ou nullSon téléphone, au format international
displayNamestringSon nom
linkstring ou nullLe lien d'activation, quand il n'a pas pu être envoyé par courriel ; null s'il a été envoyé
deliveredbooleantrue si le lien est parti par courriel

Les liens d'activation

Aujourd'hui, MeetingHub n'envoie aucun courriel depuis ce dépôt : delivered vaut toujours false, et chaque lien est rendu dans link. Une personne inscrite par son seul téléphone n'en recevrait de toute façon pas. C'est à vous de remettre le lien à la personne, par votre propre messagerie, un SMS ou WhatsApp.

Un lien vaut un mot de passe : il ouvre le compte à qui le possède. Transmettez-le à la seule personne concernée, et ne le conservez pas dans vos journaux. Il est valable 7 jours — durée par défaut, que l'exploitant de l'instance peut changer — et ne sert qu'une fois : dès que la personne a choisi son mot de passe, il ne fonctionne plus.

Un lien perdu n'est pas réémis par un nouveau dépôt : le compte existe déjà, et la personne est alors comptée dans accountsFound. Un administrateur de l'établissement en émet un nouveau avec sa session, par POST /api/institutions/:institutionId/members/:accountId/activation-link, pour un compte qui n'appartient qu'à cet établissement.

Erreurs de la requête entière

CodeCorpsCause
400attendu : { "members": [...] }Le corps n'a pas de tableau members
400liste videmembers est vide
400N inscrits — le maximum est 5000 par dépôtPlus de 5 000 entrées
403cet accès ne permet pas cela — il faut : roster.writePortée absente
403le dépôt d’une liste vaut pour tout l’établissementAvec une session : un directeur de centre, dont l'accès se limite à ses centres
404classe « … » inconnueAucune classe ne porte cette ref dans l'établissement
404établissement inconnu:institutionId n'est pas l'établissement de la clé
429trop de personnes cherchées aujourd’hui pour cet établissement…Code org.daily-quota. Le budget quotidien de personnes cherchées — invitations et dépôts, essais à blanc compris — est épuisé : 300 pour un établissement à l'essai, 10 000 sinon. Il se renouvelle à minuit UTC
503dépôt indisponible pour le momentL'instance tourne sans base de données

La classe est cherchée avant que le corps soit lu : une ref inconnue rend 404 même si le corps est fautif.

Une liste appliquée émet l'événement roster.imported : voir Webhooks.

L'ancienne adresse

PUT /api/integration/groups/:ref/roster répond encore avec une clé d'établissement, comme alias déprécié de cette route : chaque réponse porte Deprecation: true et un en-tête Link vers la route de /api.