aethexDocs
Odoo logo
CRM

Odoo

Connectez votre CRM Odoo et vos agents vocaux peuvent reconnaître l'appelant, consulter ses pistes ouvertes, tenir la fiche contact à jour et consigner les appels aboutis sur le contact, le tout pendant l'appel, dans votre propre Odoo. Compatible avec Odoo 16 à 19.

Fonctionnement

Connectez votre instance Odoo une fois, choisissez les agents autorisés à l'utiliser et donnez à chacun un accès en lecture ou en écriture. Aethex stocke l'identifiant chiffré et transforme votre CRM en un petit ensemble d'actions qu'un agent peut appeler en cours d'appel, en décidant lui-même quand chacune est nécessaire. L'accès dit tout : la lecture permet à un agent de consulter, l'écriture lui permet de modifier votre CRM et de faire consigner ses appels aboutis. Aethex dialogue avec la version que vous utilisez, si bien que les mêmes actions fonctionnent de la même façon que votre instance soit Odoo 16, 17, 18 ou 19.

AETHEXvotre agentLECTUREIdentifier l'appelantLire contacts et pistes ouvertesÉCRITUREMettre un contact à jourJournaliser l'appelautolectureécritureL'écriture inclut tout ce que permet la lecture. Le journal d'appel suit l'autorisation d'écriture.

Versions prises en charge

Aethex dialogue avec chaque version d'Odoo via sa propre API. Odoo 19 utilise la nouvelle API externe JSON-2 ; Odoo 16, 17 et 18 utilisent l'API JSON-RPC héritée. Vous choisissez la version, ou laissez Aethex la détecter, lors de la connexion, et la connexion enregistre la version et le transport retenus pour que vous puissiez le vérifier.

Version d'OdooTransportCe que vous envoyez
19JSON-2 externebase de données, clé API
18JSON-RPCbase de données, identifiant, clé API ou mot de passe
17JSON-RPCbase de données, identifiant, clé API ou mot de passe
16JSON-RPCbase de données, identifiant, clé API ou mot de passe
Remarque
Définissez config.odoo_major_version sur auto, 16, 17, 18 ou 19. auto lit la version signalée par votre serveur et choisit le transport pour vous. Les versions inférieures à 16 et les versions non testées au-delà de 19 sont refusées à la connexion.
ÉTAPE 01

Connectez votre instance Odoo

Envoyez l'identifiant à POST /integrations. Aethex le valide auprès de votre instance avant de rien stocker : une mauvaise clé, base de données ou version revient comme une erreur sur cet appel plutôt qu'en échec silencieux en cours d'appel. Chaque connexion a besoin de l'URL de votre instance dans base_url (HTTPS public uniquement), du nom de la base dans config.database, de l'identifiant dans access_token, et de auth_type réglé sur api_key. Odoo 19 identifie l'utilisateur API par la clé elle-même : vous n'envoyez donc pas d'identifiant de connexion. Odoo 16, 17 et 18 s'authentifient avec un identifiant de connexion : vous envoyez donc aussi config.username ; l'identifiant peut être la clé API ou le mot de passe de cet utilisateur. Vous ne savez pas quelle version vous utilisez ? Réglez odoo_major_version sur auto et incluez l'identifiant de connexion.

Connecter Odoo
bash
# Odoo 19 (JSON-2): no username, the API key identifies the user
curl -X POST https://api.aethexai.com/api/v1/integrations \
  -H "X-API-Key: $AETHEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "odoo",
    "auth_type": "api_key",
    "base_url": "https://your-company.odoo.com",
    "access_token": "<your-odoo-api-key>",
    "display_name": "Sales CRM",
    "config": {
      "database": "your-company",
      "odoo_major_version": 19
    }
  }'

# Odoo 16, 17, 18 (or "auto"): also send the user's login
curl -X POST https://api.aethexai.com/api/v1/integrations \
  -H "X-API-Key: $AETHEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "odoo",
    "auth_type": "api_key",
    "base_url": "https://crm.your-company.com",
    "access_token": "<your-odoo-api-key-or-password>",
    "display_name": "Sales CRM",
    "config": {
      "database": "your-company",
      "username": "[email protected]",
      "odoo_major_version": "auto"
    }
  }'
ÉTAPE 02

Accordez l'accès aux agents

La connexion stocke l'identifiant ; elle ne le confie à rien. Une connexion sans agent est inerte : aucun appel ne voit ses outils et rien n'est écrit dans votre CRM. Accordez l'accès par agent, dans l'appel de connexion ou plus tard avec PUT /integrations/{id}/agents. Ce PUT remplace tout l'ensemble : envoyez donc chaque agent qui doit conserver l'accès, pas seulement celui que vous ajoutez. Commencez en lecture (read) ; passez un agent en écriture (write) seulement lorsque vous voulez qu'il modifie des fiches et consigne des appels.

Accorder l'accès à un agent
bash
curl -X PUT https://api.aethexai.com/api/v1/integrations/$CONNECTION_ID/agents \
  -H "X-API-Key: $AETHEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agents": [
      { "agent_id": "<agent-uuid>", "access": "read" }
    ]
  }'
ÉTAPE 03

Ce qu'un agent peut faire

Ce qu'un agent peut atteindre est décidé à l'assemblage de l'appel : une action hors de son accès n'est jamais proposée au modèle, si bien qu'un agent en lecture seule n'a aucun moyen de modifier quoi que ce soit. Voici les outils, et l'accès requis par chacun.

