Génération automatique de fiches de réunion, de résumés et de plans d’action directement dans Odoo.


Voici une implémentation clé en main pour la connexion Odoo KnowledgeGPT (plugin interne) afin de générer automatiquement fiches de réunion, résumés et plans d’action directement dans Odoo.


🎯 Objectif

À chaque réunion (calendrier/visio) :

  1. récupérer l’audio/texte, 
  2. générer une fiche Knowledge normalisée (résumé + décisions + actions), 
  3.  créer automatiquement tâches/OKR et liens docs dans Odoo, 
  4. versionner et notifier les participants.

🧱 Architecture (vue rapide)

Sources (Calendar/Meet/Teams/Zoom + Plaud/Whisper) ↓ Webhook iCal / Drive / Email [ Ingestion n8n ] ↓ (fichiers + métadonnées) [ GPT Plugin Interne ] — prompts normalisés + garde-fous ↓ (JSON structuré) [ Odoo Connector ] - Knowledge: article + versioning - Project: tâches + sous-tâches - HR: participants, minutes sign-off - Documents: pièces jointes ↓ [ Notifications ] (Discuss/Email/Teams) + KPIs (Odoo BI)

🔌 Intégrations & briques

DomaineOutilRôleNotes d’implémentation
Ingestionn8nRécup. fichier/audio + métaTriggers: Calendar, Drive/Sharepoint, Email alias “minutes@company.com
TranscriptionWhisper v3 / Plaud Cloud.wav → .txt/.srtStéréo + diarization si possible
LLMGPT (plugin interne)Résumés structurés + actionsFew-shot + schémas JSON stricts
ERPOdoo (Knowledge, Project, HR, Documents, Discuss)Stockage, tâches, workflowsAPI RPC/JSON ou module Python
SécuritéJWT + IP allowlistAuth inter-servicesTokens rotatifs n8n→Odoo/LLM
TraçabilitéOdoo Documents + LogsPreuve, RGPDConserver audio + version IA

🗂️ Modèles de données (Odoo Studio/tech)

Knowledge (model knowledge.article)

Champs proposés (ajout via Studio) :

  • x_meeting_date (Datetime)
  • x_meeting_participants (Many2many res.partner)
  • x_summary (Html/Text)
  • x_decisions (Html/Text)
  • x_action_items_json (Text, JSON validé)
  • x_confidence_score (Float)
  • x_source_doc (Many2one documents.document)
  • x_llm_prompt_ver (Char)
  • x_llm_model (Char)

Project / Tasks

  • Tâche par action item (model project.task)
  • Champs personnalisés : x_due_risk (Selection: low/med/high), x_meeting_ref (Many2one knowledge.article)

Documents

  • Dossier “Meetings/YYYY/MM”
  • Rattachement du .wav/.mp3, transcript .txt/.srt, et PDF final.

🧭 Flux opérationnel (n8n)

  1. Trigger :
    • Google Calendar webhook (évènement terminé) ou réception fichier audio dans Drive/SharePoint ou email vers minutes@....
  2. Transcription : Whisper → .txt + diarization (si disponible).
  3. Appel GPT (plugin interne) : prompt structuré (voir plus bas) → JSON :

    { "title": "Réunion Kickoff Projet X (12/11)", "summary_md": "…", "decisions_md": "- Décision 1 …", "actions": [ {"title":"Configurer Odoo Project","assignee_email":"a@ex.com","due_date":"2025-11-20","priority":"high","tags":["Odoo","Setup"]}, {"title":"Former l’équipe support","assignee_email":"b@ex.com","due_date":"2025-11-22","priority":"medium","tags":["HR","Training"]} ], "risks": ["Dépendance API…"], "confidence": 0.88 }

  4. Odoo Connector :
    • Créer article Knowledge (titre, résumé, décisions, JSON actions, pièces jointes).
    • Créer tasks dans le projet mappé (détecté par tags / nom).
    • Assigner via assignee_email → res.users/res.partner.
    • Lier les tâches à l’article (backlink).
  5. Notifications :
    • mail.message (Discuss) aux participants ; résumé + 1-clic “J’acquitte”.
    • Optionnel : push Teams/Slack.
  6. Versioning :
    • Sauvegarder le prompt, model, hash transcript dans x_… pour audit.

🧩 Prompt “plugin interne GPT” (extrait)

SYSTEM: Tu es l’assistant “MinutesGen”. Tu convertis une transcription brute en: - Titre - Résumé (Markdown, 10 lignes max) - Décisions (Markdown) - Liste d’actions (tableau JSON strict) - Risques (liste) - Confidence (0..1) Contraintes: - Pas de données personnelles non présentes dans la transcription. - Dates ISO (YYYY-MM-DD). - Assignee par email si trouvé, sinon null. - Ne crée pas d’action sans verbe d’action. USER: Contexte Odoo: - Société: ACME - Projet par défaut: “ACME – Général” - Mapping participants: { "alice@acme.com":"Alice Martin", ... } Transcription (horodatée, FR): [00:00] Chef de projet: ... ...

