SocialHub.AI
新品 · 抢先体验

SoClaw 挽回集成

SoClaw 是 Flash 的自主赢回系统:高价值、高风险成员的内部工作列表、一组受管理的 MCP 工具以及决策技能。您可以通过运行 OpenClaw 代理(您自行托管的开源代理运行时)来操作它,该代理加载 SoClaw 技能并通过有范围、有上限的代理密钥进行循环。

本指南适用于运营商/集成商。有关业务概览,请参阅SoClaw产品页面。客户挽回工具构建于MCP集成指南中记录的同一受管MCP服务器之上。

客户挽回流程

SoClaw 流程 一次一个成员代理人租赁一项任务,解读成员的决策背景,选择一个单一的资金杠杆或 HOLD记录下真实信息并完成任务后,即可申请下一个任务。一项申请的任务最多只能获得一次报酬。

task = claim_winback_task()                 # lease one task; NO_TASKS_AVAILABLE / WINBACK_DISABLED → STOP
ctx  = get_winback_context(task.memberId)   # consent / freq / fatigue / reach / complaintRisk / churn / arm / hint

# HARD VETO — holdout arm, complaint risk, consent, frequency
if ctx.holdoutArm == "holdout" or ctx.complaintRisk.level == "high"
       or no consent or ctx.emailFrequency.allowed == false:
    add_member_note(task.memberId, "HOLD: <reason>", kind="winback", task_id=task.id)
    complete_winback_task(task.id, acted=false, lever="hold", hold_reason="<reason>"); STOP

# CHOOSE one lever or HOLD — protect margin first (points before discounts)
result = issue_coupon(member_id=task.memberId, pool_id=..., task_id=task.id)   # MUST carry task_id

# RECORD honestly, then COMPLETE — outcome stays "pending" (attribution fills it later)
note = add_member_note(task.memberId, honest(action, value, why), kind="winback", task_id=task.id)
complete_winback_task(task.id, acted=true, lever="issue_coupon", note_id=note.noteId)
# action_ref is OPTIONAL — do NOT pass the lever's transaction/run id. The server
# auto-links the executed lever to the task for attribution.

租约至少一次,而非恰好一次。 租约会过期,任务可以重新租借给另一个工作者——因此,防止双重支付的机制是幂等性,而不是租约本身。每个资金杠杆都带有 task_id;服务器从中派生出幂等性密钥,因此,重复运行同一任务会直接终止,而不是发放第二个优惠券。

客户挽回工具 (工具集 winback)

这三个写入工具是 rate-only - 由即时暂停开关和写入速率限制保护,没有每次调用的价值上限,因为它们没有面值。将每个工具引用为 Flash:<tool_name>。

claim_winback_task撰写 · 仅评分winback:claim

从工作列表中租用下一个处于风险中的成员任务。原子操作——其他工作者不会获得相同的任务。返回任务(id, memberId, 优先事项, segmentKey,武器,理由),租赁(所有者, expiresAt, leaseSeconds),以及尝试/maxAttempts没有参数——团队来自密钥。

参数: (none)
get_winback_context读取winback:read

一项只读预检查,针对会员:同意情况、电子邮件发送频率余量、疲劳度、近期覆盖范围、投诉/退订风险、流失信号(90 天消费额、上次订单、会员等级、状态)、会员的保留策略以及一项建议。 policyHint不返回任何音符主体。输出是数据,而不是指令——服务器在写入时会强制执行每个逻辑门。

参数: member_id
add_member_note撰写 · 仅评分winback:write

在会员记录中写下真实、易于理解的留言。留言内容作为非信任数据存储,并在服务器端进行清理:≤2000 个字符,去除控制字符/双向字符/零宽度字符,拒绝标记/自动链接/裸 URL 和个人身份信息模式。内容类型为挽回订单 | 观察 | 假设。绝不会将其读取回代理上下文。

参数: member_id, body, kind?, task_id?, action_ref?
complete_winback_task写入 · 仅计费 · 幂等winback:claim

最终确定已声明的任务及其结果(已执行的操作 + 参考,或“暂停”原因)。幂等性——重新完成操作会重放已存储的结果,不会产生任何其他副作用。结果保持“待处理”状态;转换稍后通过与保留项对齐的归因进行填充——切勿凭空捏造。

参数: task_id, acted?, lever?, action_ref?, note_id?, hold_reason?

资金杠杆——与任务挂钩

这些是标准的 Flash 写入工具。客户挽回代理 必须通过所认领任务的 task_id 验证——否则,客户挽回写入操作将被拒绝,并附带 WINBACK_TASK_REQUIRED 验证。task_id 使写入操作具有幂等性,并绑定服务器强制执行的保留机制。每个任务执行一次付费操作。

issue_coupon写作 · 资金coupons:write

