
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.
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'Odoo | Transport | Ce que vous envoyez |
|---|---|---|
| 19 | JSON-2 externe | base de données, clé API |
| 18 | JSON-RPC | base de données, identifiant, clé API ou mot de passe |
| 17 | JSON-RPC | base de données, identifiant, clé API ou mot de passe |
| 16 | JSON-RPC | base de données, identifiant, clé API ou mot de passe |
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.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.
# 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"
}
}'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.
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" }
]
}'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.
| Outil | Ce qu'il fait | Accès |
|---|---|---|
odoo_lookup_contact | Trouve 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_stages | Liste les étapes de votre CRM, éventuellement pour une équipe commerciale, afin que l'agent connaisse le pipeline dans lequel il travaille. | lecture |
odoo_record_caller | Met à 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_stage | Dé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 |
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.
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.
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.
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.
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.
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.
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.
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.
| Limite | Détail |
|---|---|
| Une connexion par espace de travail | Un 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é unique | Aethex 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 fois | La 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ée | La 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 atomique | Enregistrer 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. |
