[{"data":1,"prerenderedAt":261},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fscripts-serveur-variables-environnement":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fscripts-serveur-variables-environnement":260},{"id":4,"title":5,"body":6,"description":246,"extension":247,"meta":248,"navigation":249,"path":256,"seo":257,"stem":258,"__hash__":259},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002Fscripts-serveur-variables-environnement.md","Variables d'environnement des scripts serveur",{"type":7,"value":8,"toc":238},"minimark",[9,13,17,30,35,57,61,90,93,98,101,139,142,146,153,188,198,201,204,208,234],[10,11,5],"h1",{"id":12},"variables-denvironnement-des-scripts-serveur",[14,15,16],"p",{},"Lorsqu'un script serveur appelle un service externe (passerelle de paiement, webhook, API tierce), il a souvent besoin d'une clé API ou d'un jeton. Écrire ce secret directement dans le code du script l'expose à toute personne pouvant ouvrir le script, l'exporter ou le lire via l'API.",[14,18,19,20,24,25,29],{},"La table ",[21,22,23],"strong",{},"Variables d'environnement"," (libellé non traduit) d'un script serveur permet de conserver ces secrets à part : chaque ligne associe une clé à une valeur, la valeur est chiffrée au repos, et le script la lit avec ",[26,27,28],"code",{},"frappe.env.CLE",".",[31,32,34],"h2",{"id":33},"prérequis","Prérequis",[36,37,38,50],"ul",{},[39,40,41,42,45,46,49],"li",{},"Avoir le rôle ",[21,43,44],{},"Gestionnaire de script"," (",[26,47,48],{},"Script Manager",") : il est obligatoire pour enregistrer un script serveur.",[39,51,52,53,56],{},"Les scripts serveur doivent être activés sur le bench (",[26,54,55],{},"bench set-config -g server_script_enabled 1",").",[31,58,60],{"id":59},"ajouter-une-variable-denvironnement","Ajouter une variable d'environnement",[62,63,64,67,87],"ol",{},[39,65,66],{},"Ouvrez le script serveur concerné (recherchez « Script Serveur (Python) » avec Ctrl+K).",[39,68,69,70,72,73],{},"Dans la section ",[21,71,23],{},", ajoutez une ligne à la table :\n",[36,74,75,81],{},[39,76,77,80],{},[21,78,79],{},"Clé"," : le nom de la variable ;",[39,82,83,86],{},[21,84,85],{},"Valeur"," : sa valeur (clé API, jeton, mot de passe, etc.).",[39,88,89],{},"Enregistrez le script serveur.",[14,91,92],{},"Une fois enregistrée, la valeur est chiffrée et masquée : elle n'est jamais réaffichée en clair dans le formulaire, les exports ou l'API REST. Pour la modifier, saisissez-la à nouveau dans la ligne. Supprimer une ligne, ou le script serveur lui-même, supprime la valeur chiffrée associée.",[94,95,97],"h3",{"id":96},"règles-de-nommage-des-clés","Règles de nommage des clés",[14,99,100],{},"Une clé doit :",[36,102,103,106,113,119,136],{},[39,104,105],{},"commencer par une lettre ;",[39,107,108,109,112],{},"ne contenir que des lettres, des chiffres et des tirets bas (",[26,110,111],{},"_",") ;",[39,114,115,116,112],{},"ne pas être un mot-clé Python (par exemple ",[26,117,118],{},"class",[39,120,121,122,125,126,125,129,132,133,112],{},"ne pas être un nom réservé par le bac à sable d'exécution (par exemple ",[26,123,124],{},"format",", ",[26,127,128],{},"f_code",[26,130,131],{},"co_code",", ou tout nom se terminant par ",[26,134,135],{},"__roles__",[39,137,138],{},"être unique dans le script.",[14,140,141],{},"Une clé invalide ou en doublon bloque l'enregistrement du script avec une erreur indiquant la ligne concernée.",[31,143,145],{"id":144},"lire-une-variable-dans-le-script","Lire une variable dans le script",[14,147,148,149,152],{},"Dans le code du script serveur, lisez la valeur avec ",[26,150,151],{},"frappe.env"," suivi du nom de la clé :",[154,155,160],"pre",{"className":156,"code":157,"language":158,"meta":159,"style":159},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","response = frappe.make_get_request(\n    \"https:\u002F\u002Fapi.example.com\u002Forders\",\n    headers={\"Authorization\": f\"Bearer {frappe.env.API_TOKEN}\"},\n)\n","python","",[26,161,162,170,176,182],{"__ignoreMap":159},[163,164,167],"span",{"class":165,"line":166},"line",1,[163,168,169],{},"response = frappe.make_get_request(\n",[163,171,173],{"class":165,"line":172},2,[163,174,175],{},"    \"https:\u002F\u002Fapi.example.com\u002Forders\",\n",[163,177,179],{"class":165,"line":178},3,[163,180,181],{},"    headers={\"Authorization\": f\"Bearer {frappe.env.API_TOKEN}\"},\n",[163,183,185],{"class":165,"line":184},4,[163,186,187],{},")\n",[14,189,190,193,194,197],{},[26,191,192],{},"frappe.env.API_TOKEN"," renvoie la valeur déchiffrée de la variable ",[26,195,196],{},"API_TOKEN"," définie dans ce script.",[14,199,200],{},"La lecture fonctionne pour tous les types de scripts serveur : événement de document, événement planifié, requête de permission, API et tâche de workflow. Lorsqu'une étape d'automatisation exécute un script serveur lié, ce script s'exécute avec ses propres variables.",[14,202,203],{},"Si la clé n'existe pas dans le script, ou si sa valeur chiffrée est absente ou illisible, l'exécution s'interrompt avec une erreur indiquant le nom de la variable concernée.",[31,205,207],{"id":206},"sécurité-et-limites","Sécurité et limites",[36,209,210,213,219,229],{},[39,211,212],{},"Les valeurs sont chiffrées au repos et ne sont jamais affichées en clair dans le formulaire, les exports ou l'API REST.",[39,214,215,216,218],{},"Tout code exécuté côté serveur peut néanmoins lire ces valeurs, comme pour n'importe quel champ de type Mot de passe. N'accordez les rôles permettant d'écrire des scripts, comme ",[21,217,44],{},", qu'à des utilisateurs de confiance.",[39,220,221,222,225,226,228],{},"La lecture d'une valeur par ",[26,223,224],{},"get_password()"," sur une ligne de variable est refusée ; utilisez ",[26,227,28],{}," dans le script.",[39,230,231,233],{},[26,232,151],{}," n'est disponible que dans les scripts serveur. Dans les autres contextes d'exécution de code (console système, états de type Script Report, modèles Jinja, scripts inline d'étapes d'automatisation), sa lecture déclenche une erreur indiquant que les variables d'environnement ne sont disponibles que dans les scripts serveur.",[235,236,237],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":159,"searchDepth":166,"depth":172,"links":239},[240,241,244,245],{"id":33,"depth":172,"text":34},{"id":59,"depth":172,"text":60,"children":242},[243],{"id":96,"depth":178,"text":97},{"id":144,"depth":172,"text":145},{"id":206,"depth":172,"text":207},"Stocker des identifiants dans un script serveur et les lire dans le script avec frappe.env","md",{"reviewed":249,"last_verified":250,"sources":251},true,"2026-11-04",[252,253,254,255],"dodock@develop:frappe\u002Fcore\u002Fdoctype\u002Fserver_script\u002Fserver_script.py","dodock@develop:frappe\u002Fcore\u002Fdoctype\u002Fserver_script\u002Fserver_script.json","dodock@develop:frappe\u002Fcore\u002Fdoctype\u002Fserver_script_variable\u002Fserver_script_variable.py","dodock@develop:frappe\u002Futils\u002Fsafe_exec.py","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fscripts-serveur-variables-environnement",{"title":5,"description":246},"2.next\u002F3.dodock\u002F10.developpeurs\u002Fscripts-serveur-variables-environnement","0PGHJUveacGsR8HKkZH5tUwllUjOPatMIs1KwmyuPxQ",{},1793871751093]