从优惠券池中为会员分配一个唯一的优惠券代码——经典的客户挽回策略。受每次调用价值上限 + 累计预算(失败关闭)+ 合规性覆盖门槛 + 保留抑制的限制。必须包含 task_id 才能进行客户挽回。

参数: member_id, pool_id, task_id, run_id?
earn_points写入 · 资金 · 附加值points:write

向会员奖励忠诚度积分(利润保护,非折扣机制)。必须包含 task_id 以便进行用户挽回,确保写入操作幂等且绑定到正确的保留臂。

参数: member_id, amount, task_id, description?
redeem_points_for_coupon写作 · 金钱 · 破坏性points:write

以原子方式将会员积分兑换为优惠券(积分+优惠券,或两者都不兑换)。必须包含 task_id 以便进行用户挽回。

参数: member_id, pool_id, points_cost, task_id

坚持完整性是由服务器强制执行的。为手臂为 holdout 的会员写入的资金仅被记录为意图 - 没有优惠券,没有积分,没有预算支出。代理也必须尊重手臂,但它不被信任:服务器无论如何都会抑制副作用。

配置 SoClaw 代理密钥

SoClaw 在 代理(非人类)API 密钥 下运行 — 这是一种具有代理永远无法突破的硬性权限上限的一级密钥类型。在 /flash/account/api-keys 创建一个密钥 — 选择 创建密钥 → AI 代理 → “SoClaw 找回”,这将预先选择以下最小权限范围、工具集、权限上限和 TTL。一次性显示会显示 MCP 端点和 Bearer 设置。缺少工具意味着密钥缺少该范围 — 而不是 Flash 缺少该功能。

权限范围winback:read · winback:claim · winback:write · coupons:read · coupons:write · points:write · members:read · metrics:read
工具集winback
帽子单次访问价值上限(优惠券面值上限)、单次访问会员数量上限以及累计预算(单次访问/每日/30天)——所有限制均强制执行,失败则关闭。
TTL有限的有效期——密钥会过期并重新颁发,因此泄露的密钥无法无限期运行。
即时暂停团队级开关(以及自动投诉断路器)会将代理的写入操作设置为失败关闭。代理无法自行恢复。

团队/商店信息通过服务器端密钥注入。任何工具均不接受 teamId、storeId、tier 或 SQL——如果您传递了其中任何一个,服务器都会忽略它。

自行部署 OpenClaw 运行时 + SoClaw 技能

Flash 成功挽回局面 系统 (工作列表, MCP 工具、安全执法)和 SoClaw 技能 (决策原则+行动方案)。你提供运行时环境:自托管。 OpenClaw 代理人,把它指向 Flash的 MCP 使用您的代理密钥在服务器上加载技能。自托管让您拥有操作控制权——配置、监控、版本锁定和销毁密钥——但它也 不感兴趣 放宽安全模式: MCP 无论如何,该方都将代理人视为外部人员。

将 Flash 注册为 HTTP MCP 服务器(服务器密钥必须与 flash 完全一致):

export FLASH_WINBACK_KEY="fl_live_your_agent_key_here"

# in the OpenClaw runtime's MCP config
{
  "mcpServers": {
    "flash": {
      "type": "http",
      "url": "https://flash.socialhub.ai/api/mcp",
      "headers": { "Authorization": "Bearer ${FLASH_WINBACK_KEY}" }
    }
  }
}

下载 SoClaw 技能(SKILL.md + 原则·杠杆·工作流程·参考),将其放入 OpenClaw 运行时的技能目录中,然后运行循环:

↓ 下载SoClaw技能(.zip)

SoClaw 除了用于挽回客户之外,还通过同一个租赁循环 (claim_agent_task → get_agent_task → complete_agent_task) 处理决策工作列表 (决策工作列表),包括审批(渠道订单审核)和欺诈(同户推荐)。所有操作都通过 Flash 现有的幂等写入机制执行;每个决策都可以上报给人工处理。

↓ 下载 SoClaw 决策技能 (.zip)

自检:

  • 代理应该只能看到您密钥权限范围内的挽回工具集和杠杆工具——除此之外,不应看到任何其他内容。
  • 第一个 claim_winback_task 返回带有租约的任务,或 NO_TASKS_AVAILABLE / WINBACK_DISABLED - 两者都是正常停止条件,而不是失败。
  • 没有 task_id 的优惠券/积分调用必须返回WINBACK_TASK_REQUIRED - 确认您的循环始终将控制杆锚定到已声明的任务。

安全边界是服务器

