做电商自动化,条件判断是绕不开的。平台不同、状态不同、操作不同,判断指令一层套一层,流程越写越长,缩进深到自己都看不清。我以前写过一个售后处理流程,根据退款原因、金额、平台三个维度来决定是自动同意还是转人工,用影刀内置的判断指令嵌套了四层,后来加一条新规则,光找应该插在哪个“否”分支里就找了十分钟。更头疼的是,运营过两天又说规则变了,又得小心翼翼地改嵌套。
后来我把这块逻辑整个搬到了Python脚本里,用字典加函数的方式替代了多层的“判断”指令。影刀RPA流程里只保留一个“执行Python脚本”,所有复杂的条件分支全在Python里处理,返回一个决策结果。主流程瞬间清爽,改规则也只改Python脚本里的字典,不用在影刀界面的分支线里绕来绕去。我也是非技术背景,这个方法不难,核心就是用字典做“条件→动作”的映射。这篇文章就详细讲这种模式,给厌恶深层嵌套的你一条出路。
用Python替代复杂条件判断的优势
影刀的“判断”指令对于简单的是/否判断很方便,但当条件组合多起来,比如“平台是拼多多且退款原因包含'不喜欢'且金额<50,或者平台是淘宝且退款原因是'七天无理由'”,用图形化的嵌套判断来表达就很吃力,逻辑关系稍复杂就容易出错。
换成Python的if-elif-else,逻辑层次清晰,所有条件平铺直叙,维护起来就像看一段文字说明。更进一步,如果规则多到十几条,连if-elif也会变得冗长,这时用字典映射能把它变成一张表,规则和动作一目了然。
字典映射的思路: 把每条规则表示为一个条件函数,和一个对应的动作函数或值。用循环遍历所有规则,找到第一个满足条件的就执行对应动作并跳出。这其实就是前面流程设计模式文章里提到的“责任链”的简化版,只不过用Python内置的数据结构实现,不涉及影刀子流程嵌套。
实战场景:多平台退款自动决策引擎
假设我们需要根据退款信息决定处理方式,规则如下:
- 如果退款金额大于200元,不管什么原因,一律转人工。
2. 如果退款原因为“质量问题”或“假货”,转人工并紧急告警。
- 如果平台是拼多多且退款原因包含“不喜欢”且金额小于30元,自动同意退款。
- 如果平台是淘宝且退款原因是“七天无理由”,自动同意退款。
- 其他情况转人工。
用影刀判断指令实现,至少三层嵌套。用Python,可以写成规则列表,由引擎处理。
在影刀里调用Python规则引擎的完整代码
# 输入变量映射:
# refund_info: 退款信息字典,包含 {'平台':'拼多多', '退款原因':'不喜欢/拍错', '金额':25.5, '退款类型':'仅退款'}

# 定义规则处理动作
def action_auto_agree(info):
return "自动同意", "匹配自动退款规则"

