欢迎光临
我们一直在努力

影刀RPA店群自动化架构实战:Python协同多店铺类型差异化管理与动态流程适配

影刀RPA店群自动化架构实战:Python协同多店铺类型差异化管理与动态流程适配

在这里插入图片描述


同样是上货,品牌旗舰店要走审核流程,个人店可以直接发布。

在这里插入图片描述

店群矩阵自动化突破运营极限!

用同一套自动化脚本覆盖所有店铺类型,就像用一把钥匙开所有的锁——早晚会撬坏几把。

在这里插入图片描述

店群运营到一定规模后,店铺类型会自然分化。 拼多多有品牌店、专卖店、个人店、海外购店铺;TEMU有本地仓店铺和跨境店铺;TikTok Shop有本土店和跨境店。每种店铺类型的后台界面、操作流程、平台规则都不尽相同。

早期我们用一套通用流程打天下,结果就是品牌店因为跳过了必填的资质字段而上架失败,个人店却在等待一个永远弹不出来的审核对话框直到超时。 在这里插入图片描述

后来我们设计了一套店铺类型感知的动态流程适配系统,让同一个业务目标(如上架商品)能根据店铺的实际类型和配置,自动选择最合适的执行路径。


temu店群自动化报活动案例

在这里插入图片描述

一、店铺画像:不只是ID和名称

要让系统理解店铺的差异,首先需要为每个店铺建立丰富的“画像”。

画像不仅包含基础信息,还包含影响自动化操作的结构化特征。

在这里插入图片描述

from dataclasses import dataclass, field
from enum import Enum
from typing import Dict, List, Optional

