Aller au contenu principal

Module Api — Bridge OpenWebUI

Le module Api expose une API REST authentifiée permettant à OpenWebUI (ou tout agent IA externe) d'interroger les données de l'intranet et de déclencher des actions.

Architecture

OpenWebUI / Agent IA

│ HTTP + Bearer token

/api/v1/... ← Module Api (Laravel)

├── InfrastructureApiController → ProxmoxApiService
├── ElevageApiController → DB élevage
├── AnalysesApiController → Eloquent Analyse
├── DashboardApiController → MeteoService
├── AlertApiController → AlertService
├── ActualiteApiController → Eloquent Actualite
└── ToolsController → tools.json (public)

Authentification

Toutes les routes (sauf tools.json) nécessitent un Bearer token :

Authorization: Bearer <API_BRIDGE_KEY>

Clé définie dans .env :

API_BRIDGE_KEY=votre_cle_ici

Middleware : ApiKeyAuthenticated — comparaison à temps constant (hash_equals).

tools.json est public (pas d'auth) pour permettre l'import du manifeste dans OpenWebUI sans configuration préalable.

Endpoints v1

Infrastructure Proxmox

MéthodeRouteDescription
GET/api/v1/infrastructureRésumé global (serveurs, nodes, VMs)
GET/api/v1/infrastructure/serversDétail complet avec métriques
GET/api/v1/infrastructure/vms?search=xxxRecherche VM par nom
GET/api/v1/infrastructure/vms?status=runningFiltrage par statut
POST/api/v1/infrastructure/syncDéclenche une sync Proxmox
POST/api/v1/infrastructure/vms/{id}/actionAction VM (start/stop/reboot/shutdown)

Élevage ostréicole

MéthodeRouteDescription
GET/api/v1/elevage/lotsListe des lots actifs
GET/api/v1/elevage/lots?search=T2604Recherche par code lot
GET/api/v1/elevage/lots/{code}Localisation précise d'un lot
GET/api/v1/elevage/tablesTables avec occupation courante

La localisation est calculée en temps réel (net fils IN − fils OUT par table).

Analyses qualité eau

MéthodeRouteDescription
GET/api/v1/analysesDerniers relevés par site (PSP, ASP, AO, AZA, YTX)
GET/api/v1/analyses/alertsSites actuellement en alerte (resultat > 0)

Météo

MéthodeRouteDescription
GET/api/v1/dashboard/meteoMétéo actuelle + 6h de prévisions

Source : Open-Meteo via MeteoService. Cache 30 min, fallback stale 24h.

Applications portail

MéthodeRouteDescription
GET/api/v1/dashboard/appsListe des applications actives avec URLs

Alertes

MéthodeRouteDescription
POST/api/v1/alertsEnvoyer une alerte aux utilisateurs

Body :

{
"title": "Alerte toxines",
"message": "Le site Muros B est en alerte AO.",
"level": "warning",
"targets": []
}
  • level : info | warning | danger
  • targets vide = diffusion à tous les utilisateurs actifs

Actualités

MéthodeRouteDescription
GET/api/v1/actualitesDernières actualités publiées
GET/api/v1/actualites?limit=20Avec limite (max 50)
POST/api/v1/actualitesCréer et publier une actualité

Endpoints v2 (ThaliaBridge)

L'API v2 est gérée par le module ThaliaBridge. Voir ThaliaBridge.

Format des réponses

Toutes les réponses incluent un champ resume en langage naturel :

{
"serveurs": 7,
"nodes_en_ligne": 7,
"vms_running": 34,
"resume": "7 serveurs Proxmox, 7/7 nodes en ligne, 34/46 VMs en cours d'exécution."
}

Manifeste OpenWebUI

GET /api/v1/tools.json retourne la liste des fonctions au format OpenAI function calling (public, sans authentification).

Intégration OpenWebUI

  1. Importer le manifeste : OpenWebUI → Tools → Add Tool → Import from URL : https://dashboard.tarbouriech.tech/api/v1/tools.json
  2. Configurer l'auth : Auth type Bearer Token + API_BRIDGE_KEY
  3. Activer dans la configuration du modèle

Exemples de requêtes IA

QuestionAppel API
"Combien de VMs sont en cours ?"GET /api/v1/infrastructure
"Où est le lot T2604 ?"GET /api/v1/elevage/lots/T2604
"Y a-t-il des alertes toxines ?"GET /api/v1/analyses/alerts
"Quel temps fait-il ?"GET /api/v1/dashboard/meteo
"Redémarre la VM pve-backup"GET /api/v1/infrastructure/vms?search=pve-backup puis POST action
"Envoie une alerte"POST /api/v1/alerts

Fichiers source

FichierRôle
Modules/Api/routes/api.phpRoutes v1
Modules/Api/app/Http/Controllers/Contrôleurs par domaine
Modules/Api/app/Providers/ApiServiceProvider.phpEnregistrement routes + middleware
app/Http/Middleware/ApiKeyAuthenticated.phpVérification Bearer token
config/api_bridge.phpConfiguration clé + TTL

Sécurité

  • Auth à temps constant (hash_equals) — anti timing-attack
  • Rate limiting Laravel par défaut (60 req/min par IP)
  • Actions VM irréversibles (stop, halt) via même token — les prompts système de l'IA doivent demander confirmation
  • publier: true sur POST actualités publie immédiatement — l'IA doit demander confirmation