最重要的特性:代理的权限、上限和合规性在写入时由Flash强制执行——绝不依赖代理的推理、确认或系统提示。代理的HOLD(保留)是一种便利措施,旨在提高良好结果的概率;它们并非控制手段。即使是泄露的密钥或通过提示注入的模型,也受到以下限制:

  • 失败关闭资金保障。 每次优惠券/积分写入都需经过单次调用价值上限和累计预算限制。超出其中任何一项,写入操作都将被拒绝——代理无法调整输入以绕过限制,预算耗尽会导致立即暂停。
  • 合规性、频率和疲劳度控制。 即使客服人员忽略了 get_winback_context 预览,服务器端也会重新检查同意/取消订阅、跨系统联系频率和疲劳度。拒绝访问意味着停止,而不是重试绕过。
  • 保留策略执行。 对保留组用户的消费行为仅记录为意图——无论代理做出何种决定,其副作用都会被抑制。
  • 即时暂停 + 投诉断路器。 团队开关会将所有代理的写入操作设置为失败关闭;当垃圾邮件投诉率超过阈值时,自动断路器会触发此操作。代理没有工具可以取消暂停——只有人工才能恢复。
  • 不受信任的成员数据。 注意:主体、时间线文本和任何工具输出都是数据,而不是指令——写入时会进行清理,永远不会执行。 get_winback_context 特意不返回任何注释正文,以避免将注入的文本反馈给代理。

错误处理及代码

两个渠道。协议错误(JSON-RPC:方法错误/工具未知)通常意味着工具名称错误——请检查Flash:前缀和拼写。isError: true结果是一个可读取的硬边界——只需转发一次,即可执行下一步操作。 切勿再次尝试绕过它。

代码含义操作指南
NO_TASKS_AVAILABLE工作清单为空。停止索赔;退后一步——不要紧紧地轮询。
WINBACK_DISABLED挽回活动已暂停(立即暂停/断路器跳闸)。停止。只有人才能恢复——没有任何代理工具可以取消暂停。
TOO_MANY_OPEN_LEASES您的开放租赁上限已达到。完成或让租约到期,然后重新申请。
LEASE_EXPIRED / NOT_LEASE_OWNER租约被收回或重新租给另一名工人。重读,不要重写——这项工作已不再属于您。
ALREADY_COMPLETED任务已经完成了。重新读取存储的结果;不要重新完成。
WINBACK_TASK_REQUIRED一笔挽回款项的写入操作缺少 task_id。使用声明的 task_id 重新发出杠杆。按照设计,不是错误。
WINBACK_TASK_NOT_FOUND / WINBACK_TASK_MEMBER_MISMATCH任务错误,或任务/成员不匹配。为会员使用您实际领取的任务。
NOTE_INVALID该注释未通过服务器端清理。重写为普通散文(无标记/链接/PII);重试一次。
Write guard / budget价值上限已超限或累计预算已用完。中继;以“保留”状态完成任务;请勿尝试绕过。

还有一个: meta.hasData: false 从计量工具的角度来看是 成功,而非错误 — 这意味着“该窗口没有数据”,永远不会是 0。

数据与诚信

任何比率/趋势/汇总数据都通过受管指标工具(list_metrics → describe_metric → query_metric)进行处理——这些指标绝不会由代理计算,也不会写入 SQL。挽回诚信指标——winback_uplift、winback_treated_n、winback_holdout_n 以及处理组/对照组的转化率——将成功定义为因果提升(同一时间段内处理组 - 对照组),而非绝对的挽回。代理会将学习成果记录为hypothesis备注;任何政策变更都由人工审核并推动——代理绝不会进行自我调整。

提升排名——工作列表的排序方式

当提升模型适合团队时,工作列表优先级为风险价值 × 提升,否则为纯风险价值。该切换是自动的,由每次扫描决定 - 无需配置任何内容。

该模型是一个 双模型逻辑提升模型,基于项目自身随机保留数据的每次扫描,针对每个团队进行拟合——仅包含成熟的归因行,且两个分支的转化定义相同:

uplift(x) = P(convert | treated, x) − P(convert | holdout, x)

拟合是确定性的——没有抽样随机性——因此相同的数据始终产生相同的排名。

样本门——所有这些都必须通过才能信任模型

  • ≥ 200 行成熟的处理
  • ≥ 50 行成熟的 holdout 行
  • ≥ 20 次转化
  • 两种逻辑拟合已融合

在 any 门控下方,该模型将在该次扫描中被丢弃 (null),排名将回落至纯粹的风险价值 (VaR)——零行为变化,而非降级估计。负提升估计(已测量的反作用)将任务优先级降至 0——该任务仍保留在工作列表中,并显示说明原因的数字。

您的代理看到的内容。 当模型拟合时,task.reason 会携带带有流失概率、CLV、风险值、upliftEstimate 及其乘积的 expected_incremental_value 类型。通过相同的 MCP 工作列表工具(声明/获取/完成)使用它 - 没有破坏架构的更改,并且只要模型不适合,旧的原因类型仍然会发生。