[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"doc-\u002Fen\u002Fdocs\u002Fpipelines\u002Fcontrole-flux":3,"docs-nav-en":536},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":530,"_id":531,"_source":532,"_file":533,"_stem":534,"_extension":535},"\u002Fen\u002Fdocs\u002Fpipelines\u002Fcontrole-flux","pipelines",false,"","Flow Control","Filters, routers, foreach loops and parallel branches to govern a pipeline's execution paths, with best practices.",{"type":11,"children":12,"toc":522},"root",[13,29,36,49,54,237,258,264,282,286,319,331,337,349,430,435,452,458,476,482],{"type":14,"tag":15,"props":16,"children":17},"element","p",{},[18,21,27],{"type":19,"value":20},"text","Beyond agents and operators, betool provides ",{"type":14,"tag":22,"props":23,"children":24},"strong",{},[25],{"type":19,"value":26},"control nodes",{"type":19,"value":28}," to structure the logic of a pipeline.",{"type":14,"tag":30,"props":31,"children":33},"h2",{"id":32},"filter",[34],{"type":19,"value":35},"Filter",{"type":14,"tag":15,"props":37,"children":38},{},[39,41,47],{"type":19,"value":40},"A ",{"type":14,"tag":42,"props":43,"children":45},"code",{"className":44},[],[46],{"type":19,"value":32},{"type":19,"value":48}," node is a deterministic gate: execution continues to downstream nodes if its conditions are satisfied, otherwise the branch stops there.",{"type":14,"tag":15,"props":50,"children":51},{},[52],{"type":19,"value":53},"Configuration:",{"type":14,"tag":55,"props":56,"children":57},"ul",{},[58,93,119],{"type":14,"tag":59,"props":60,"children":61},"li",{},[62,67,69,75,77,83,85,91],{"type":14,"tag":22,"props":63,"children":64},{},[65],{"type":19,"value":66},"Conditions",{"type":19,"value":68}," — each of the form ",{"type":14,"tag":42,"props":70,"children":72},{"className":71},[],[73],{"type":19,"value":74},"{field, operator, value}",{"type":19,"value":76},". The field is a selector into the flow (",{"type":14,"tag":42,"props":78,"children":80},{"className":79},[],[81],{"type":19,"value":82},"exchange.intent",{"type":19,"value":84},", ",{"type":14,"tag":42,"props":86,"children":88},{"className":87},[],[89],{"type":19,"value":90},"webhook.payload.type",{"type":19,"value":92},"…); the value is a string, templatable.",{"type":14,"tag":59,"props":94,"children":95},{},[96,101,103,109,111,117],{"type":14,"tag":22,"props":97,"children":98},{},[99],{"type":19,"value":100},"Combinator",{"type":19,"value":102}," — ",{"type":14,"tag":42,"props":104,"children":106},{"className":105},[],[107],{"type":19,"value":108},"AND",{"type":19,"value":110}," (default) or ",{"type":14,"tag":42,"props":112,"children":114},{"className":113},[],[115],{"type":19,"value":116},"OR",{"type":19,"value":118}," across conditions.",{"type":14,"tag":59,"props":120,"children":121},{},[122,127,128,134,136,142,143,149,150,156,157,163,164,170,171,177,178,184,185,191,193,199,200,206,207,213,214,220,222,228,229,235],{"type":14,"tag":22,"props":123,"children":124},{},[125],{"type":19,"value":126},"Operators",{"type":19,"value":102},{"type":14,"tag":42,"props":129,"children":131},{"className":130},[],[132],{"type":19,"value":133},"equals",{"type":19,"value":135}," \u002F ",{"type":14,"tag":42,"props":137,"children":139},{"className":138},[],[140],{"type":19,"value":141},"not_equals",{"type":19,"value":84},{"type":14,"tag":42,"props":144,"children":146},{"className":145},[],[147],{"type":19,"value":148},"contains",{"type":19,"value":135},{"type":14,"tag":42,"props":151,"children":153},{"className":152},[],[154],{"type":19,"value":155},"not_contains",{"type":19,"value":84},{"type":14,"tag":42,"props":158,"children":160},{"className":159},[],[161],{"type":19,"value":162},"starts_with",{"type":19,"value":84},{"type":14,"tag":42,"props":165,"children":167},{"className":166},[],[168],{"type":19,"value":169},"ends_with",{"type":19,"value":84},{"type":14,"tag":42,"props":172,"children":174},{"className":173},[],[175],{"type":19,"value":176},"regex",{"type":19,"value":84},{"type":14,"tag":42,"props":179,"children":181},{"className":180},[],[182],{"type":19,"value":183},"is_empty",{"type":19,"value":135},{"type":14,"tag":42,"props":186,"children":188},{"className":187},[],[189],{"type":19,"value":190},"is_not_empty",{"type":19,"value":192},", numeric comparisons ",{"type":14,"tag":42,"props":194,"children":196},{"className":195},[],[197],{"type":19,"value":198},"gt",{"type":19,"value":135},{"type":14,"tag":42,"props":201,"children":203},{"className":202},[],[204],{"type":19,"value":205},"gte",{"type":19,"value":135},{"type":14,"tag":42,"props":208,"children":210},{"className":209},[],[211],{"type":19,"value":212},"lt",{"type":19,"value":135},{"type":14,"tag":42,"props":215,"children":217},{"className":216},[],[218],{"type":19,"value":219},"lte",{"type":19,"value":221},", list membership ",{"type":14,"tag":42,"props":223,"children":225},{"className":224},[],[226],{"type":19,"value":227},"in",{"type":19,"value":135},{"type":14,"tag":42,"props":230,"children":232},{"className":231},[],[233],{"type":19,"value":234},"not_in",{"type":19,"value":236}," (comma-separated values). An unknown operator is refused on save.",{"type":14,"tag":15,"props":238,"children":239},{},[240,242,248,250,256],{"type":19,"value":241},"Typical use: eliminating noise before incurring downstream LLM costs — ignoring emails whose ",{"type":14,"tag":42,"props":243,"children":245},{"className":244},[],[246],{"type":19,"value":247},"from",{"type":19,"value":249}," field is on a blocklist, or webhooks where ",{"type":14,"tag":42,"props":251,"children":253},{"className":252},[],[254],{"type":19,"value":255},"type != \"order.created\"",{"type":19,"value":257},".",{"type":14,"tag":30,"props":259,"children":261},{"id":260},"router",[262],{"type":19,"value":263},"Router",{"type":14,"tag":15,"props":265,"children":266},{},[267,268,273,275,280],{"type":19,"value":40},{"type":14,"tag":42,"props":269,"children":271},{"className":270},[],[272],{"type":19,"value":260},{"type":19,"value":274}," node sends execution to one of its ",{"type":14,"tag":22,"props":276,"children":277},{},[278],{"type":19,"value":279},"named routes",{"type":19,"value":281},". The decision is made by an LLM from a routing prompt and the context you compose — to route by intent, category, or tone.",{"type":14,"tag":15,"props":283,"children":284},{},[285],{"type":19,"value":53},{"type":14,"tag":55,"props":287,"children":288},{},[289,299,309],{"type":14,"tag":59,"props":290,"children":291},{},[292,297],{"type":14,"tag":22,"props":293,"children":294},{},[295],{"type":19,"value":296},"Prompt",{"type":19,"value":298}," — the classification instruction.",{"type":14,"tag":59,"props":300,"children":301},{},[302,307],{"type":14,"tag":22,"props":303,"children":304},{},[305],{"type":19,"value":306},"Routes",{"type":19,"value":308}," — for each route name, the subgraph to execute. Each declared route must be wired, otherwise publication is refused.",{"type":14,"tag":59,"props":310,"children":311},{},[312,317],{"type":14,"tag":22,"props":313,"children":314},{},[315],{"type":19,"value":316},"Model",{"type":19,"value":318}," — you can dedicate a lightweight LLM to routing (tiering) to control cost and latency.",{"type":14,"tag":15,"props":320,"children":321},{},[322,324,329],{"type":19,"value":323},"For strictly deterministic routing (exact field value, HTTP status), prefer ",{"type":14,"tag":42,"props":325,"children":327},{"className":326},[],[328],{"type":19,"value":32},{"type":19,"value":330}," nodes laid out in parallel: the predicate is then mechanical, not interpreted.",{"type":14,"tag":30,"props":332,"children":334},{"id":333},"loop-foreach",[335],{"type":19,"value":336},"Loop (foreach)",{"type":14,"tag":15,"props":338,"children":339},{},[340,341,347],{"type":19,"value":40},{"type":14,"tag":42,"props":342,"children":344},{"className":343},[],[345],{"type":19,"value":346},"foreach",{"type":19,"value":348}," node iterates over a collection. Configuration:",{"type":14,"tag":55,"props":350,"children":351},{},[352,366,380,394,408],{"type":14,"tag":59,"props":353,"children":354},{},[355,364],{"type":14,"tag":22,"props":356,"children":357},{},[358],{"type":14,"tag":42,"props":359,"children":361},{"className":360},[],[362],{"type":19,"value":363},"items",{"type":19,"value":365}," — the selector of the list to iterate over.",{"type":14,"tag":59,"props":367,"children":368},{},[369,378],{"type":14,"tag":22,"props":370,"children":371},{},[372],{"type":14,"tag":42,"props":373,"children":375},{"className":374},[],[376],{"type":19,"value":377},"as",{"type":19,"value":379}," — the local name for the current element.",{"type":14,"tag":59,"props":381,"children":382},{},[383,392],{"type":14,"tag":22,"props":384,"children":385},{},[386],{"type":14,"tag":42,"props":387,"children":389},{"className":388},[],[390],{"type":19,"value":391},"max",{"type":19,"value":393}," — iteration cap (default 10): beyond it, the list is truncated and the event is logged.",{"type":14,"tag":59,"props":395,"children":396},{},[397,406],{"type":14,"tag":22,"props":398,"children":399},{},[400],{"type":14,"tag":42,"props":401,"children":403},{"className":402},[],[404],{"type":19,"value":405},"collect",{"type":19,"value":407}," — (optional) the key where the results of each iteration are accumulated.",{"type":14,"tag":59,"props":409,"children":410},{},[411,420,422,428],{"type":14,"tag":22,"props":412,"children":413},{},[414],{"type":14,"tag":42,"props":415,"children":417},{"className":416},[],[418],{"type":19,"value":419},"max_per_minute",{"type":19,"value":421}," — (optional) maximum pace, to space out iterations when the loop body calls a rate-limited API. ",{"type":14,"tag":42,"props":423,"children":425},{"className":424},[],[426],{"type":19,"value":427},"0",{"type":19,"value":429}," (default) = no limit.",{"type":14,"tag":15,"props":431,"children":432},{},[433],{"type":19,"value":434},"On each iteration, the internal subgraph executes against the current element.",{"type":14,"tag":436,"props":437,"children":439},"alert",{"type":438},"warning",[440],{"type":14,"tag":15,"props":441,"children":442},{},[443,445,450],{"type":19,"value":444},"The ",{"type":14,"tag":42,"props":446,"children":448},{"className":447},[],[449],{"type":19,"value":391},{"type":19,"value":451}," cap is your cost guardrail: an unexpected list of 10,000 items will never trigger 10,000 executions.",{"type":14,"tag":30,"props":453,"children":455},{"id":454},"parallel",[456],{"type":19,"value":457},"Parallel",{"type":14,"tag":15,"props":459,"children":460},{},[461,462,467,469,474],{"type":19,"value":40},{"type":14,"tag":42,"props":463,"children":465},{"className":464},[],[466],{"type":19,"value":454},{"type":19,"value":468}," node runs several subgraphs ",{"type":14,"tag":22,"props":470,"children":471},{},[472],{"type":19,"value":473},"concurrently",{"type":19,"value":475}," and waits for all of them to finish before continuing. Useful for querying independent sources (a CRM search + a calendar read) without adding up latencies.",{"type":14,"tag":30,"props":477,"children":479},{"id":478},"best-practices",[480],{"type":19,"value":481},"Best practices",{"type":14,"tag":55,"props":483,"children":484},{},[485,502,512],{"type":14,"tag":59,"props":486,"children":487},{},[488,493,495,500],{"type":14,"tag":22,"props":489,"children":490},{},[491],{"type":19,"value":492},"Filter early.",{"type":19,"value":494}," Every exchange that goes through an agent costs tokens; an upstream ",{"type":14,"tag":42,"props":496,"children":498},{"className":497},[],[499],{"type":19,"value":32},{"type":19,"value":501}," costs nothing.",{"type":14,"tag":59,"props":503,"children":504},{},[505,510],{"type":14,"tag":22,"props":506,"children":507},{},[508],{"type":19,"value":509},"Keep routing readable.",{"type":19,"value":511}," A router with 12 routes is a signal that you need two classification stages rather than condensed logic.",{"type":14,"tag":59,"props":513,"children":514},{},[515,520],{"type":14,"tag":22,"props":516,"children":517},{},[518],{"type":19,"value":519},"Limit nested loops.",{"type":19,"value":521}," A loop inside a loop multiplies costs. Prefer transforming the collection upstream instead.",{"title":7,"searchDepth":523,"depth":523,"links":524},2,[525,526,527,528,529],{"id":32,"depth":523,"text":35},{"id":260,"depth":523,"text":263},{"id":333,"depth":523,"text":336},{"id":454,"depth":523,"text":457},{"id":478,"depth":523,"text":481},"markdown","content:en:docs:3.pipelines:4.controle-flux.md","content","en\u002Fdocs\u002F3.pipelines\u002F4.controle-flux.md","en\u002Fdocs\u002F3.pipelines\u002F4.controle-flux","md",[537],{"title":538,"_path":539,"children":540},"En","\u002Fen",[541],{"title":542,"_path":543,"children":544},"Docs","\u002Fen\u002Fdocs",[545,558,586,612,625,641,654,715],{"title":546,"_path":547,"children":548},"Getting started","\u002Fen\u002Fdocs\u002Fdemarrer",[549,552,555],{"title":550,"_path":551},"Welcome","\u002Fen\u002Fdocs\u002Fdemarrer\u002Fbienvenue",{"title":553,"_path":554},"Create an account","\u002Fen\u002Fdocs\u002Fdemarrer\u002Fcreer-un-compte",{"title":556,"_path":557},"Connect an LLM key","\u002Fen\u002Fdocs\u002Fdemarrer\u002Fbrancher-llm",{"title":559,"_path":560,"children":561},"Channels","\u002Fen\u002Fdocs\u002Fcanaux",[562,565,568,571,574,577,580,583],{"title":563,"_path":564},"Channels overview","\u002Fen\u002Fdocs\u002Fcanaux\u002Fvue-densemble",{"title":566,"_path":567},"Real-time telephony","\u002Fen\u002Fdocs\u002Fcanaux\u002Ftelephone",{"title":569,"_path":570},"Email","\u002Fen\u002Fdocs\u002Fcanaux\u002Femail",{"title":572,"_path":573},"Web chat widget","\u002Fen\u002Fdocs\u002Fcanaux\u002Fchat-widget",{"title":575,"_path":576},"HTTP Webhook","\u002Fen\u002Fdocs\u002Fcanaux\u002Fwebhook",{"title":578,"_path":579},"Messaging (WhatsApp, Messenger, Telegram, Mattermost)","\u002Fen\u002Fdocs\u002Fcanaux\u002Fmessageries",{"title":581,"_path":582},"Meta Lead Ads","\u002Fen\u002Fdocs\u002Fcanaux\u002Ffacebook-leads",{"title":584,"_path":585},"Schedule (cron)","\u002Fen\u002Fdocs\u002Fcanaux\u002Fschedule",{"title":587,"_path":588,"children":589},"Pipelines","\u002Fen\u002Fdocs\u002Fpipelines",[590,593,596,599,600,603,606,609],{"title":591,"_path":592},"The Visual Editor","\u002Fen\u002Fdocs\u002Fpipelines\u002Fediteur-visuel",{"title":594,"_path":595},"AI Agents","\u002Fen\u002Fdocs\u002Fpipelines\u002Fagents",{"title":597,"_path":598},"Deterministic Operators","\u002Fen\u002Fdocs\u002Fpipelines\u002Foperateurs",{"title":8,"_path":4},{"title":601,"_path":602},"Code Steps","\u002Fen\u002Fdocs\u002Fpipelines\u002Fcode-step",{"title":604,"_path":605},"Sub-pipelines","\u002Fen\u002Fdocs\u002Fpipelines\u002Fsous-pipelines",{"title":607,"_path":608},"No-code actions","\u002Fen\u002Fdocs\u002Fpipelines\u002Factions-no-code",{"title":610,"_path":611},"Knowledge base","\u002Fen\u002Fdocs\u002Fpipelines\u002Fbase-de-connaissances",{"title":613,"_path":614,"children":615},"Supervision","\u002Fen\u002Fdocs\u002Fsupervision",[616,619,622],{"title":617,"_path":618},"Execution History","\u002Fen\u002Fdocs\u002Fsupervision\u002Fexecutions",{"title":620,"_path":621},"Credits & Metering","\u002Fen\u002Fdocs\u002Fsupervision\u002Fcredits-metering",{"title":623,"_path":624},"Benchmarks","\u002Fen\u002Fdocs\u002Fsupervision\u002Fbenchmarks",{"title":626,"_path":627,"children":628},"Security","\u002Fen\u002Fdocs\u002Fsecurite",[629,632,635,638],{"title":630,"_path":631},"Security principles","\u002Fen\u002Fdocs\u002Fsecurite\u002Fprincipes",{"title":633,"_path":634},"Strict multi-tenancy","\u002Fen\u002Fdocs\u002Fsecurite\u002Fmulti-tenant",{"title":636,"_path":637},"GDPR audit & access log","\u002Fen\u002Fdocs\u002Fsecurite\u002Faudit-rgpd",{"title":639,"_path":640},"Sovereign deployment","\u002Fen\u002Fdocs\u002Fsecurite\u002Fdeploiement-souverain",{"title":642,"_path":643,"children":644},"Developers","\u002Fen\u002Fdocs\u002Fdeveloppeurs",[645,648,651],{"title":646,"_path":647},"Admin API","\u002Fen\u002Fdocs\u002Fdeveloppeurs\u002Fapi-admin",{"title":649,"_path":650},"Outbound webhooks","\u002Fen\u002Fdocs\u002Fdeveloppeurs\u002Fwebhooks-sortants",{"title":652,"_path":653},"Drive betool from Claude (MCP)","\u002Fen\u002Fdocs\u002Fdeveloppeurs\u002Fmcp",{"title":655,"_path":656,"children":657},"Integrations","\u002Fen\u002Fdocs\u002Fintegrations",[658,661,664,667,670,673,676,679,682,685,688,691,694,697,700,703,706,709,712],{"title":659,"_path":660},"Integrations overview","\u002Fen\u002Fdocs\u002Fintegrations\u002Fvue-densemble",{"title":662,"_path":663},"Stripe","\u002Fen\u002Fdocs\u002Fintegrations\u002Fstripe",{"title":665,"_path":666},"GitHub","\u002Fen\u002Fdocs\u002Fintegrations\u002Fgithub",{"title":668,"_path":669},"Google","\u002Fen\u002Fdocs\u002Fintegrations\u002Fgoogle",{"title":671,"_path":672},"LinkedIn Ads","\u002Fen\u002Fdocs\u002Fintegrations\u002Flinkedin-ads",{"title":674,"_path":675},"Kavkom","\u002Fen\u002Fdocs\u002Fintegrations\u002Fkavkom",{"title":677,"_path":678},"Jira","\u002Fen\u002Fdocs\u002Fintegrations\u002Fjira",{"title":680,"_path":681},"Slack","\u002Fen\u002Fdocs\u002Fintegrations\u002Fslack",{"title":683,"_path":684},"SMS","\u002Fen\u002Fdocs\u002Fintegrations\u002Fsms",{"title":686,"_path":687},"Enable Banking (open banking)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fenable-banking",{"title":689,"_path":690},"CRM, marketing & productivity","\u002Fen\u002Fdocs\u002Fintegrations\u002Fcrm-marketing",{"title":692,"_path":693},"HeyGen (video)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fheygen",{"title":695,"_path":696},"La Poste","\u002Fen\u002Fdocs\u002Fintegrations\u002Fla-poste",{"title":698,"_path":699},"Industry CRM (beTool Application, Qhare)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fcrm-metier",{"title":701,"_path":702},"Mitti (field inspections)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fmitti",{"title":704,"_path":705},"Meta (Messenger, Pages, Meta Ads)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fmeta",{"title":707,"_path":708},"Onoff Business (Beta)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fonoff",{"title":710,"_path":711},"Smart Life \u002F Tuya (connected devices)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fsmart-life",{"title":713,"_path":714},"beTool products (Desktop, Kiosk, Terminal)","\u002Fen\u002Fdocs\u002Fintegrations\u002Fproduits-betool",{"title":716,"_path":717,"children":718},"Use cases","\u002Fen\u002Fdocs\u002Fcas-usage",[719,722,725,728,731,734],{"title":720,"_path":721},"Typical business agents","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fvue-densemble",{"title":723,"_path":724},"CFO IA","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fcfo-ia",{"title":726,"_path":727},"COO IA","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fcoo-ia",{"title":729,"_path":730},"CTO IA","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fcto-ia",{"title":732,"_path":733},"Product Manager IA","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fproduct-manager-ia",{"title":735,"_path":736},"Personal assistant","\u002Fen\u002Fdocs\u002Fcas-usage\u002Fassistant-personnel"]