-
第5章 变量、上下文与数据流转
第5章 变量、上下文与数据流转
5.1 变量:流程中的“临时备忘录”
什么是变量?
你去超市购物时会带一张“购物清单”,记下需要买的东西。变量就像这张“清单”,用来临时存储流程中产生的数据(如订单号、用户手机号、计算结果),供后续节点使用。
为什么需要变量?
没有变量的流程就像“失忆的机器人”:前一个节点读取了订单金额,下一个节点需要用这个金额时,却“不记得”是多少。变量让流程能“记住”中间结果,实现节点间的数据传递。
5.1.1 变量的3种类型:各有各的“分工”
类型 | 含义 | 实例 | 生命周期 |
---|---|---|---|
系统变量 | COZE内置的“通用数据” | {{timestamp}}(当前时间戳)、{{random}}(随机数) | 整个流程执行期间有效 |
自定义变量 | 用户手动定义的“业务数据” | {{order_id}}(订单号)、{{user_phone}}(用户手机号) | 从定义节点到流程结束有效 |
节点输出变量 | 节点自动生成的“结果数据” | {{excel_read.data}}(Excel读取节点的输出) | 节点执行后生成,流程结束失效 |
实例:自定义变量的创建与使用
1.创建变量:在“数据处理”节点中,提取用户手机号并命名为{{user_phone}};
2.使用变量:在后续“发送短信”节点中,内容填写为"您的验证码是1234,发送至{{user_phone}}";
3.执行效果:流程运行时,{{user_phone}}会自动替换为实际值(如“13800138000”)。
5.1.2 变量命名:别让“清单”乱糟糟
变量名就像清单上的“物品名称”,起得不好会导致自己都看不懂。记住3个规则:
1.用英文+下划线:如user_name、order_amount(不支持中文和空格);
2.见名知意:避免a1、temp这种模糊的名字,user_phone比phone1更清晰;
3.区分大小写:UserPhone和user_phone是两个不同变量(建议全小写,用下划线分隔)。
反面例子:
混乱命名:data1、x、aaa(3天后你可能忘了它们存的是什么);
使用中文:{{用户手机号}}(部分节点可能不支持中文变量名,导致报错)。
5.2 上下文:变量的“生存环境”
什么是上下文?
变量不是“随处可见”的。比如你在卧室的备忘录,客厅里看不到;同理,上下文就是变量的“活动范围”,决定了哪些节点能“看到”哪些变量。
全局上下文 vs 局部上下文
全局上下文:整个流程都能访问的变量(如{{order_id}}),相当于“贴在冰箱上的全家购物清单”;
局部上下文:只有特定节点或分支能访问的变量(如循环中的{{current_item}}),相当于“你自己口袋里的私人清单”。
实例:循环节点的局部变量
在“批量发送短信”流程中:
1.循环节点遍历会员列表{{member_list}},每次循环生成局部变量{{current_member}}(当前会员信息);
2.循环体内的“发送短信”节点可以使用{{current_member.phone}};
3.循环结束后,{{current_member}}变量自动“消失”,后续节点无法访问(避免变量污染)。
5.2.1 上下文传递:让数据“流动”起来
流程中的数据就像“接力赛”,需要从一个节点“传给”下一个节点。上下文就是“接力棒”,确保变量在节点间无缝传递。
数据传递的3种方式:
1.自动传递:大部分节点的输出变量会自动进入全局上下文,如“Webhook触发器”的{{body}}变量;
2.手动映射:在节点属性面板中,将“输入参数”绑定到已有变量(如“发送邮件”节点的“收件人”绑定{{user_email}});
3.显式赋值:用“数据处理”节点的“变量赋值”功能,创建新变量(如{{total_amount}} = {{price}} * {{quantity}})。
实例:手动映射变量
“发送邮件”节点配置:
收件人:{{user_email}}(从全局上下文读取用户邮箱)
邮件标题:"订单{{order_id}}已发货"(拼接订单号变量)
邮件内容:"金额:{{amount}}元,物流单号:{{logistics_id}}"(同时使用多个变量)
5.3 数据流转实战:从“零散数据”到“完整流程”
5.3.1 简单流转:单变量传递
场景:用户提交表单后,自动发送包含表单ID的确认短信。
流程步骤:
【表单提交触发器】→【提取表单ID】→【发送短信】
1.触发器输出:{{form_data.id}}(表单提交后,系统自动生成的表单ID);
2.提取变量:用“数据处理”节点将{{form_data.id}}赋值给{{form_id}};
3.发送短信:内容为"您的表单已提交,ID:{{form_id}},请保存备查"。
5.3.2 复杂流转:多变量计算与合并
场景:计算订单总金额(商品金额+运费-优惠券),并同步到数据库。
流程步骤:
【Webhook触发器(接收订单数据)】→【数据处理(计算总金额)】→【数据库写入】
1.触发器输出变量:
o{{goods_amount}}(商品金额,如199元)
o{{freight}}(运费,如10元)
o{{coupon}}(优惠券金额,如20元)
2.数据处理节点:
o计算公式:{{total_amount}} = {{goods_amount}} + {{freight}} - {{coupon}}
o结果:199 + 10 - 20 = 189 → {{total_amount}} = 189
3.数据库写入节点:
oSQL语句:UPDATE orders SET total_amount = {{total_amount}} WHERE id = {{order_id}}
5.3.3 数组与对象:处理“多条数据”
场景:从Excel读取商品列表,筛选出价格>100元的商品,生成促销清单。
原始数据(Excel读取节点输出{{goods_list}}):
json
[
{"name": "T恤", "price": 89},
{"name": "运动鞋", "price": 299},
{"name": "背包", "price": 159}
]
处理步骤:
1.循环遍历数组:用“循环”节点遍历{{goods_list}},每次循环生成{{current_goods}};
2.条件筛选:循环体内添加“条件分支”节点,判断{{current_goods.price}} > 100;
3.收集结果:满足条件的商品,用“数据处理”节点的“数组添加”功能,将{{current_goods.name}}加入{{promotion_list}}数组;
4.最终输出:{{promotion_list}} = ["运动鞋", "背包"]。
5.4 避坑指南:别让数据“迷路”
5.4.1 变量未定义:“我要的变量去哪了?”
问题:节点引用了一个不存在的变量(如{{user_name}}拼写成{{username}}),导致流程报错。
解决办法:
在COZE Studio中,变量名会自动高亮(未定义的变量显示红色);
用“调试模式”运行流程,查看上下文面板中的变量列表,确认变量是否存在。
5.4.2 变量类型错误:“数字”和“文本”的误会
问题:把文本类型的数字(如"100")当成数字类型使用,导致计算错误(如"100" + 50 = "10050",而不是150)。
解决办法:
用“数据处理”节点的“类型转换”功能,将文本转为数字({{amount}} = toNumber({{text_amount}}));
检查变量来源:表单输入默认是文本类型,如需计算需提前转换。
5.4.3 上下文覆盖:“后到的变量把前面的冲掉了”
问题:两个节点定义了同名变量(如都叫{{temp}}),后执行的节点会覆盖前面的变量值。
解决办法:
变量名加前缀区分(如{{step1_temp}}、{{step2_temp}});
局部变量优先:循环或分支内的同名变量不会影响全局上下文。
本章小结
变量和上下文是工作流的“数据血管”,让流程从“机械执行步骤”变成“智能处理信息”。本章你学会了:
变量:用系统变量、自定义变量、节点输出变量存储临时数据,命名要清晰易懂;
上下文:全局变量在整个流程有效,局部变量只在特定节点内有效,避免变量污染;
数据流转:通过自动传递、手动映射、显式赋值实现节点间数据传递,处理数组时用循环和条件筛选。
本站原创,转载请注明出处:https://www.xin3721.com/ArticlePrograme/robot/52947.html