{
  "tool": "standard",
  "name": "Le Standard",
  "apiVersion": "1",
  "kind": "realtime",
  "description": "Ligne d'accueil P2P : les visiteurs prennent un ticket et font la queue, le standardiste décroche l'un après l'autre en appel vocal WebRTC direct. Un agent peut tenir le standard (voir la file, décrocher/refuser) ou appeler (prendre un ticket, suivre sa position). La voix exige l'autorisation micro du navigateur ; la file et les tickets sont pilotables.",
  "url": "https://sui-juris.fr/p2p-tools/standard/",
  "session": {
    "transport": "webrtc-audio",
    "joinParam": "id",
    "roles": ["host", "guest"],
    "methods": {
      "host":  { "summary": "Ouvre le standard (rôle standardiste, adresse permanente ; nécessite le déverrouillage du coffre).", "args": {}, "returns": { "room": "identifiant de standard", "link": "lien public à partager" } },
      "join":  { "summary": "Prend un ticket et rejoint la file (naviguer d'abord vers l'URL avec ?id=<room>).", "args": { "name": { "type": "string", "required": false }, "motif": { "type": "string", "required": false } }, "returns": { "room": "", "link": "" } },
      "send":  { "summary": "Standardiste: action='take' décroche le prochain (ou {peer}), 'decline' refuse, 'hang' raccroche. Visiteur: sans action (re)prend un ticket {name,motif}, 'leave' quitte la file, 'hang' raccroche.", "args": { "action": { "type": "string", "required": false }, "peer": { "type": "string", "required": false }, "name": { "type": "string", "required": false }, "motif": { "type": "string", "required": false } }, "returns": { "ok": "bool" } },
      "poll":  { "summary": "Récupère les événements. Standardiste: {type:'caller'|'left'}. Visiteur: {type:'position'|'answered'|'declined'|'ended'}.", "args": { "since": { "type": "number", "required": false } }, "returns": { "events": "[{type,peer,name,motif,pos,total,seq}]", "seq": "curseur courant", "state": "{room,role,queue|inQueue,active|connected}" } },
      "leave": { "summary": "Quitte/ferme (raccroche l'appel, quitte la file).", "args": {}, "returns": { "ok": "bool" } }
    }
  }
}
