Se rendre au contenu
Senedoo Prenez contact

Technologie et IA

Des interfaces en temps réel avec Odoo.

Odoo est excellent pour saisir et tenir les données

Il l'est moins pour les montrer comme un dirigeant, un comptable sénégalais ou un gérant de boutique en ont besoin. Plutôt que de développer dans Odoo — ce qui coûte à chaque mise à jour — nous avons construit une technologie qui travaille à côté d'Odoo, en direct, sans copier vos données.

Ça s'ouvre dans Odoo

Nos balances OHADA, votre tableau de bord, la vue des emplacements de stock, les exports Excel apparaissent dans les menus d'Odoo, avec vos droits d'accès, sans deuxième connexion.

Ça lit Odoo au moment où vous regardez

Pas d'entrepôt de données rafraîchi la nuit : la balance que vous ouvrez à 10 h 04 contient l'écriture validée à 10 h 03. Le planogramme 3D se remplit à la réception et se vide à la vente.

Ça écoute Odoo

Une facture validée, une session de caisse fermée, une commande confirmée : Odoo prévient notre serveur, qui met à jour le tableau de bord, signale la session oubliée, ou relance une commande fournisseur.

Ça parle aux machines

Boîtiers fiscaux Tremol au Kenya, imprimantes de tickets, terminaux M-Pesa : nos passerelles tournent à côté de la caisse et gardent une file d'attente, pour que la coupure d'internet ne bloque jamais une vente.

Ça voit plusieurs bases à la fois

Cinq stations, cinq bases Odoo, un seul tableau de bord ; une configuration comparée à une autre ; une centrale d'achats qui éclate ses commandes vers les bases de ses stations.

Et ça reste réversible

chaque écriture est journalisée et annulable, les accès à vos bases sont chiffrés et propres à chaque client, et nous vous remettons la fiche de reconstruction de votre configuration.

Le magasin vivant — la boutique en 3D, lue en direct dans Odoo
Le magasin vivant — la boutique en 3D, lue en direct dans Odoo
Architecture d'un réseau : grappes de bases SaaS, orchestrateur, centrale d'achats
Architecture d'un réseau : grappes de bases SaaS, orchestrateur, centrale d'achats
La caisse Odoo dans le magasin vivant
La caisse Odoo dans le magasin vivant
IA, serveur MCP, ToolBox

Vos bases Odoo, pilotées par l'IA — sous contrôle.

Nous avons développé notre propre serveur MCP

Model Context Protocol, le standard ouvert créé fin 2024 et adopté par Claude, ChatGPT, Gemini et Copilot, qui permet à une IA de se servir d'outils. Le nôtre en compte trois cent trente-sept, tous reliés à vos bases Odoo : diagnostic, import Sage, paie, rapports, caisses, sauvegardes, tableaux de bord, configuration. Aucune dépendance à un seul fournisseur d'IA.

Ce qui prenait une journée de consultant prend dix minutes de conversation

« Vérifie la balance après l'import », « installe la convention Commerce sur cette base et calcule une paie de test », « quelle caisse est bloquée à Westlands ? » — et la réponse arrive, avec les chiffres.

Le contrôle reste humain

Chaque écriture est d'abord simulée, exécutée seulement sur confirmation, et journalisée pour être annulable. L'IA propose ; le consultant décide.

Schema mcp
Le serveur MCP de la ToolBox : des outils contrôlés entre les utilisateurs — humains et IA — et les bases
› Vérifie la balance de sunu-finance après l'import du grand livre Sage
sage_import_verify_balance(client_id="sunu-finance", rapproche=true)
✓ 1 842 comptes rapprochés · écart 0 XOF · 0 ligne sur compte déprécié
› Installe la convention Commerce 2023 sur dakar-boutiques et calcule la paie de test d'août
payroll_install_full(client_id="dakar-boutiques", convention="COMMERCE 2023", confirm=false)
→ simulation : 1 structure, 42 règles, 6 catégories. Confirmer ?
› Quelle caisse est bloquée à Westlands ?
pos_diag(client_id="nairobi-stations")
✓ 3 sessions ouvertes · 0 ticket en attente de signature · pont eTIMS OK
Réseaux et groupes

