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éthode | Route | Description |
|---|---|---|
| GET | /api/v1/infrastructure | Résumé global (serveurs, nodes, VMs) |
| GET | /api/v1/infrastructure/servers | Détail complet avec métriques |
| GET | /api/v1/infrastructure/vms?search=xxx | Recherche VM par nom |
| GET | /api/v1/infrastructure/vms?status=running | Filtrage par statut |
| POST | /api/v1/infrastructure/sync | Déclenche une sync Proxmox |
| POST | /api/v1/infrastructure/vms/{id}/action | Action VM (start/stop/reboot/shutdown) |
Élevage ostréicole
| Méthode | Route | Description |
|---|---|---|
| GET | /api/v1/elevage/lots | Liste des lots actifs |
| GET | /api/v1/elevage/lots?search=T2604 | Recherche par code lot |
| GET | /api/v1/elevage/lots/{code} | Localisation précise d'un lot |
| GET | /api/v1/elevage/tables | Tables avec occupation courante |
La localisation est calculée en temps réel (net fils IN − fils OUT par table).
Analyses qualité eau
| Méthode | Route | Description |
|---|---|---|
| GET | /api/v1/analyses | Derniers relevés par site (PSP, ASP, AO, AZA, YTX) |
| GET | /api/v1/analyses/alerts | Sites actuellement en alerte (resultat > 0) |
Météo
| Méthode | Route | Description |
|---|---|---|
| GET | /api/v1/dashboard/meteo | Météo actuelle + 6h de prévisions |
Source : Open-Meteo via MeteoService. Cache 30 min, fallback stale 24h.
Applications portail
| Méthode | Route | Description |
|---|---|---|
| GET | /api/v1/dashboard/apps | Liste des applications actives avec URLs |
Alertes
| Méthode | Route | Description |
|---|---|---|
| POST | /api/v1/alerts | Envoyer une alerte aux utilisateurs |
Body :
{
"title": "Alerte toxines",
"message": "Le site Muros B est en alerte AO.",
"level": "warning",
"targets": []
}
level:info|warning|dangertargetsvide = diffusion à tous les utilisateurs actifs
Actualités
| Méthode | Route | Description |
|---|---|---|
| GET | /api/v1/actualites | Dernières actualités publiées |
| GET | /api/v1/actualites?limit=20 | Avec limite (max 50) |
| POST | /api/v1/actualites | Cré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
- Importer le manifeste : OpenWebUI → Tools → Add Tool → Import from URL :
https://dashboard.tarbouriech.tech/api/v1/tools.json - Configurer l'auth : Auth type Bearer Token +
API_BRIDGE_KEY - Activer dans la configuration du modèle
Exemples de requêtes IA
| Question | Appel 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
| Fichier | Rôle |
|---|---|
Modules/Api/routes/api.php | Routes v1 |
Modules/Api/app/Http/Controllers/ | Contrôleurs par domaine |
Modules/Api/app/Providers/ApiServiceProvider.php | Enregistrement routes + middleware |
app/Http/Middleware/ApiKeyAuthenticated.php | Vérification Bearer token |
config/api_bridge.php | Configuration 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: truesur POST actualités publie immédiatement — l'IA doit demander confirmation