def action_manual(info):
return "转人工", "未匹配自动规则"
def action_manual_alert(info):
return "转人工", "质量问题或假货,需紧急处理"
# 规则列表,每个规则是一个字典,包含条件函数和动作函数
rules = [
{
'condition': lambda info: info.get('金额', 0) > 200,
'action': action_manual,
'reason': '金额超过200元'
},
{
'condition': lambda info: any(w in info.get('退款原因','') for w in ['质量问题','假货']),
'action': action_manual_alert,
'reason': '涉及质量问题或假货'
},
{
'condition': lambda info: info.get('平台') == '拼多多' and '不喜欢' in info.get('退款原因','') and info.get('金额',0) < 30,
'action': action_auto_agree,
'reason': '拼多多不喜欢原因且金额<30'
},
{
'condition': lambda info: info.get('平台') == '淘宝' and '七天无理由' in info.get('退款原因',''),

'action': action_auto_agree,
'reason': '淘宝七天无理由'
}
]
# 规则引擎:遍历规则,返回第一个匹配的决策
decision = "转人工"
decision_reason = "未匹配任何规则"
for rule in rules:
if rule['condition'](refund_info):
decision, decision_reason = rule['action'](refund_info)
# 可附带规则原因
break
# 输出变量:decision, decision_reason
对非技术背景的解释:
rules列表就像一个Excel表格,每一行是一条规则。condition是条件,lambda后面是判断逻辑,用info代表传入的退款信息。action是满足条件后执行的动作函数,返回决策结果和原因。- 引擎从上到下逐条检查,命中的第一条就执行并停止。
如果你不想用lambda函数,也可以用更直白的写法,把条件写成一个单独的函数,然后在规则里引用。比如:
def rule_pdd_small_amount(info):
return info.get('平台') == '拼多多' and '不喜欢' in info.get('退款原因','') and info.get('金额',0) < 30
rules = [
{'condition': rule_pdd_small_amount, 'action': action_auto_agree, 'reason': '拼多多不喜欢且金额<30'},
...
]
对于刚接触Python的运营同学,这种写法比lambda更容易理解,规则函数名本身也是文档。
在影刀流程中如何使用这个引擎
- 在采集到一条退款单的信息后,将这些信息拼成一个影刀字典变量(或者直接用Python脚本块的输入变量映射,把几个独立变量传入Python后在代码里拼成字典)。
- 拖入“执行Python脚本”,把规则引擎代码放进去,输入影刀的退款信息变量,输出
decision和decision_reason。 - 在主流程里,根据
decision的值用一个简单的“判断”指令来决定后续动作:如果等于“自动同意”,走自动同意子流程;如果等于“转人工”,记录并跳过。
这样,主流程里不再有任何复杂的业务判断嵌套,只有一个“判断决策结果等于什么”的单一条件。所有业务规则的复杂度都被封装在Python脚本里。运营要加一条新规则,只需要在Python的 rules 列表里添加一个元素,不需要动影刀的流程结构。这对于非技术背景的维护者也更安全,因为修改字典比在图形化界面里拖动分支线出错概率低得多。
更进一步:用Excel配置规则,Python动态读取
规则少的时候写在Python代码里没问题,但运营经常需要调整规则,每次都改Python脚本还是麻烦。终极方案是规则完全由Excel配置,Python动态加载。结合前面配置驱动模式文章,这很容易实现。
Excel规则表结构:
| 平台 | 退款原因包含 | 金额上限 | 动作 | 优先级 |
|---|---|---|---|---|
| 拼多多 | 不喜欢 | 30 | 自动同意 | 1 |
| 淘宝 | 七天无理由 | 100 | 自动同意 | 2 |
| 所有 | 质量问题,假货 | 999999 | 转人工并告警 | 0 |
| 所有 | 200 | 转人工 | 0 |
在Python里读取这个Excel(用Pandas或影刀数据表格变量传入),每一行构造一个规则,添加到 rules 列表中。优先级的处理:按优先级排序,优先级高的规则先判断。这样运营就可以自己维护规则Excel,完全不用打开影刀编辑器。
# 从配置表动态生成规则(简化示例)
import pandas as pd
# df_rules 是影刀传入的规则数据表格
rules = []
for _, row in df_rules.iterrows():
platform = row['平台']
reasons = [r.strip() for r in str(row['退款原因包含']).split(',') if r.strip()]
amount_limit = row['金额上限']
action_type = row['动作']
def make_condition(p, r_list, limit):
def condition(info):
if p != '所有' and info.get('平台') != p:
return False
if r_list:
if not any(r in info.get('退款原因','') for r in r_list):
return False
if limit and info.get('金额', 0) > limit:
return False
return True
return condition
def make_action(act):
if act == '自动同意':
return lambda info: ("自动同意", "配置规则")
elif act == '转人工并告警':
return lambda info: ("转人工", "告警")
else:
return lambda info: ("转人工", "配置规则")
rules.append({
'condition': make_condition(platform, reasons, amount_limit),
'action': make_action(action_type),
'priority': row.get('优先级', 10)
})
# 按优先级排序
rules.sort(key=lambda r: r['priority'])
这样,整个退款决策逻辑就成了一个可配置的子系统。运营增加平台、修改阈值,都不需要懂Python,只改Excel即可。
不止退款:字典映射模式的其他应用场景
这种“用Python字典或列表替代复杂条件判断”的模式,在电商自动化里还有很多用武之地:
- 多平台订单状态映射:拼多多的“待发货”=淘宝的“等待发货”=抖音的“待处理”,统一为内部状态码,一个字典完成转换。
- 动态XPath选择:根据商品所在平台,映射出对应的XPath。
xpath_map = {'拼多多':'//h3', '淘宝':'//h1[@class="title"]'},一句代码取出。 - 错误处理策略:不同错误信息映射到不同的处理函数,类似前面责任链的简化版。
掌握这个模式后,你会发现很多原本需要在影刀界面里用大量“判断”指令堆出来的分支逻辑,都可以浓缩到一个Python脚本里,流程的简洁性和可维护性上一个大台阶。
常见问题速查
| 问题现象 | 原因 | 解决方法 |
|---|---|---|
| 规则没生效,全部走了默认 | 条件函数有Bug,或字典传参有问题 | 在Python里print(info)看传入的数据,检查条件逻辑 |
| 修改Excel规则后流程没变化 | 流程未重新读取Excel | 确保每次执行都读取配置,不缓存 |
| 规则变多后变慢 | 大量规则顺序匹配 | 按优先级排序,热门规则放前面 |
| lambda表达式语法报错 | 缩进或冒号写错 | 换用独立函数,更直观 |
推荐资源: 如果对Python的函数、字典还不太熟,推荐看廖雪峰的Python教程中的“函数”和“高级特性”章节,浅显易懂。影刀官方社区的“Python高级应用”板块有用户分享的规则引擎完整实现。把这个模式学会,你就从“会用影刀”升级到了“会设计自动化逻辑”,非技术背景一样可以写出清晰、灵活、好维护的复杂流程。
#影刀RPA #RPA自动化 #Python协同 #条件判断 #流程设计
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