La technologie des clusters SaaS

Pour un réseau de boutiques ou un groupe de sociétés, nous ne mettons pas tout dans une seule base. Nous répartissons les sites en grappes d'une vingtaine de bases Odoo SaaS, reliées par notre orchestrateur : chaque grappe reste légère, une panne n'arrête jamais tout le réseau, et l'on grandit en ajoutant une grappe, pas en reconstruisant.

Résilience

Une maintenance ou un incident ne touche qu'une grappe de vingt boutiques : le reste du réseau et la centrale continuent de vendre et de commander.

Volumétrie maîtrisée

Un ticket de caisse crée douze enregistrements. Sur cinq ans, une grappe de vingt boutiques pèse 131 millions de lignes — la zone de confort d'Odoo. Une base unique de 150 boutiques en pèserait un milliard.

Parallélisme

La charge des caisses est répartie ; l'orchestrateur traite les flux de chaque grappe en parallèle. La latence reste stable aux heures de pointe.

Déploiement par vagues

Une grappe = une vague. Notre outillage provisionne une base complète — sociétés, entrepôts, caisses, catalogue — de façon automatisée et répétable.

Données maîtres propagées

Un produit ajouté à la centrale se propage à chaque grappe et à l'e-commerce ; un contrôle de cohérence permanent signale toute divergence — prix, code, unité, taxe.

Une vue fédérée

Le tableau de bord et les outils MCP lisent les grappes une par une ou en vue fédérée avec cache : pour l'utilisateur, le réseau se lit comme une seule base.

Hébergement

SaaS, Odoo.sh ou on-premise ? Pourquoi nous préférons le SaaS Odoo ?

Odoo se déploie de trois façons : Odoo SaaS (odoo.com, hébergé et exploité par l'éditeur), Odoo.sh (plateforme cloud de l'éditeur avec vos propres modules Python), ou on-premise (vos serveurs). Nous recommandons le SaaS à la quasi-totalité de nos clients, et nous préférons le dire avec ses limites.

