Automatisation navigateur (Playwright)
Pour les outils sans API exploitable — Vivaticket, Omniris, Pointex, Immopen — un connecteur MCP piloté par Playwright.
Une partie du SI SOFRA n'expose aucune API exploitable : Vivaticket, Omniris, Pointex (billetterie/caisse) et Immopen (syndics, isolé). Pour ceux-là, le connecteur pilote l'interface web via Playwright, et l'expose comme n'importe quel autre outil MCP.
L'automatisation navigateur est un dernier recours, pas un choix par défaut. Elle est plus fragile (l'UI change), plus lente, et plus sensible aux secrets. Dès qu'un éditeur ouvre une API ou une PA (plateforme agréée), on migre le connecteur de Playwright vers l'API. Quand un export fichier propre existe, on le préfère au scraping.
Quand l'utiliser
| Situation | Stratégie |
|---|---|
| API REST/SOAP disponible | Connecteur Rust classique (préféré). |
Export fichier fiable (.csv/.txt) | Ingestion fichier (préféré au navigateur). |
| Ni API ni export, mais une UI web | Playwright (cette page). |
| PA agréée prévue (ex: Vivaticket T1 2026) | Playwright en transition, puis bascule API/PA. |
Pattern technique
Le connecteur navigateur est un service Node/TypeScript embarquant Playwright, packagé en flake (Playwright + Chromium fournis par nixpkgs pour la reproductibilité). Il expose des outils MCP de haut niveau — pas « clique ici », mais « extrais les ventes B2B du mois ».
mcp-browser/
├── flake.nix # node + playwright + chromium (pinned)
├── package.json
└── src/
├── server.ts # serveur MCP (transport HTTP derrière le hub)
├── sessions.ts # contexte navigateur par système, secrets injectés
└── flows/
├── vivaticket.ts # login → naviguer → exporter → parser
├── omniris.ts
└── pointex.ts// Outil MCP: vivaticket.export_sales — récupère les ventes B2B/B2G d'une période.
export async function exportSales(page: Page, params: { from: string; to: string }) {
await login(page); // secrets depuis l'environnement, pas en dur
await page.goto('/reports/sales');
await page.fill('#from', params.from);
await page.fill('#to', params.to);
const csv = await downloadCsv(page, '#export');
return parseSalesCsv(csv); // sortie typée pour le chat
}Garde-fous spécifiques
- Idempotence et lecture seule par défaut : on extrait, on ne saisit pas. Toute saisie via navigateur (rare) est un outil d'écriture explicite, journalisé, avec capture d'écran avant/après.
- Secrets : identifiants des outils stockés au niveau de la plateforme, injectés par variable d'environnement, jamais dans le code ni le dépôt (Sécurité).
- Robustesse aux changements d'UI : sélecteurs stables, retries, alertes si un flux casse — un flux Playwright cassé doit lever une alerte, pas produire des données silencieusement fausses.
- Versions épinglées : Chromium et Playwright sont figés par le flake pour éviter les dérives de rendu.
Lien avec l'existant
Le dépôt rust-browser et l'expérience Playwright des projets bot (bot-acceptor)
fournissent une base de patterns d'automatisation navigateur réutilisable ici.
Connecteurs MCP
Le pattern technique d'un connecteur — Rust pour les nouveaux, réutilisation du paperasse-mcp Go, transports stdio/HTTP, packaging flake.
Déploiement Nix / NixOS
Chaque connecteur et service est un flake ; chaque serveur une config NixOS versionnée, déployée via le même pattern que nos sites docs.