[{"data":1,"prerenderedAt":829},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fdevelopper-avec-flow":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fdevelopper-avec-flow":828},{"id":4,"title":5,"body":6,"description":812,"extension":813,"meta":814,"navigation":815,"path":824,"seo":825,"stem":826,"__hash__":827},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002Fdevelopper-avec-flow.md","Développer avec Flow",{"type":7,"value":8,"toc":802},"minimark",[9,13,27,32,113,138,142,266,270,280,738,742,745,780,789,793],[10,11,5],"h1",{"id":12},"développer-avec-flow",[14,15,16,17,21,22,26],"p",{},"Le module Python ",[18,19,20],"code",{},"frappe.flow"," (nom de module : ",[23,24,25],"strong",{},"Flow",") intègre l'assistant Flow au framework. Les autres applications peuvent s'appuyer sur lui pour définir des agents, des compétences, des outils et des déclencheurs en Python.",[28,29,31],"h2",{"id":30},"organisation-du-module","Organisation du module",[33,34,35,42,52,58,68,74,80,89],"ul",{},[36,37,38,41],"li",{},[18,39,40],{},"frappe\u002Fflow\u002Fdoctype\u002F"," : les DocTypes de Flow (agents, sessions, exécutions, modèles, fournisseurs, compétences, outils, déclencheurs, connaissances) ;",[36,43,44,47,48,51],{},[18,45,46],{},"frappe\u002Fflow\u002Fapi\u002Fapi.py"," : les méthodes whitelistées appelées par la page ",[18,49,50],{},"\u002Fflow"," ;",[36,53,54,57],{},[18,55,56],{},"frappe\u002Fflow\u002Flib\u002F"," : agent, modèle, session, outils et résolution ;",[36,59,60,63,64,67],{},[18,61,62],{},"frappe\u002Fflow\u002Ftriggers\u002Ftriggers.py"," et ",[18,65,66],{},"frappe\u002Fflow\u002Flib\u002Ftrigger.py"," : exécution et synchronisation des déclencheurs sur les événements de documents ;",[36,69,70,73],{},[18,71,72],{},"frappe\u002Fflow\u002Fknowledge\u002F"," : ingestion, découpage, vectorisation et interrogation des bases de connaissances ;",[36,75,76,79],{},[18,77,78],{},"frappe\u002Fflow\u002Fdaemon\u002F"," : cycle de vie du serveur qui exécute les agents ;",[36,81,82,63,85,88],{},[18,83,84],{},"frappe\u002Fflow\u002Flauncher.py",[18,86,87],{},"frappe\u002Fpublic\u002Fjs\u002Fflow_launcher.bundle.js"," : injection du lanceur Flow dans les pages HTML servies par le framework ;",[36,90,91,94,95,97,98,101,102,105,106,109,110,112],{},[18,92,93],{},"frappe\u002Fwww\u002Fflow\u002F"," : la page ",[18,96,50],{},". C'est une application Vite (paquet ",[18,99,100],{},"flow\u002F",", code Vue dans ",[18,103,104],{},"flow\u002Ffrontend\u002F",") construite par ",[18,107,108],{},"bench build"," avec le reste des assets du framework. Un échec de ce build fait échouer ",[18,111,108],{},".",[14,114,115,116,119,120,123,124,127,128,119,131,63,134,137],{},"Les hooks de Flow (",[18,117,118],{},"after_install",", ",[18,121,122],{},"after_migrate","…) sont déclarés dans le ",[18,125,126],{},"hooks.py"," du framework. Par exemple, ",[18,129,130],{},"frappe.flow.lib.agent.sync_agents",[18,132,133],{},"sync_tools",[18,135,136],{},"frappe.flow.lib.trigger.sync_triggers"," synchronisent après chaque migration les agents, outils et déclencheurs définis en Python par les applications.",[28,139,141],{"id":140},"doctypes","DocTypes",[143,144,145,158],"table",{},[146,147,148],"thead",{},[149,150,151,155],"tr",{},[152,153,154],"th",{},"DocType",[152,156,157],{},"Rôle",[159,160,161,170,178,186,194,202,210,218,226,234,242,250,258],"tbody",{},[149,162,163,167],{},[164,165,166],"td",{},"Flow Provider",[164,168,169],{},"fournisseur de modèles",[149,171,172,175],{},[164,173,174],{},"Flow Model",[164,176,177],{},"modèle disponible dans les conversations",[149,179,180,183],{},[164,181,182],{},"Flow Agent",[164,184,185],{},"assistant (modèle, compétences, outils, sous-agents, bases de connaissances, mémoires)",[149,187,188,191],{},[164,189,190],{},"Flow Agent Skill \u002F Flow Agent Tool \u002F Flow Agent Sub Agent \u002F Flow Agent Knowledge Base \u002F Flow Agent Memory",[164,192,193],{},"éléments rattachés à un agent",[149,195,196,199],{},[164,197,198],{},"Flow Skill",[164,200,201],{},"compétence, définissable en Python par une application",[149,203,204,207],{},[164,205,206],{},"Flow Tool",[164,208,209],{},"outil, définissable en Python par une application",[149,211,212,215],{},[164,213,214],{},"Flow Trigger",[164,216,217],{},"déclencheur sur les événements de documents",[149,219,220,223],{},[164,221,222],{},"Flow Knowledge Base \u002F Flow Knowledge Source \u002F Flow Knowledge Chunk \u002F Flow Knowledge Settings",[164,224,225],{},"bases de connaissances, leurs sources et leur configuration",[149,227,228,231],{},[164,229,230],{},"Flow Settings",[164,232,233],{},"réglages de Flow",[149,235,236,239],{},[164,237,238],{},"Flow Session",[164,240,241],{},"une conversation",[149,243,244,247],{},[164,245,246],{},"Flow Session Message",[164,248,249],{},"un message d'une conversation",[149,251,252,255],{},[164,253,254],{},"Flow Session Attachment",[164,256,257],{},"une pièce jointe d'une conversation",[149,259,260,263],{},[164,261,262],{},"Flow Run",[164,264,265],{},"une exécution de l'agent dans une conversation",[28,267,269],{"id":268},"api-whitelistée","API whitelistée",[14,271,272,273,275,276,279],{},"La page ",[18,274,50],{}," appelle les méthodes ",[18,277,278],{},"frappe.flow.api.*"," suivantes :",[143,281,282,294],{},[146,283,284],{},[149,285,286,289,292],{},[152,287,288],{},"Méthode",[152,290,291],{},"Paramètres",[152,293,157],{},[159,295,296,309,330,344,365,394,408,428,448,462,476,493,507,526,543,559,573,597,611,634,658,674,695,718],{},[149,297,298,303,306],{},[164,299,300],{},[18,301,302],{},"boot",[164,304,305],{},"—",[164,307,308],{},"données initiales de la page, dont la liste des modèles",[149,310,311,316,327],{},[164,312,313],{},[18,314,315],{},"list_sessions",[164,317,318,119,321,119,324],{},[18,319,320],{},"limit",[18,322,323],{},"query",[18,325,326],{},"before",[164,328,329],{},"liste paginée des conversations, filtrable par titre",[149,331,332,337,341],{},[164,333,334],{},[18,335,336],{},"session",[164,338,339],{},[18,340,336],{},[164,342,343],{},"détail d'une conversation",[149,345,346,351,362],{},[164,347,348],{},[18,349,350],{},"create_session",[164,352,353,119,356,119,359],{},[18,354,355],{},"agent",[18,357,358],{},"model",[18,360,361],{},"auto_approve",[164,363,364],{},"création d'une conversation",[149,366,367,372,391],{},[164,368,369],{},[18,370,371],{},"entries",[164,373,374,119,376,119,379,382,383,386,387,390],{},[18,375,336],{},[18,377,378],{},"since",[18,380,381],{},"path"," (",[18,384,385],{},"active"," ou ",[18,388,389],{},"all",")",[164,392,393],{},"événements du journal d'une conversation",[149,395,396,401,405],{},[164,397,398],{},[18,399,400],{},"sync_session",[164,402,403],{},[18,404,336],{},[164,406,407],{},"resynchronisation d'une conversation",[149,409,410,415,425],{},[164,411,412],{},[18,413,414],{},"run",[164,416,417,119,419,119,422],{},[18,418,336],{},[18,420,421],{},"message",[18,423,424],{},"attachments",[164,426,427],{},"envoi d'un message",[149,429,430,435,445],{},[164,431,432],{},[18,433,434],{},"resume",[164,436,437,119,439,119,442],{},[18,438,336],{},[18,440,441],{},"answers",[18,443,444],{},"approval_seq",[164,446,447],{},"reprise après une pause d'approbation",[149,449,450,455,459],{},[164,451,452],{},[18,453,454],{},"abort",[164,456,457],{},[18,458,336],{},[164,460,461],{},"interruption d'une exécution en cours",[149,463,464,469,473],{},[164,465,466],{},[18,467,468],{},"cancel_pending",[164,470,471],{},[18,472,336],{},[164,474,475],{},"annulation des actions en attente",[149,477,478,483,490],{},[164,479,480],{},[18,481,482],{},"rewind",[164,484,485,119,487],{},[18,486,336],{},[18,488,489],{},"target_seq",[164,491,492],{},"retour arrière dans la conversation",[149,494,495,500,504],{},[164,496,497],{},[18,498,499],{},"compact",[164,501,502],{},[18,503,336],{},[164,505,506],{},"compaction de l'historique",[149,508,509,514,523],{},[164,510,511],{},[18,512,513],{},"set_model",[164,515,516,119,518,119,520],{},[18,517,336],{},[18,519,358],{},[18,521,522],{},"reasoning_effort",[164,524,525],{},"changement de modèle de la conversation",[149,527,528,533,540],{},[164,529,530],{},[18,531,532],{},"set_title",[164,534,535,119,537],{},[18,536,336],{},[18,538,539],{},"title",[164,541,542],{},"renommage de la conversation",[149,544,545,550,556],{},[164,546,547],{},[18,548,549],{},"set_auto_approve",[164,551,552,119,554],{},[18,553,336],{},[18,555,361],{},[164,557,558],{},"mode d'approbation automatique",[149,560,561,566,570],{},[164,562,563],{},[18,564,565],{},"delete_session",[164,567,568],{},[18,569,336],{},[164,571,572],{},"suppression de la conversation",[149,574,575,587,594],{},[164,576,577,580,581,580,584],{},[18,578,579],{},"list_shares"," \u002F ",[18,582,583],{},"share_session",[18,585,586],{},"unshare_session",[164,588,589,119,591],{},[18,590,336],{},[18,592,593],{},"user",[164,595,596],{},"partage d'une conversation avec un utilisateur",[149,598,599,604,608],{},[164,600,601],{},[18,602,603],{},"find_users",[164,605,606],{},[18,607,323],{},[164,609,610],{},"recherche d'utilisateurs Flow par nom ou e-mail",[149,612,613,618,631],{},[164,614,615],{},[18,616,617],{},"set_general_access",[164,619,620,119,622,382,625,386,628,390],{},[18,621,336],{},[18,623,624],{},"access",[18,626,627],{},"Restricted",[18,629,630],{},"Everyone",[164,632,633],{},"accès général à la conversation",[149,635,636,644,655],{},[164,637,638,580,641],{},[18,639,640],{},"attach_file",[18,642,643],{},"cleanup_attachments",[164,645,646,119,649,580,651,119,653],{},[18,647,648],{},"file",[18,650,358],{},[18,652,424],{},[18,654,336],{},[164,656,657],{},"préparation et nettoyage des pièces jointes (fichiers privés)",[149,659,660,665,671],{},[164,661,662],{},[18,663,664],{},"skills",[164,666,667,386,669],{},[18,668,336],{},[18,670,355],{},[164,672,673],{},"compétences actives d'une conversation, ou aperçu pour un agent",[149,675,676,681,692],{},[164,677,678],{},[18,679,680],{},"submit_feedback",[164,682,683,119,686,119,689],{},[18,684,685],{},"run_name",[18,687,688],{},"rating",[18,690,691],{},"comment",[164,693,694],{},"évaluation d'une exécution",[149,696,697,702,715],{},[164,698,699],{},[18,700,701],{},"screen_result",[164,703,704,119,706,119,709,119,712],{},[18,705,336],{},[18,707,708],{},"token",[18,710,711],{},"screen",[18,713,714],{},"error",[164,716,717],{},"réponse du panneau à une lecture d'écran demandée par l'agent",[149,719,720,725,735],{},[164,721,722],{},[18,723,724],{},"save_secret",[164,726,727,119,729,119,732],{},[18,728,336],{},[18,730,731],{},"call_id",[18,733,734],{},"password",[164,736,737],{},"enregistrement d'un secret saisi par l'utilisateur dans une carte de demande",[28,739,741],{"id":740},"temps-réel","Temps réel",[14,743,744],{},"Les événements d'une conversation sont diffusés en temps réel sur Socket.io, dans le namespace nommé d'après le site :",[33,746,747,762],{},[36,748,749,750,753,754,757,758,761],{},"le client envoie ",[18,751,752],{},"flow:subscribe"," avec le nom de la session et reçoit un acquittement ",[18,755,756],{},"{ subscribed: true }"," ; ",[18,759,760],{},"flow:unsubscribe"," met fin à l'abonnement ;",[36,763,764,765,768,769,772,773,63,776,779],{},"le serveur publie ",[18,766,767],{},"flow:event"," (un événement du journal portant ",[18,770,771],{},"session_id","), ainsi que ",[18,774,775],{},"flow:resync",[18,777,778],{},"flow:resubscribe"," (demande de réabonnement, notamment après une vérification d'accès refusée par le relais).",[14,781,782,783,63,786,112],{},"Le relais est assuré côté serveur par ",[18,784,785],{},"frappe\u002Frealtime\u002Fflow_handlers.py",[18,787,788],{},"realtime\u002Fflow_handlers.js",[28,790,792],{"id":791},"le-lanceur-flow-dans-le-desk","Le lanceur Flow dans le Desk",[14,794,795,797,798,801],{},[18,796,84],{}," injecte le script ",[18,799,800],{},"flow_launcher.bundle.js"," dans les pages HTML servies par le framework. Ce script, écrit en JavaScript simple dans un shadow root, ajoute l'icône et le panneau du lanceur sans dépendre du code du Desk.",{"title":803,"searchDepth":804,"depth":805,"links":806},"",1,2,[807,808,809,810,811],{"id":30,"depth":805,"text":31},{"id":140,"depth":805,"text":141},{"id":268,"depth":805,"text":269},{"id":740,"depth":805,"text":741},{"id":791,"depth":805,"text":792},"Référence développeur du module frappe.flow : DocTypes, API whitelistée, événements temps réel et intégration de la page \u002Fflow.","md",{"reviewed":815,"last_verified":816,"sources":817},true,"2026-11-03",[818,819,820,821,822,823],"dodock@develop:frappe\u002Fflow\u002Fapi\u002Fapi.py","dodock@develop:frappe\u002Fflow\u002Fdoctype","dodock@develop:frappe\u002Fhooks.py","dodock@develop:frappe\u002Frealtime\u002Fflow_handlers.py","dodock@develop:realtime\u002Fflow_handlers.js","dodock@develop:esbuild\u002Fesbuild.js","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fdevelopper-avec-flow",{"title":5,"description":812},"2.next\u002F3.dodock\u002F10.developpeurs\u002Fdevelopper-avec-flow","w7UliId4h1BJhDDlbnWKQSlu-TwOxCN9lQEAGnv3GHQ",{},1793871743623]