class ShopKind(Enum):
BRAND = "brand" # 品牌旗舰店
FRANCHISE = "franchise" # 专卖店
INDIVIDUAL = "individual" # 个人店
OVERSEAS = "overseas" # 海外购
CROSS_BORDER = "cross_border" # 跨境店铺
class VerificationLevel(Enum):
HIGH = "high" # 需要严格资质审核
MEDIUM = "medium" # 部分字段需要验证
LOW = "low" # 几乎无需额外验证
@dataclass
class ShopProfile:
shop_id: str
platform: str
kind: ShopKind
verification_level: VerificationLevel
required_fields: List[str] = field(default_factory=list)
optional_fields: List[str] = field(default_factory=list)
upload_strategy: str = "direct" # direct / draft / review
max_images_per_product: int = 10
supported_payment_methods: List[str] = field(default_factory=list)
has_warehouse: bool = False
auto_approve_price_changes: bool = False
custom_features: Dict[str, bool] = field(default_factory=dict)
known_quirks: List[str] = field(default_factory=list)
```
`known_quirks` 这个字段记录了我们在长期运营中发现的店铺特异性行为。
比如某品牌店的商品编辑页面会多一个“品牌授权编号”必填字段,而平台官方文档里根本没有提到。

**很多团队最开始都会忽略这些细节,等到流程在个别店铺反复失败时才回头补。**

## 二、流程变体与动态路由

同一类业务操作(如上架商品),针对不同店铺类型可能有不同的流程变体。

```yaml
flow_family: product_upload
variants:
name: product_upload_brand
applicable_to:
kind: [brand, franchise]
verification_level: [high, medium]
modules:
pdd/login
pdd/navigate_to_product_create
pdd/fill_brand_authorization # 品牌授权信息
pdd/upload_qualification_certs # 上传资质证书
pdd/fill_product_info
pdd/upload_images
pdd/submit_for_review # 提交审核而非直接发布
name: product_upload_individual
applicable_to:
kind: [individual]
modules:
pdd/login
pdd/navigate_to_product_create
pdd/fill_product_info
pdd/upload_images
pdd/submit_direct # 直接上架,无需审核
name: product_upload_default
applicable_to: {} # 兜底流程
modules:
pdd/login
pdd/navigate_to_product_create
pdd/fill_product_info
pdd/upload_images
pdd/submit_direct
```
Python端的路由引擎在任务创建时,根据店铺画像自动匹配最合适的流程变体。

```python
class FlowRouter:
def __init__(self, flow_registry, shop_profile_service):
self.registry = flow_registry
self.profiles = shop_profile_service
async def resolve_flow(self, shop_id: str, flow_family: str) > str:
profile = await self.profiles.get_profile(shop_id)
variants = self.registry.get_variants(flow_family)
best_match = None
best_score = 1
for variant in variants:
if self._matches(profile, variant.get("applicable_to", {})):
score = self._specificity(variant.get("applicable_to", {}))
if score > best_score:
best_score = score
best_match = variant
if best_match:
return best_match["name"]
# 使用兜底流程
default = self.registry.get_default(flow_family)
if default:
return default["name"]
raise FlowNotFoundError(f"No flow found for {flow_family} on shop {shop_id}")
def _matches(self, profile: ShopProfile, conditions: dict) > bool:
if conditions.get("kind") and profile.kind.value not in conditions["kind"]:
return False
if conditions.get("verification_level") and profile.verification_level.value not in conditions["verification_level"]:
return False
if conditions.get("custom_features"):
for feature, required in conditions["custom_features"].items():
if profile.custom_features.get(feature) != required:
return False
return True
def _specificity(self, conditions: dict) > int:
return len(conditions)
```
这样,当系统为品牌店创建上货任务时,自动选用包含资质审核步骤的流程变体;为个人店铺自动选用直接发布的流程变体。
运营无需手动为每个店铺选择不同流程。

## 三、动态步骤注入与跳过

有些差异不在整个流程层面,而是某个具体步骤的有无。
比如“上传品牌授权书”这个步骤,只在品牌店需要,个人店应完全跳过。

我们在指令序列中增加了条件步骤的支持。

```json
{
"steps": [
{"action": "navigate", "url": "/product/create"},
{
"action": "conditional",
"condition": "{{ shop.verification_level == 'high' }}",
"steps": [
{"action": "upload_file", "locator": "#auth-doc", "value_from": "product.auth_doc"},
{"action": "type_text", "locator": "#brand-code", "value_from": "shop.brand_code"}
]
},
{"action": "type_text", "locator": "#title-input", "value_from": "product.title"}
]
}
```
Python执行引擎在遇到 `conditional` 步骤时,先评估条件表达式,如果为真则展开子步骤,否则跳过。

```python
class ConditionalStepExecutor:
def __init__(self, expression_engine):
self.engine = expression_engine
async def execute(self, step: dict, context: dict):
condition = step.get("condition", "true")
result = self.engine.evaluate(condition, context)
if result:
for sub_step in step.get("steps", []):
await self.execute_sub_step(sub_step, context)
```
条件表达式支持简单的逻辑运算,并从上下文中获取店铺画像字段进行判断。
这让流程具备了“自适应”能力,而无需为每种店铺类型维护完全独立的流程文件。

## 四、店铺特性知识库的持续更新

平台在不断更新规则,店铺类型也在变化。
有些店铺在运营过程中获得了品牌授权,从个人店升级为品牌店;有些店铺被平台加入了新的审核要求。

我们建立了一个店铺特性变更检测与知识库更新机制:

1. 每当任务出现“字段缺失”、“审核失败”等特定错误时,自动分析错误详情,提取可能的新增必填字段
2. 2. 当多个同类型店铺重复出现相同错误模式时,自动更新该类型店铺的画像模板
3. 3. 运营也可以通过管理后台手动更新某个店铺的 `known_quirks`
```python
class ShopQuirkDetector:
def __init__(self, db, profile_service):
self.db = db
self.profiles = profile_service
async def analyze_failure_patterns(self):
# 查询最近24小时内特定类型错误的聚集
rows = await self.db.fetch("""
SELECT shop_id, error_type, error_detail, COUNT(*) as cnt
FROM task_failures
WHERE created_at > NOW() – INTERVAL '24 hours'
AND error_type IN ('missing_field', 'verification_failed', 'unexpected_element')
GROUP BY shop_id, error_type, error_detail
HAVING COUNT(*) >= 3
"""
)
for row in rows:
shop = await self.profiles.get_profile(row['shop_id'])
quirk = self._infer_quirk(row['error_detail'])
if quirk and quirk not in shop.known_quirks:
shop.known_quirks.append(quirk)
await self.profiles.update_profile(shop)
logger.info(f"Added quirk '{quirk}' to shop {row['shop_id']}")
def _infer_quirk(self, error_detail: str) > Optional[str]:
# 从错误详情中推断店铺特性
if "brand_authorization_number" in error_detail:
return "requires_brand_auth_number"
if "warehouse_region" in error_detail:
return "requires_warehouse_region"
return None
```
这套机制让我们从“被动应对”转为“主动学习”,系统越跑越了解每家店铺的特性。

## 五、跨平台类型映射

不同平台的店铺分类体系不同,但业务含义有对应关系。
我们维护了一套跨平台店铺类型映射表,让规则引擎和路由系统能跨平台理解店铺特征。

```python
CROSS_PLATFORM_TYPE_MAP = {
("pdd", "brand"): {"temu": "brand_store", "tiktok": "official_shop"},
("pdd", "individual"): {"temu": "individual_seller", "tiktok": "individual_shop"},
("temu", "local_warehouse"): {"pdd": "brand", "tiktok": "local_shop"},
("temu", "cross_border"): {"tiktok": "cross_border_shop"},
}
```
当某个店铺在拼多多上是品牌店,系统在规划其TEMU上货流程时,能自动使用对应的品牌店铺流程变体。

## 六、店铺配置模板的继承与覆盖

店铺画像中的很多字段来自“类型模板”,而不是逐店配置。
我们实现了模板继承机制:个人店铺默认继承“个人店模板”的所有字段,但可以覆盖特定字段。

```yaml
template: individual_base
overrides:
max_images_per_product: 15 # 这家店铺购买了额外的图片额度
known_quirks:
requires_extra_category_field # 这家店因历史原因多了一个类目字段
```
渲染后的完整画像由模板 + 覆盖合并而成,确保了类型共性的一致性和个体差异的灵活性。

## 七、监控与度量

各店铺类型的流程匹配正确率
条件分支命中率(哪些条件最常触发)
店铺特性自动发现数量
因店铺特性不匹配导致的任务失败率
新店铺自动归类准确率
当某类型的店铺失败率突然升高时,可能是平台对该类型店铺做了策略调整,需要更新模板和流程变体。

## 八、踩坑记录

**模板粒度不够导致“例外”泛滥。**
早期我们只分了“品牌店”和“非品牌店”两种模板,结果非品牌店的个体差异巨大,流程频繁出错。
后来逐步细化出了专卖店、个人店、跨境店等子类型,并在模板中增加了可选字段的显式标注。

**条件表达式过于复杂。**
起初条件表达式支持嵌套逻辑和函数调用,运营配置的门槛太高,经常写错。
我们简化了表达式语法,只保留基本的比较和AND/OR组合,并提供了可视化的条件编辑器。

**画像过时。**
店铺在平台上升级了类型(如从个人店升级为品牌店),但系统中的画像没同步,导致流程持续走错分支。
我们增加了定期的店铺信息同步任务,从平台API抓取最新的店铺信息并与画像比对,发现不一致及时告警。

## 九、写在最后

店群不是一堆完全相同的店铺的集合,而是一个包含多种类型、不同特性、持续变化的有机体。

用一套僵化的脚本去覆盖所有差异,短期省钱,长期填坑。
通过店铺画像、流程路由、条件步骤和知识库的持续更新,我们让自动化系统具备了识别和适应差异的能力。

> 自动化的真正智能,不在于能做多少事,而在于能辨别不同的情境,并做出正确的选择。

*作者:林焱*

赞(0)
未经允许不得转载:171主机测评 » 影刀RPA店群自动化架构实战:Python协同多店铺类型差异化管理与动态流程适配
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址