Critère✔ Odoo SaaS (notre recommandation)Odoo.shOn-premise
Hébergement et exploitation
Inclus
Inclus dans l'abonnement Enterprise : infrastructure ISO 27001, sauvegardes répliquées, supervision, garantie de disponibilité d'Odoo S.A. Zéro serveur à acheter ou à administrer.
À planifier
Hébergement facturé en plus (workers, stockage, environnements de test). Exploitation partagée entre l'éditeur et l'intégrateur.
À votre charge
Serveurs, redondance, sauvegardes, sécurité et une équipe d'exploitation à votre charge. Au Sénégal ou au Kenya, l'électricité et la connectivité s'ajoutent au risque.
Mises à jour de version
Inclus
Automatiques et continues, année après année : vos bases restent sur la dernière version sans projet de migration.
À planifier
Migration à planifier tous les deux ou trois ans, avec adaptation de vos modules : un projet à chaque fois.
À votre charge
Migration à votre charge, souvent repoussée : les bases on-premise vieillissent, la dette technique s'accumule.
Personnalisation
Inclus
Studio (champs, vues, rapports, automatisations) et notre technologie à côté d'Odoo (ToolBox, orchestrateur, compléments installables). Limite honnête : pas de possibilité de toucher au code source Odoo. Notre réponse : les personnalisations sont faites sur un VPS synchronisé avec votre base via des webhooks et des crons, sans toucher à la base SaaS — elle reste standard, donc toujours à jour.
À planifier
Modules Python sur mesure possibles — c'est son intérêt, et son piège. Un module touche au code source d'Odoo : à chaque version il doit être relu, adapté, retesté ; en attendant, la mise à jour est bloquée. Un bug dans le module arrête toute la base, pas seulement la fonction. Et le code vous lie à son auteur : sans lui, personne ne le maintient.
À votre charge
Tout est possible, tout est à maintenir. Mêmes inconvénients que les modules Python d'Odoo.sh — code source modifié, migrations repoussées, dépendance au développeur — sans l'environnement de test ni le déploiement automatisés de la plateforme. C'est ainsi que des bases restent bloquées en version 12 ou 14.
Résilience et montée en charge
Inclus
Une base par grappe d'une vingtaine de sites ; un incident reste local ; on grandit en ajoutant des grappes.
À planifier
Une base unique : point de défaillance unique, volumes qui croissent sans limite.
À votre charge
Idem, plus la fragilité de votre propre infrastructure.
Coût total
Inclus
Le plus bas : licences seules, pas de serveur, pas de migration, pas d'équipe d'exploitation.
À planifier
Licences + hébergement + migrations périodiques.
À votre charge
Licences + matériel + équipe + migrations. Le coût visible est bas, le coût réel est le plus élevé.
Localisation des données
Inclus
Centres de données Odoo (Europe, par défaut). À examiner si une réglementation impose une localisation nationale.
À planifier
Idem (cloud de l'éditeur).
À votre charge
Chez vous — le seul argument décisif pour l'on-premise, quand la loi l'exige.
Quand le choisir
Inclus
PME, groupes multi-sociétés, réseaux de boutiques ou de stations, tout client qui veut un système à jour sans équipe technique.
À planifier
Quand un module métier sur mesure est vraiment indispensable et que vous acceptez d'en payer la maintenance.
À votre charge
Obligation légale de localisation, ou site sans internet fiable avec une équipe informatique sur place.

Notre position. Ce qu'un client demande « sur mesure » se règle presque toujours par Studio, par un complément Senedoo installable, ou par notre technologie qui travaille à côté d'Odoo en temps réel — sans jamais quitter le SaaS. Quand ce n'est pas le cas, nous le disons, et nous vous accompagnons sur Odoo.sh. Nous n'avons encore jamais eu à recommander l'on-premise.

Trois façades, un seul code

La ToolBox Senedoo

Votre espace client

senedoo-toolbox.com : connexion unique à toutes vos bases, rapports financiers, exports Excel, tableaux de bord, suivi de projet, tutoriels vidéo.

Les compléments dans Odoo

Vingt-neuf outils installables — rapports OHADA, déclarations, paie, étiquettes, mobile money — mis à jour centralement, sans intervention chez vous.

Le serveur MCP

Connecteur pour Claude et ChatGPT, réservé à nos consultants et, sur demande, à vos équipes formées. Simulation par défaut, journal d'annulation.

Webhooks

Odoo prévient, nos serveurs agissent.

Un webhook est un appel automatique d'un système vers un autre, déclenché par un événement

Odoo sait le faire dans les deux sens, sans une ligne de code, depuis ses règles d'automatisation.

Odoo qui prévient

L'action « Send Webhook Notification » envoie une requête POST, avec les champs que vous choisissez, vers l'adresse de votre choix. Une facture validée, une session de caisse fermée, une commande confirmée, un employé embauché : notre orchestrateur reçoit l'événement et fait le travail qui suit — mettre à jour le tableau de bord, signaler une session de caisse oubliée avant l'ouverture, relancer une commande fournisseur.

Odoo qui écoute

Le déclencheur « External » fait l'inverse : Odoo génère une adresse, un système extérieur l'appelle, et une automatisation se déclenche sur l'enregistrement visé. C'est ainsi qu'un terminal de paiement, une passerelle fiscale ou un formulaire hébergé ailleurs viennent écrire dans Odoo au moment où l'événement se produit, sans attendre une synchronisation nocturne.

Du signal à la donnée

Un webhook transporte l'événement, pas le dossier : Odoo annonce « la session de caisse 1842 est fermée », il n'envoie pas ses trois cents lignes de vente. C'est voulu — la charge utile reste petite, et rien de confidentiel ne traverse le réseau sans qu'on l'ait demandé. Notre orchestrateur fait donc le second pas : il vérifie la signature, puis rappelle Odoo par l'API pour extraire exactement ce dont il a besoin. Le webhook dit quoi ; l'API dit combien.

Ce que cela remplace

Les exports du soir, les fichiers déposés sur un serveur, les scripts qui interrogent Odoo toutes les cinq minutes pour savoir si quelque chose a changé. Le webhook coûte un appel, au moment exact où l'événement arrive.

Les garde-fous

Odoo le dit lui-même dans sa documentation : un webhook mal configuré peut perturber une base, et le retour en arrière prend du temps. Chez nous, un webhook n'arrive jamais seul : adresse signée, journal de tous les appels reçus, file d'attente si le serveur d'en face ne répond pas, et rejeu possible. Un événement perdu est un chiffre faux le lendemain matin.

# 1. Odoo appelle cette adresse quand la session de caisse se ferme
@app.post("/odoo/session-fermee")
def session_fermee():
    signe = hmac.new(SECRET, request.data, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(request.headers.get("X-Senedoo-Sig", ""), signe):
        abort(403)    # signature absente ou fausse : on jette
    session = request.get_json()["session_id"]
 
    # 2. Le webhook dit QUOI. L'API dit COMBIEN : on rappelle Odoo.
    uid = commun.authenticate(BASE, LOGIN, CLE, {})
    lignes = objets.execute_kw(BASE, uid, CLE, "pos.order", "search_read",
        [[["session_id", "=", session]]],
        {"fields": ["amount_total", "payment_ids"], "limit": 1000})
 
    # 3. On agit — ici, l'écart de caisse, avant l'ouverture du lendemain
    encaisse = sum(l["amount_total"] for l in lignes)
    if abs(encaisse - compte_par_la_caissiere(session)) > 5000:
        alerte(f"Session {session} : écart de {encaisse:,.0f} F")
    return "", 204    # Odoo n'attend rien d'autre qu'un accusé

Trente lignes, aucun code dans la base Odoo. Le même schéma sert pour une facture validée, une commande confirmée ou un employé embauché : seule change la requête de l'étape 2.

API

L'API d'Odoo : vos données, lisibles et modifiables de l'extérieur.

Tout ce qu'un utilisateur peut faire dans Odoo, un programme peut le faire par l'API — avec les mêmes droits, ni plus ni moins. C'est par là que passent nos rapports, nos tableaux de bord et nos passerelles.

JSON-2, la voie actuelle

Depuis la version 19 : on envoie un objet JSON à l'adresse /json/2/modèle/méthode, authentifié par une clé API dédiée. Chaque base publie la liste de ses modèles, champs et méthodes sur sa propre page de documentation.

XML-RPC, l'héritage

L'ancienne interface fonctionne encore, mais Odoo l'a dépréciée : le service de gestion des bases a disparu en version 20, le reste est programmé pour être retiré. Nos connecteurs y tournent toujours et migreront avant l'échéance.

Le serveur MCP

La même idée, pour les intelligences artificielles : des outils déclarés plutôt qu'un accès direct. Odoo 20 en livre un ; le nôtre en compte plus de trois cents. Lire la comparaison

Ce que nous en faisons

Nos balances OHADA, votre compte de résultat SYSCOHADA, vos tableaux de bord, les étiquettes de rayon, l'import Sage vérifié au franc près, la veille de vos caisses : tout cela lit et écrit dans votre base par l'API, au moment où vous regardez, sans copie de vos données chez nous.

Une condition à connaître avant de bâtir dessus

Sur Odoo Online, l'accès à l'API externe n'est pas ouvert à tous les abonnements : il est réservé aux plans Custom, et exclu des plans One App Free et Standard. Ce n'est pas une affaire d'édition mais de formule — nous le vérifions avec vous avant d'intégrer quoi que ce soit, et nous vous disons si votre besoin le justifie ou non.

Et la sécurité ?

Une clé API vaut un mot de passe : elle porte les droits de son propriétaire. Nous créons un utilisateur dédié aux droits strictement nécessaires, une clé par usage, et nous journalisons chaque écriture pour pouvoir la défaire.