--- title: TimeTrackr Integration url: https://blog.guigpap.com/fr/workflows/timetrackr/ url_md: https://blog.guigpap.com/fr/workflows/timetrackr.md category: automation date: '2026-03-28' maturite: production techno: - n8n - odoo application: - automation - business --- # TimeTrackr Integration > Bridge entre l'application de suivi de temps desktop et les timesheets Odoo via webhooks N8N ## 1. Quoi ? — Definition et contexte TimeTrackr est une application desktop de suivi de temps. Quand vous demarrez un timer sur un projet et l'arretez, l'entree de temps doit atterrir dans Odoo comme timesheet. Deux webhooks N8N font le pont : l'un fournit la liste des projets et taches pour les menus deroulants du client, l'autre recoit les entrees de temps et les convertit en lignes analytiques Odoo. > **Note - Timesheet Odoo** > > Un **timesheet** dans Odoo (`account.analytic.line`) est une ligne de temps passee sur un projet. Il lie un employe, un projet, une tache, une duree et une description. C'est la base de la facturation et du reporting. ### Deux workflows | Workflow | Nodes | Endpoint | Role | |----------|-------|----------|------| | **TimeTrackr Projects** | 5 | GET `/webhook/timetrackr-projects` | Liste projets + taches pour dropdown | | **TimeTrackr Entries** | 12 | POST `/webhook/timetrackr-entries` | Creation timesheets Odoo | ### Flux de donnees ```mermaid flowchart TD TT["TimeTrackr Desktop"] subgraph Projects["TimeTrackr Projects · 5n"] direction TB GET["GET /webhook/timetrackr-projects"] Filter["Filter projects · x_github_sync_enabled"] Group["Group tasks by project"] end subgraph Entries["TimeTrackr Entries · 12n"] direction TB POST["POST /webhook/timetrackr-entries"] Loop["Loop entries · continueOnFail"] Mapping["Lookup timetrackr_user_mapping"] Create["Create account.analytic.line · Odoo"] end TT -->|select project| GET --> Filter --> Group --> TT TT -->|submit batch| POST --> Loop --> Mapping --> Create ``` --- ## 2. Pourquoi ? — Enjeux et motivations ### Problemes resolus | Probleme | Sans integration | Avec integration | |----------|-----------------|-----------------| | **Double saisie** | Timer + saisie manuelle Odoo | Automatique | | **Projets desynchronises** | Listes differentes dans chaque app | Dropdown alimente par Odoo | | **Erreurs d'attribution** | Mauvais projet ou mauvaise tache | Mapping par ID | --- ## 3. Comment ? — Mise en oeuvre technique ### Authentification Les deux endpoints utilisent un token dans le header HTTP : | Header | Usage | |--------|-------| | `X-TimeTrackr-Token` | Token partage entre le client desktop et N8N | Les webhooks sont exposes via Caddy (acces externe autorise, contrairement aux webhooks internes). ### Endpoint Projects Le workflow recupere les projets Odoo ou `x_github_sync_enabled = true`, puis les taches actives (hors Done/Cancelled) groupees par projet. La reponse est un JSON exploitable directement par les menus deroulants du client. ### Endpoint Entries Le payload arrive sous forme de batch : ```json { "version": 1, "entries": [ { "project_id": 5, "task_id": 42, "description": "Fix login bug", "duration": 1.5, "date": "2026-03-28", "username": "guillaume" } ] } ``` Pour chaque entree, le workflow : 1. Cherche l'employee ID dans la Data Table `timetrackr_user_mapping` (`guillaume` → employee 1) 2. Cree une ligne `account.analytic.line` dans Odoo 3. Continue meme en cas d'erreur sur une entree (`continueOnFail`) > **Caution - Mapping utilisateur** > > Le mapping username → employee_id est stocke dans la Data Table `timetrackr_user_mapping`. Si un utilisateur n'est pas mappe, l'entree echoue silencieusement (logguee mais pas creee). --- ## 4. Et si ? — Perspectives et limites ### Limites actuelles | Limite | Impact | Mitigation | |--------|--------|------------| | **Pas de sync inverse** | Timesheets Odoo pas visibles dans TimeTrackr | TimeTrackr a sa propre vue | | **Mapping manuel** | Ajouter chaque utilisateur a la Data Table | Un seul utilisateur actuellement | ### Scenarios d'evolution **Si multi-utilisateurs** : - Auto-decouverte des employes Odoo - Mapping par email plutot que par username --- ## Pages liees ### Infrastructure - [Odoo 18 sur Docker](/fr/infrastructure/odoo-18-setup/) — Timesheets et projets ### Workflows - [Claude Code Telemetry](/fr/workflows/claude-code-telemetry/) — Autre source de timesheets automatiques ## Metadonnees agent - Cet article est issu du blog GuiGPaP Lab. - Contexte global du blog: https://blog.guigpap.com/llms.txt - Contact auteur: https://odoo.guigpap.com/mon-cv - Licence: CC-BY-SA 4.0