OutilCe qu'il faitAccès
odoo_lookup_contactTrouve l'appelant par téléphone ou e-mail exact et renvoie ses pistes CRM ouvertes en un seul résultat, pour que l'agent puisse le saluer par son nom et reprendre là où la dernière conversation s'était arrêtée. Recherche à la fois sur les champs téléphone et mobile.lecture
odoo_list_stagesListe les étapes de votre CRM, éventuellement pour une équipe commerciale, afin que l'agent connaisse le pipeline dans lequel il travaille.lecture
odoo_record_callerMet à jour l'unique contact correspondant, ou crée un contact lorsqu'aucun ne correspond. Renvoie une liste de désambiguïsation plutôt que de deviner lorsque plusieurs contacts correspondent.écriture
odoo_move_lead_stageDéplace une piste ou une opportunité vers une étape non ambiguë, par id ou libellé exact. Désactivé par défaut ; activez-le par connexion avec config.enabled_tools.écriture
Remarque
odoo_move_lead_stage est optionnel. Pour l'activer, envoyez config.enabled_tools avec la liste complète des outils que la connexion doit exposer (c'est une liste blanche exacte, pas un ajout aux valeurs par défaut). Incluez odoo_log_call dans cette liste si vous voulez que la consignation automatique des appels continue de fonctionner.

Consignation automatique des appels

À la fin d'un appel, Aethex recherche l'appelant et consigne l'appel dans son fil de discussion Odoo sous forme de note interne : l'id de l'appel, le sens, l'heure de début, la durée et l'issue, plus un bref résumé. Aucun appel d'outil ni invite nécessaire.

Astuce
Elle suit l'accès en écriture : elle a lieu pour les agents à qui vous avez accordé l'écriture, et pas pour ceux en lecture seule ou sans accès. Et elle n'écrit que sur une correspondance non ambiguë : un numéro qui correspond à deux contacts est laissé à un humain plutôt que consigné sur la mauvaise fiche.

Importer des contacts comme listes d'appels

Une connexion Odoo peut aussi alimenter des listes d'appels à partir de vos contacts, sans exposer toute votre base. Listez ce que vous pouvez importer avec GET /integrations/{id}/imports/entities, voyez les champs sûrs avec GET /integrations/{id}/imports/fields?entity=res.partner, prévisualisez un échantillon validé avec POST /integrations/{id}/imports/preview, et lisez les lignes paginées avec POST /integrations/{id}/imports/page. Les champs sensibles comme les coordonnées bancaires, les jetons et les identifiants nationaux ne sont jamais proposés, et le flux est en lecture seule jusqu'à ce que vous lanciez l'import.

Sécurité

Votre instance Odoo doit être joignable en HTTPS public ; les hôtes privés, en boucle locale et internes sont refusés, et le nom d'hôte est résolu et épinglé juste avant chaque requête pour fermer les fenêtres de réattribution DNS. Les redirections ne sont pas suivies, les requêtes expirent au bout de 15 secondes et les réponses sont plafonnées. Pendant un appel, l'agent répond tout de même sous 9 secondes, quoi que fasse Odoo. L'identifiant est chiffré au repos et n'est jamais renvoyé par aucun endpoint, pas plus que le nom de la base ou l'identifiant de connexion. Les accès en lecture et en écriture sont appliqués par agent, et les propres règles d'accès de votre utilisateur Odoo s'appliquent en plus : un accès ne peut donc que restreindre ce que cet utilisateur pouvait déjà faire.

Erreurs

Les appels de connexion et d'outil renvoient ces statuts.

401Identifiant rejeté

Odoo a rejeté la clé API ou le mot de passe.

Vérifiez l'identifiant, l'identifiant de connexion (Odoo 16 à 18) et la base de données, puis reconnectez.

403Accès refusé

L'utilisateur Odoo n'est pas autorisé pour l'opération ou la fiche.

Donnez à l'utilisateur d'intégration les droits de lecture ou d'écriture CRM dans Odoo, puis réessayez.

404Non exposé

L'instance n'expose pas le modèle ou la méthode requis.

Vérifiez que le CRM est installé et que la version est prise en charge par Aethex.

422Requête inutilisable

Fournisseur inconnu, version qui ne correspond pas au serveur, version non prise en charge, identifiant de connexion manquant pour Odoo 16 à 18, identifiant de connexion envoyé pour Odoo 19, ou champ config non pris en charge.

Lisez le message ; il nomme le problème précis.

429Trop de requêtes

La limite de débit de connexion ou d'import par locataire a été dépassée.

Patientez et réessayez après la fenêtre Retry-After.

503Odoo injoignable

Odoo était injoignable, la clé de chiffrement n'est pas configurée, ou le limiteur de débit est hors ligne.

Transitoire ; réessayez sous peu.

Notes et limites

Quelques points à connaître avant de bâtir dessus.

LimiteDétail
Une connexion par espace de travailUn espace de travail ne détient qu'une connexion Odoo active : connecter une seconde instance remplace la première et emporte ses accès d'agents.
Le téléphone n'est pas une clé uniqueAethex recherche sur les champs téléphone et mobile en utilisant à la fois la forme E.164 et le numéro tel que composé, et renvoie les correspondances ambiguës comme candidats à désambiguïser par l'agent plutôt que de deviner.
Les champs optionnels sont détectés une foisLa version et les champs optionnels exposés par votre base sont détectés à la connexion et mis en cache sur la connexion. Reconnectez pour prendre en compte un champ ajouté plus tard, par exemple après l'installation d'un module.
La version est enregistréeLa version et le transport détectés sont stockés sur la connexion et renvoyés par GET /integrations/{id}, pour que vous puissiez vérifier avec quoi Aethex dialogue.
L'enregistrement n'est pas un upsert atomiqueEnregistrer un appelant est une recherche puis écriture : deux appelants simultanés avec le même nouveau numéro peuvent donc créer des contacts en double.