AprĂšs nous ĂȘtre dâabord concentré·e·s sur lâapproche thĂ©matique de notre chatbot LiipGPT â prĂ©sentĂ©e rĂ©cemment lors du relaunch de ZüriCityGPT â nous avons orientĂ© notre attention vers lâaccessibilitĂ© avec pour objectif dâatteindre la conformitĂ© WCAG-AA. Comme pour beaucoup de fonctionnalitĂ©s, nous avons dâabord observĂ© comment les rĂ©fĂ©rence du secteur comme ChatGPT, Perplexity et Claude traitent lâaccessibilitĂ©. Bien que nous ayons constatĂ© un potentiel dâamĂ©lioration partout, cela nous a inspiré·e·s Ă rĂ©flĂ©chir Ă la maniĂšre de faire mieux de notre cĂŽtĂ©.
Notre parcours vers lâaccessibilitĂ© sâest articulĂ© autour de quatre Ă©tapes principales: des scans automatiques et quick fixes, la navigation au clavier, lâoptimisation pour le zoom mobile ainsi que lâoptimisation pour les lecteur·rice·s dâĂ©cran.
Scans automatiques et quick fixes
Nous avons commencĂ© par des tests automatisĂ©s dâaccessibilitĂ© Ă lâaide dâextensions de navigateur comme IBM Equal Access Accessibility Checker et axe DevTools. Ces outils nous ont aidé·e·s Ă identifier des problĂšmes frĂ©quents: labels manquants, contraste de couleurs insuffisant, HTML sĂ©mantique incorrect et attributs ARIA absents. Bien que les scans automatisĂ©s ne dĂ©tectent quâenviron 40 % des problĂšmes dâaccessibilitĂ©, ils constituent une base de dĂ©part solide.
Navigation au clavier
Une navigation correcte au clavier est fondamentale pour lâaccessibilitĂ©. Garantir que la navigation de base avec la touche Tab fonctionne dans toute lâapplication est relativement simple. Des composants plus complexes comme les tabs, les menus et les fenêtres de dialogue nĂ©cessitent cependant des interactions clavier plus avancĂ©es comme l'utilisation des flĂšches directionnelles, la gestion de la touche Escape ou encore la gestion du focus selon les directives officielles du W3C. Les utilisateur·rice·s qui dĂ©pendent de la navigation au clavier sâattendent Ă ces schĂ©mas spĂ©cifiques. Sâen Ă©carter provoque confusion et frustration. PlutĂŽt que dâimplĂ©menter ces schĂ©mas depuis zĂ©ro, nous avons utilisĂ© Bits UI, une bibliothĂšque headless UI qui applique correctement ces directives dâaccessibilitĂ©.
Au-delĂ des composants individuels, nous avons Ă©galement implĂ©mentĂ© des boucles de focus et une restauration du focus au niveau de lâapplication afin que les utilisateur·rice·s restent toujours orienté·e·s en passant dâune zone de lâinterface du chat Ă une autre.
Optimisation pour le zoom mobile
Lors de tests utilisateur pour meinplatz.ch avec des personnes en situation de handicap, nous avons observé quelque chose de frappant: beaucoup naviguent sur les sites web sur mobile avec un zoom de 200 % ou plus et tiennent leur appareil à environ 10 cm de leurs yeux. Cette observation a mis en évidence une lacune critique dans la plupart des implémentations de chatbots.
La majoritĂ© des chatbots utilisent des Ă©lĂ©ments Ă position fixe: un champ de saisie en bas de lâĂ©cran et souvent un en-tĂȘte en haut. Lorsque les utilisateur·rice·s zooment fortement, ces Ă©lĂ©ments fixes peuvent occuper tout le viewport et rendre lâinterface inutilisable. Malheureusement, les navigateurs ne permettent pas de dĂ©tecter de maniĂšre fiable le niveau de zoom. Pour rĂ©soudre cela, nous utilisons lâIntersection Observer pour dĂ©tecter lorsque lâen-tĂȘte ou le pied de page occupe plus dâespace que prĂ©vu. Dans ce cas, nous supprimons dynamiquement leur position fixe afin de rĂ©tablir lâutilisabilitĂ©.
ExpĂ©rience avec les lecteurs dâĂ©cran
LâaccessibilitĂ© pour les lecteur·rice·s dâĂ©cran nâapparaĂźt pas automatiquement, elle nĂ©cessite une conception attentive. Nous nous sommes concentré·e·s sur la fourniture dâun contexte clair grĂące Ă une structure de page propre (landmarks et titres). Les utilisateur·rice·s comprennent ainsi toujours oĂč iels se trouvent et ce qui se passe, tout en disposant de raccourcis vers les zones les plus importantes de lâapplication.
Fournir du contexte
Nous avons implĂ©mentĂ© une structure dâoutline complĂšte avec des landmarks pour la navigation principale, les paramĂštres et les zones de saisie. Chaque message contient des titres et des labels corrects. De plus, nous avons ajoutĂ© aprĂšs le champ de saisie du chat (en bas de page) un skip-link permettant aux utilisateur·rice·s de revenir rapidement en haut de la page.
Défis avec les Web Components
Travailler avec des Web Components a apportĂ© ses propres dĂ©fis. VoiceOver est particuliĂšrement sensible Ă la maniĂšre dont les bibliothĂšques sont implĂ©mentĂ©es. Nous avons travaillĂ© en Ă©troite collaboration avec lâĂ©quipe Bits UI (qui rĂ©agit trĂšs rapidement aux rapports de bugs) et avons par exemple implĂ©mentĂ© des portails locaux pour les menus dĂ©roulants afin dâĂ©viter des problĂšmes de navigation avec VoiceOver.
Gestion des annonces
Lâun des dĂ©fis les plus complexes a Ă©tĂ© la gestion des annonces VoiceOver lorsque plusieurs Ă©vĂ©nements se produisent simultanĂ©ment. Comme la mise en file des annonces ne fonctionne pas de maniĂšre fiable, nous avons soigneusement sĂ©quencĂ© les Ă©vĂ©nements et regroupĂ© les annonces liĂ©es. Par exemple, lorsquâun·e utilisateur·rice clique sur « Tout sĂ©lectionner » dans une liste dâoptions, des annonces sĂ©parĂ©es seraient normalement dĂ©clenchĂ©es pour chaque option et se remplaceraient mutuellement. Ă la place, nous annulons ces annonces individuelles et les remplaçons par un seul message clair qui rĂ©sume la situation (tous les Ă©lĂ©ments sĂ©lectionnĂ©s ou dĂ©sĂ©lectionnĂ©s, retour Ă la sĂ©lection prĂ©dĂ©finie, etc.).
Comme le chat est une SPA sans rechargement de page, il Ă©tait Ă©galement essentiel dâannoncer tous les changements visibles uniquement visuellement, comme par exemple le changement entre mode clair et sombre ou le changement de langue.
Flux du chat pour les lecteur·rice·s dâĂ©cran
Nous avons conçu lâexpĂ©rience du chat spĂ©cifiquement pour les utilisateur·rice·s de lecteur dâĂ©cran :
- Le champ de saisie contient à la fois un placeholder et un aria-label avec le titre de la page. Cela fournit du contexte lors du chargement de la page, car le champ est automatiquement focalisé et les utilisateur·rice·s peuvent ainsi ignorer le contenu initial.
- Lorsquâune rĂ©ponse est gĂ©nĂ©rĂ©e, nous lâannonçons clairement afin de fournir le mĂȘme retour quâun indicateur de chargement visuel.
- DĂšs quâune rĂ©ponse est prĂȘte, elle est lue sans formatage Markdown (pas dâitalique, pas de liens, etc.) afin de garantir un flux de lecture naturel.
- AprĂšs la lecture dâune rĂ©ponse, nous indiquons que tu peux directement poser une nouvelle question ou naviguer vers les options du dernier message pour donner un feedback ou consulter les rĂ©fĂ©rences. Nous ajoutons dynamiquement cette section interactive du dernier message Ă lâoutline du document afin de crĂ©er un raccourci de navigation rapide.
- Lâhistorique du chat est structurĂ© comme une sĂ©rie dâarticles avec des labels afin que les conversations prĂ©cĂ©dentes soient faciles Ă parcourir.
Teste par toi-mĂȘme
Tu peux dĂ©couvrir ces amĂ©liorations avec Alva, le chatbot de lâadministration du canton de BĂąle-Ville. Essaie de naviguer avec VoiceOver (macOS) ou NVA (Windows), dâutiliser uniquement ton clavier ou de zoomer fortement sur un appareil mobile.
Un parcours continu
Notre prochain objectif est dâintĂ©grer des tests automatisĂ©s dâaccessibilitĂ© dans notre pipeline CI. Comme mentionnĂ© prĂ©cĂ©demment, les scans automatisĂ©s ne dĂ©tectent quâenviron 40 % des problĂšmes dâaccessibilitĂ©. Cela signifie que nous devons continuer Ă planifier soigneusement chaque nouvelle fonctionnalitĂ© et Ă la tester manuellement. Rien ne remplace les tests humains lorsquâil sâagit dâaccessibilitĂ©. Les outils automatisĂ©s peuvent signaler des labels manquants ou des problĂšmes de contraste, mais ils ne peuvent pas dĂ©terminer si une interface est rĂ©ellement utilisable pour quelquâun qui navigue avec un lecteur dâĂ©cran ou uniquement au clavier.
LâaccessibilitĂ© est un parcours continu, pas une destination. Nous nous engageons Ă rendre LiipGPT utilisable par tout le monde et continuerons Ă faire Ă©voluer notre approche sur la base des retours issus de la pratique.
Besoin dâaide pour lâaccessibilitĂ© ?
Nous proposons des audits dâaccessibilitĂ© pour identifier et corriger les problĂšmes dans tes applications. Si tu souhaites amĂ©liorer lâaccessibilitĂ© de ton produit, contacte-nous, nous serons ravi·e·s de tâaider.