Requête Odoo
Interroge votre Odoo pendant l'appel et range la réponse dans des variables : un état de commande, un solde, une date de rendez-vous, pour router ensuite.
En bref
| Sorties | OK et Erreur |
| Champs | Instance Odoo, Timeout, Modèle, Méthode, Args (JSON), Kwargs (JSON), et un tableau d'extractions Variable et Chemin JSON |
| Timeout proposé | 2, 3, 5 ou 8 s, 5 s par défaut |
| Timeout réellement appliqué | 8 secondes au maximum |
| Méthode proposée à la création | search_read |
| Disjoncteur | 5 échecs consécutifs sur un même serveur ouvrent le circuit pendant 30 secondes |
| Essai avant mise en service | bouton Tester, qui interroge réellement votre Odoo |
Le texte d'aide affiché dans la fenêtre est : « Appelle execute_kw(modèle, méthode, args, kwargs) sur Odoo. args/kwargs = JSON avec {{variables}} ({{caller_e164}} = formats E.164 de l'appelant). Extrait la réponse JSON dans des variables. Sortie « Erreur » si Odoo échoue/timeout. »
Comment ça marche
C'est le module le plus technique du lot. Là où Odoo, résolution contact répond à une question unique et toute prête, celui-ci pose n'importe quelle question à votre Odoo. En contrepartie, il faut savoir où l'information se trouve dans Odoo.
Les quatre champs de la question
| Champ | Ce que c'est | Exemple |
|---|---|---|
| Modèle | le nom interne de la table Odoo interrogée | res.partner pour les contacts |
| Méthode | ce que vous demandez à cette table | search_read pour chercher puis lire |
| Args (JSON) | les arguments, en pratique le filtre de recherche | [[["phone_sanitized","in","{{caller_e164}}"]]] |
| Kwargs (JSON) | les options nommées : quels champs lire, combien de lignes | {"fields":["name","user_id"],"limit":1} |
Le nom du modèle se lit dans Odoo, en activant le mode développeur, ou se demande à la personne qui administre votre Odoo. C'est le seul point de cette page qui ne s'invente pas.
JSON, en une phrase
Args et Kwargs s'écrivent en JSON, un format où les crochets [ ] délimitent une liste, les accolades { } un ensemble de champs nommés, et où tout texte est entre guillemets droits. Une virgule oubliée ou une accolade non refermée suffit à faire échouer la requête.
Les variables dans la question
Écrivez {{ma_variable}} n'importe où dans Args ou Kwargs. Une nuance utile : une variable entourée de guillemets, comme "{{caller_e164}}", est remplacée par sa valeur au format JSON, guillemets compris. Une liste reste donc une liste, ce qui permet d'écrire un filtre du type « le téléphone est parmi ces écritures ».
L'extraction
Le tableau du bas associe un Chemin JSON à un nom de Variable. Les niveaux se séparent par des points ; les listes se comptent à partir de zéro. search_read répond une liste, donc le chemin d'un premier résultat commence par 0. : 0.name désigne le nom du premier contact trouvé.
Un chemin laissé vide rapporte la réponse entière. C'est indispensable pour les méthodes qui répondent un nombre ou un mot sans structure autour, comme un comptage : sans cela la variable resterait vide et la condition qui la teste serait toujours fausse.
Le disjoncteur
Comme pour la Requête API, après 5 échecs consécutifs vers le même serveur, le module cesse de l'appeler pendant 30 secondes et prend la sortie Erreur immédiatement, sans requête. Un premier succès remet le compteur à zéro.
Ce qu'il faut saisir
| Champ | Ce qui est attendu | Si vous le laissez vide |
|---|---|---|
| Instance Odoo | l'Odoo à interroger, parmi ceux déclarés dans Intégrations, Odoo | Instance par défaut, l'instance de résolution déclarée pour votre installation |
| Timeout | le délai d'attente, ramené à 8 s au maximum à l'exécution | 5 s |
| Modèle | le nom du modèle Odoo, par exemple res.partner | la sortie Erreur est prise sans qu'aucune requête ne parte |
| Méthode | la méthode à appeler, pré-remplie avec search_read | la sortie Erreur est prise sans qu'aucune requête ne parte |
| Args (JSON) | les arguments, en JSON valide | liste vide |
| Kwargs (JSON) | les options nommées, en JSON valide | aucune option |
| Variable d'une extraction | le nom sous lequel ranger la valeur lue | la ligne est ignorée |
| Chemin JSON d'une extraction | le chemin vers la valeur, par exemple 0.name | la réponse entière est rangée dans la variable |
Les boutons de la fenêtre sont Ajouter une extraction, Tester, Annuler et Sauver.
La marche à suivre
- Vérifiez que votre Odoo est raccordé, dans Intégrations, Odoo, et que l'instance y est active.
- Identifiez dans Odoo le modèle et les champs qui portent l'information voulue. Faites-vous aider par la personne qui administre votre Odoo si nécessaire.
- Posez le module Requête Odoo et reliez le nœud précédent à son entrée.
- Ouvrez-le, choisissez l'Instance Odoo et réglez le Timeout au plus court : deux à trois secondes, l'appelant patiente en ligne.
- Saisissez le Modèle et la Méthode.
- Écrivez les Args (JSON) et les Kwargs (JSON), en limitant le nombre de lignes lues avec
"limit":1quand une seule suffit. - Cliquez sur Ajouter une extraction et associez un Chemin JSON à un nom de Variable.
- Cliquez sur Tester, renseignez les variables d'essai, puis sur Lancer. Corrigez jusqu'à ce que la valeur obtenue soit la bonne.
- Cliquez sur Sauver, puis reliez OK vers la suite et Erreur vers un repli qui traite l'appel sans la donnée.
- Cliquez sur Sauver, puis sur Appliquer les modifications dans le bandeau du haut.
- Appelez votre numéro et vérifiez l'acheminement, en vous aidant d'un module Débogage qui écrit les variables extraites.
Si ça ne marche pas
La sortie Erreur est prise immédiatement, sans qu'aucune requête ne parte. Trois causes. Le Modèle ou la Méthode est vide. L'instance Odoo choisie n'existe plus ou n'est plus active. Ou le disjoncteur est ouvert, après cinq échecs consécutifs, pour trente secondes.
La requête échoue alors que le JSON me semble correct. Il doit rester valide une fois les variables remplacées, et c'est là que la plupart des erreurs se produisent. Cliquez sur Tester : l'écran affiche la requête réellement envoyée, args et kwargs après remplacement. Pour qu'une variable soit remplacée par sa valeur JSON, entourez-la de guillemets : "{{caller_e164}}".
La variable extraite reste vide alors que la réponse contient la donnée. Le chemin ne correspond pas. search_read répond une liste : commencez par 0. pour le premier élément. Une méthode qui répond un nombre seul demande au contraire un chemin vide. La colonne Valeur obtenue de l'essai signale les extractions vides.
L'essai me demande de confirmer avant de partir. La méthode demandée écrit dans Odoo au lieu de se contenter de lire. L'essai s'exécute réellement sur votre Odoo de production : ne confirmez que si vous acceptez cette écriture.
L'appel se coupe quand Odoo répond mal. La sortie Erreur n'est reliée à rien. Ce module n'a pas le repli automatique du module de résolution contact : reliez Erreur, au minimum vers l'accueil habituel.
Comment le plan d'appel se construit, expliqué en images
Voir la page Plans de numérotation