Validation JSON côté n8n (node “IF + JSON Schema”) avant Odoo.

🧪 Module Odoo (extraits de code)

1) Contrôleur d’ingestion (si vous poussez directement dans Odoo)

# controllers/gpt_minutes.py from odoo import http from odoo.http import request import json class GptMinutesController(http.Controller): @http.route('/gpt/minutes/create', type='json', auth='api_key', methods=['POST']) def create_minutes(self, **payload): data = payload # JSON déjà validé côté n8n Article = request.env['knowledge.article'].sudo() article = Article.create({ 'name': data['title'], 'x_summary': data['summary_md'], 'x_decisions': data.get('decisions_md',''), 'x_action_items_json': json.dumps(data['actions']), 'x_confidence_score': data.get('confidence', 0.0), }) # créer tâches Task = request.env['project.task'].sudo() for a in data.get('actions', []): assignee = request.env['res.partner'].sudo().search([('email','=',a.get('assignee_email'))], limit=1) vals = { 'name': a['title'], 'partner_id': assignee.id or False, 'date_deadline': a.get('due_date'), 'x_due_risk': {'low':'low','medium':'med','high':'high'}.get(a.get('priority','low')), 'x_meeting_ref': article.id } Task.create(vals) # notifier article.message_post(body="Fiche générée automatiquement (IA).") return {'article_id': article.id}

2) Bouton “Re-générer (IA)” sur l’article

# models/knowledge_article.py from odoo import models, api, fields import requests, json class KnowledgeArticle(models.Model): _inherit = 'knowledge.article' def action_regenerate_ai(self): for rec in self: payload = { 'title_hint': rec.name, 'content': rec.body or rec.x_summary or '', 'language': self.env.user.lang } r = requests.post('https://llm.internal/api/minutes/regenerate', json=payload, timeout=60) r.raise_for_status() out = r.json() rec.write({ 'x_summary': out['summary_md'], 'x_decisions': out['decisions_md'], 'x_action_items_json': json.dumps(out['actions']), 'x_llm_model': out.get('model'), 'x_llm_prompt_ver': out.get('prompt_ver') })

Variante sans custom module : tout faire via RPC JSON depuis n8n (pas de déploiement Odoo nécessaire).

🔐 Sécurité & conformité (RGPD)

SujetReco pratique
Base légaleIntérêt légitime (notes de réunion). Informer les participants.
MinimisationPseudonymiser si partagé hors équipe ; pas de données sensibles.
RétentionAudio 90 jours, transcript 1 an, synthèse Knowledge illimitée (selon politique).
TraçabilitéStocker hash SHA-256 des fichiers source dans l’article.
ChiffrementTLS 1.2/1.3 en transit ; stockage chiffré côté Documents/DB.
DPORegistre des traitements + DPIA si enregistrement systématique.

🔁 Gouvernance & versioning

  • Champs de version (x_llm_model, x_llm_prompt_ver, x_confidence_score).
  • Journal : chaque régénération poste un message Discuss (diff + liens).
  • Rôle “Minute Owner” : valide la fiche (checkbox) → verrouille l’article.

📊 KPI & tableaux de bord (Odoo BI)

  • Délai moyenne “Fin réunion → fiche publiée”.
  • % fiches validées<24h.
  • Nb d’actions créées / complétées par réunion.
  • Taux de lecture de la fiche (Discuss).
  • Cartographie des décisions/risques par projet.

🌍 Multilingue & formats

  • lang du user → génération dans la langue de l’article.
  • Export PDF (report) automatique vers “Documents/Meetings”.
  • Option “Bilingue FR/EN” (deux sections).

🧪 Tests & QA (checklist rapide)

  • Jeux de transcriptions propres vs bruitées.
  • Cas sans actions → fiche minimale.
  • Cas d’emails inconnus → assignation par rôle par défaut.
  • Échecs LLM → fallback modèle + message clair à l’auteur.

🗺️ n8n — schéma de flow (nœuds essentiels)

  1. Trigger Calendar/Drive/Email
  2. Get File (audio)
  3. Whisper Transcribe
  4. Clean + Chunk (Function)
  5. HTTP Request → GPT Plugin (MinutesGen)
  6. IF + JSON Schema Validate
  7. HTTP Request → Odoo (create article)
  8. Loop create tasks
  9. Attach files (Documents API)
  10. Send Discuss Message + Notify Teams/Slack

✅ Résultat attendu

  • En 1–2 minutes post-réunion : fiche Knowledge prête, propre, versionnée.
  • Actions projet créées et assignées automatiquement.
  • Participants notifiés, validations tracées.
  • Gains : -70% de temps de rédaction, +30% de suivi d’actions, homogénéité des comptes-rendus.