Files
workphone-sdk/开发文档/5、接口/02-业务对接/存客宝BFF与工作手机SDK映射表.md
2026-07-23 23:40:57 +08:00

24 KiB
Raw Permalink Blame History

tags, doc-type, layer, parent, related
tags doc-type layer parent related
工作手机
接口
业务对接
主文档
主文档 5、接口/02-业务对接
5、接口/02-业务对接/README|02-业务对接
接口规范
微信全功能矩阵_v8.0.56
工作手机API全量接口目录
开发文档/README
开发进度总表

文档说明

存客宝 BFF 与工作手机 SDK 映射表

版本: v1.3 | 更新: 2026-06-28 | 负责人: @阿桥 存客宝代码: cunkebao_v3/Server/application/common/util/WorkPhoneSDK.php 工作手机真源: 工作手机API全量接口目录.md 铁律(强制): 真机开发铁律 — 本表每条映射 须真机 E2E 验收,禁止占位/mock 冒充完成。对称文档:存客宝 开发文档/5、接口/02-存客宝与工作手机对接/01-总体架构与BFF映射.md §七 S2 奥创后台真机数据调阅2026-06-08: 资料/S2私域数据调阅索引.md — 设备(含离线197台)、微信号371、好友/聊天 API 与落盘样本


一、三层调用关系

触客宝前端 (React)
    │  /v1/workphone/*
    ▼
存客宝 BFF (ThinkPHP · GetWorkPhoneStatusController 等)
    │  WorkPhoneSDK.php
    ▼
工作手机 SDK (:8899)
    │  /api/v3/*
    ▼
设备 Agent / Frida / ADB

存客宝与工作手机对接架构


二、环境变量(存客宝侧)

变量 配置键 默认值 说明
WORKPHONE_SDK_URL workphone.sdk_url http://localhost:8899 SDK 服务地址
WORKPHONE_SDK_KEY workphone.api_key workphone-secret-key Bearer Token
WORKPHONE_SDK_TIMEOUT workphone.timeout 30 请求超时(秒)

配置文件:cunkebao_v3/Server/config/workphone.php


三、存客宝 BFF 路由 → SDK 路由

存客宝 BFF 方法 工作手机 SDK 说明
/v1/workphone/status GET /health + /api/v3/devices + /api/v3/connection/status + /api/v3/workbench/overview 聚合总览;优先 workbench
/v1/workphone/device GET GET /api/v3/devices/{device_id} 参数:device_id
/v1/workphone/screenshot POST POST /api/v3/devices/{device_id}/screenshot 参数:device_id
/v1/workphone/ai/status GET GET /api/v3/devices/{device_id}/ai/status 已注册
/v1/workphone/ai/task POST POST /api/v3/devices/{device_id}/ai/task 已注册
/v1/workphone/ai/standing-order POST POST /api/v3/devices/{device_id}/ai/standing-order 已注册
/v1/workphone/ai/execute POST POST /api/v3/devices/{device_id}/ai/execute 已注册
/v1/workphone/hook/events GET GET /api/v3/hook/events Hook 事件列表;可选 device_id / event_type / limit
/v1/workphone/hook/events/sync POST SDK 事件 + WorkPhoneEventBridge 拉取 Hook 事件并同步存客宝业务
/v1/workphone/connection/status GET GET /api/v3/connection/status WS / ADB 连接状态
/v1/workphone/hook/probe GET GET /api/v3/hook/probe/{device_id} Frida / 微信就绪探测
/v1/workphone/message/send POST POST /api/v3/message/send 发消息;可选 channelhook/adb
/v1/workphone/hook/execute POST POST /api/v3/hook/execute Hook 统一执行入口
/v1/workphone/customer/profile-bundle GET GET /api/v3/customer/profile-bundle 客户画像聚合:资料/联系人/群/标签/最近消息
/v1/workphone/message/sync-since POST POST /api/v3/message/sync-since 增量消息同步
/v1/workphone/stability/watch GET GET /api/v3/stability/watch WS/Hook/ADB/耗时采样
/v1/workphone/fleet/summary GET GET /api/v3/fleet/summary 全部手机/项目手机总览
/v1/workphone/fleet/devices GET GET /api/v3/fleet/devices 手机列表;支持 online_only/status/capability/project_id
/v1/workphone/fleet/execute POST POST /api/v3/fleet/execute 多设备执行;写类必须 dry_runconfirm=true
/v1/workphone/realtime/status GET GET /api/v3/integration/realtime/status 在线设备、最近事件、实时订阅入口
/v1/workphone/realtime/events GET GET /api/v3/integration/realtime/events Hook/Agent/WS 事件流
/v1/workphone/sdk/proxy POST 受限代理 /api/v3/* BFF 安全透传 SDK 新接口;禁止外部 URL、禁止路径穿越

前端定义见:cunkebao_v3/Cunkebao/src/pages/mobile/mine/workphone/api.tsHook 事件两条暂无 api.ts 封装,可直接调 BFF


三B、2026-06-08 私域 P0 对接新增接口

三A.1、2026-07-23 WP-BFF-33 SDK 契约收口

工作手机 SDK 侧已收口以下 BFF 直接依赖:

  1. POST /api/v3/fleet/execute 与微信单设备统一执行共享 device_transport 选路和结构化回执。
  2. 微信写类 Fleet 即使单设备也要求 dry_run=trueconfirm=true;演练请求不下发设备命令。
  3. 执行端未明确返回 success=trueBFF 只能收到失败结果;code=200 不再被视作业务成功证明。
  4. 超时统一带 error_code=timeoutretryable=trueretry_after_seconds,便于 BFF 重试策略处理。
  5. 本轮真实 JWT 33 项复跑证据见 开发文档/10、项目管理/02-测试报告/20260723_WP-BFF-33/;当前环境缺有效租户 JWT保持待验收状态。

3B.1 客户画像聚合

GET /api/v3/customer/profile-bundle

参数 类型 必填 说明
device_id string 工作手机设备 ID例如 xgfe65eimrrofyws
platform string 固定 wechat
keyword string 昵称、备注、微信号等模糊匹配
user_id string 指定客户 wxid/微信号,优先于 keyword
limit int 返回最近消息/匹配结果数量,默认 50最大 200
contact_limit int 联系人读取页大小,默认 10000最大 20000
contact_offset int 联系人分页偏移,默认 0
message_limit int 消息读取页大小,默认 3000最大 5000
message_offset int 消息分页偏移,默认 0

返回重点字段:

字段 说明
data.device_id_md5 设备 ID MD5供前端脱敏显示
data.profile 当前微信资料
data.contacts / contact_count 匹配联系人与总联系人数量
data.returned_contact_count / contact_total_count / contacts_has_more 本页联系人数量、真实总数、是否还有下一页
data.groups / group_count 群列表摘要
data.tags / tag_count 标签摘要
data.recent_messages / message_count 最近消息
data.returned_message_count / message_total_count / messages_has_more 本页消息数量、真实总数、是否还有下一页
channel_used 每个子能力实际通道,当前真机为 websocket/hook

2026-06-08 真机验收:联系人总数 6196本页 200原始 rcontact 6336、群 27、标签 323、消息总数 2447本页 50code=200

3B.2 增量消息同步

POST /api/v3/message/sync-since

请求:

{
  "device_id": "xgfe65eimrrofyws",
  "platform": "wechat",
  "conversation_id": "",
  "since_time": 0,
  "limit": 3000,
  "offset": 0
}

返回重点字段:

字段 说明
data.messages 增量候选消息
data.count 本次返回数量
data.total_count 当前会话/全局消息总数
data.offset 当前页偏移
data.next_since_time 下次轮询传入的 since_time
data.has_more 是否可能还有更多
channel_used 当前真机为 websocket/hook

2026-06-08 真机验收:返回 2447 条,total_count=2447next_since_time=1780904176


三C、2026-06-12 双通道绑定 · Fleet 发现 · 超管 device-mapCKB-143

需求真源四端对接 §3.8.9 · 存客宝 08-四端设备微信数据同源与触达链路

3C.1 双通道 provider超管第一条 · 已有)

配置键 典型值 说明
workphone_provider:{companyId} workphone_sdk 方案 A · SDK 主路径(默认)
同上 s2_legacy 方案 B · S2/奥创遗留兼容
workphone_sdk_device_map:{companyId} {"19445":"xgfe65eimrrofyws"} A/B 共用 · ck_device ↔ SDK device_id

保存接口(已有):POST /v1/admin/company/workphone-provider

3C.2 在线设备发现Fleet · SDK 已验收)

存客宝 BFF 方法 工作手机 SDK 说明
/v1/workphone/fleet/summary GET GET /api/v3/fleet/summary 在线/总数/按项目分组
/v1/workphone/fleet/devices GET GET /api/v3/fleet/devices 在线设备列表;支持 online_only / capability=frida
/v1/workphone/fleet/execute POST POST /api/v3/fleet/execute 多设备 Hook 执行(写类须 dry_run/confirm
/v1/workphone/realtime/status GET GET /api/v3/integration/realtime/status 实时在线 + 最近事件
/v1/workphone/realtime/events GET GET /api/v3/integration/realtime/events Hook/Agent 事件流

:8899/health 摘要字段(超管/运维直连):

字段 说明
devices_online 当前 WS 在线设备数
device_ids 在线逻辑设备 ID 列表

3C.3 超管 BFF 第二条 · device-map 2026-06-12 已实现)

存客宝 BFF 方法 说明
/v1/admin/company/workphone-device-map GET 返回当前 map + 未绑定 ck_device + SDK 在线未映射设备 + 匹配建议
/v1/admin/company/workphone-device-map POST body: { "companyId": 2130, "map": { "19445": "xgfe65eimrrofyws" } }

代码锚点WorkphoneProviderService::buildDeviceMapView() · setDeviceMap() · GetWorkphoneDeviceMapController · PostWorkphoneDeviceMapController

保存规则

  • key = 正整数 ck_device.idvalue = SDK 字符串 device_id
  • 保存前校验 fleet/health 在线;离线可预绑定但 UI 标黄
  • 同一 device_id 不可重复绑定 → DEVICE_MAP_CONFLICT

3C.4 绑定后后台挂载字段(调试态 · SDK 已提供)

设备详情/触客宝/AI 经 BFF 聚合以下 SDK 接口,将工作手机 调试态与实时字段 挂载到后台:

BFF SDK 挂载字段
/v1/workphone/connection/status /api/v3/connection/status WS/ADB/Hook 在线
/v1/workphone/hook/probe /api/v3/hook/probe/{device_id} Frida 就绪 · supports_hook
/v1/workphone/profile/get(或 proxy /api/v3/profile/get 当前 wxid / nickname
/v1/workphone/device /api/v3/devices/{device_id} 电量 · 型号 · 最后活跃
/v1/workphone/realtime/status /api/v3/integration/realtime/status 最近 Agent/Hook 事件

验收样例:魔兽世界 companyId=2130 · WZ-01 ck_device.id=19445xgfe65eimrrofyws · 微信游条姐 wxid_5g37snchpv8e22

3B.3 稳定性采样

GET /api/v3/stability/watch?device_id=xgfe65eimrrofyws&samples=2&interval_seconds=1

返回重点字段:

字段 说明
data.samples[].ws_online WebSocket Agent 在线状态
data.samples[].adb_online ADB 设备在线状态
data.samples[].hook_ok Frida/Hook 是否可用
data.samples[].wechat_version 微信版本
data.samples[].latency_ms 单次探测耗时
data.summary.success_rate 采样成功率

2026-06-08 真机验收2/2 成功success_rate=1.0,最大耗时 537ms。24h 长稳可用该接口循环落盘。

3B.4 写类与资金类安全门控

类别 接口 默认要求
单聊发消息 POST /api/v3/message/send 测试对象或 filehelper返回 message_id 或明确失败
群消息 POST /api/v3/group/send-message 测试群 group_id
群发 POST /api/v3/mass-send / /message/batch-send user_ids/to_ids 白名单,服务端间隔发送
加好友 POST /api/v3/friend/add / /friend/batch-add 测试 wxid频控和失败原因必须返回
朋友圈 POST /api/v3/moments/post/like/comment 测试内容、测试 sns_id、限频
红包/转账 POST /api/v3/payment/red-packet / /payment/transfer 默认 dry-run真实确认必须 confirm=true、测试金额、白名单

3B.5 SDK 控手机接口开放口径2026-06-28

存客宝只调用 BFF不直连手机和 Frida

存客宝/触客宝前端
  → /v1/workphone/*
  → WorkPhoneSDK.php
  → 工作手机 SDK /api/v3/*
  → WebSocket Agent
  → Frida Hook / u2 / ADB
  → 工作手机真机微信
对接目标 BFF 首选接口 SDK 真源 说明
全部手机总览 GET /v1/workphone/fleet/summary GET /api/v3/fleet/summary 后台首页统计
在线手机选择 GET /v1/workphone/fleet/devices?online_only=1 GET /api/v3/fleet/devices 选择可执行设备
多设备执行 POST /v1/workphone/fleet/execute POST /api/v3/fleet/execute 写类多设备必须 dry_runconfirm=true
实时在线 GET /v1/workphone/realtime/status GET /api/v3/integration/realtime/status 在线设备 + 最近事件
事件流 GET /v1/workphone/realtime/events GET /api/v3/integration/realtime/events Hook/Agent/WS 事件追踪
新 SDK 接口试接 POST /v1/workphone/sdk/proxy 受限代理 /api/v3/* 只允许相对路径 /api/v3/...
读类聚合 GET /v1/workphone/customer/profile-bundle GET /api/v3/customer/profile-bundle profile/contacts/groups/tags/messages
单聊写类 POST /v1/workphone/message/send POST /api/v3/message/send 白名单/filehelper 先验

验收顺序healthfleet/devicescapability → 读类接口 → dry_run 写类 → 白名单真实写类。

默认验收脚本:

sdk/scripts/run_wechat_private_domain_acceptance.py \
  -d xgfe65eimrrofyws \
  --base http://127.0.0.1:8899

当前报告:开发文档/8、部署/05-测试验收/20260608_微信私域能力验收/private_domain_acceptance_20260608-154118.jsonpassed=22 failed=0 gated=4


四、WorkPhoneSDK.php 方法 → SDK 接口(已封装 40+

4.1 消息

PHP 方法 SDK 路径 核心参数
sendMessage() POST /api/v3/message/send device_id, platform, to_id, content, msg_type
getMessages() POST /api/v3/message/list device_id, platform, conversation_id, limit, offset
batchSendMessage() POST /api/v3/message/batch-send device_id, platform, to_ids[], content, interval
replyComment() POST /api/v3/comment/reply device_id, platform, comment_id, content

4.2 好友 / 通讯录

PHP 方法 SDK 路径 核心参数
addFriend() POST /api/v3/friend/add device_id, platform, search_key, verify_msg
acceptFriend() POST /api/v3/friend/accept device_id, platform, user_id
setFriendRemark() POST /api/v3/friend/set-remark device_id, platform, user_id, remark
deleteFriend() POST /api/v3/friend/delete device_id, platform, user_id
batchAddFriend() POST /api/v3/friend/batch-add device_id, platform, targets[]
getContacts() GET /api/v3/contacts device_id, platform, limit, offset

4.3 群聊

PHP 方法 SDK 路径
createGroup() POST /api/v3/group/create
inviteToGroup() POST /api/v3/group/invite
removeFromGroup() POST /api/v3/group/remove
setGroupNotice() POST /api/v3/group/set-notice
setGroupName() POST /api/v3/group/set-name
sendGroupMessage() POST /api/v3/group/send-message
setGroupWelcome() POST /api/v3/group/set-welcome
getGroups() GET /api/v3/group/list
getGroupMembers() GET /api/v3/group/members

4.4 标签

PHP 方法 SDK 路径
addTag() / removeTag() / createTag() / deleteTag() /api/v3/tag/*
getTags() GET /api/v3/tag/list
getUsersByTag() POST /api/v3/tag/users

4.5 朋友圈

PHP 方法 SDK 路径
postMoments() POST /api/v3/moments/post
likeMoments() POST /api/v3/moments/like
commentMoments() POST /api/v3/moments/comment
getMoments() POST /api/v3/moments/list

4.6 设备 / Agent / UI

PHP 方法 SDK 路径
getDevices() GET /api/v3/devices
getDevice() GET /api/v3/devices/{id}
screenshot() POST /api/v3/devices/{id}/screenshot
getUiTree() GET /api/v3/devices/{id}/ui-tree
click() / clickText() / input() / swipe() POST /api/v3/devices/{id}/click*
executeTask() POST /api/v3/agent/execute
getAgentStatus() GET /api/v3/agent/status/{id}
stopAgent() POST /api/v3/agent/stop/{id}
getAIBrainStatus() GET /api/v3/devices/{id}/ai/status
pushAITask() POST /api/v3/devices/{id}/ai/task
pushAIStandingOrder() POST /api/v3/devices/{id}/ai/standing-order
executeAITask() POST /api/v3/devices/{id}/ai/execute
healthCheck() GET /health

4.7 平台快捷方法

PHP 方法 等价于
wechatSend() sendMessage(..., 'wechat', ...)
douyinSend() platform=douyin
xhsSend() platform=xhs
xianyuSend() platform=xianyu
soulSend() platform=soul

五、线索闭环(存客宝专用 SDK 路由)

场景 SDK 路径 触发方
配置 CKB POST/GET /api/v3/cunke-bao/config 运维 / 存客宝后台
手动线索 POST /api/v3/cunke-bao/report-lead 场景计划 / 测试
通讯录同步 POST /api/v3/cunke-bao/batch-contacts Hook / 定时任务
新好友 POST /api/v3/cunke-bao/hook/friend-add Frida Agent
群变动 POST /api/v3/cunke-bao/hook/group-change Frida Agent

签名与字段详见 存客宝对接规范.md


六、BFF 路由清单13 条,已全部注册)

前端 api.ts BFF 路由 方法 SDK 目标 状态
fetchWorkPhoneStatus /v1/workphone/status GET workbench/overview + devices + connection
fetchWorkPhoneDevice /v1/workphone/device GET GET /api/v3/devices/{id}
fetchWorkPhoneScreenshot /v1/workphone/screenshot POST screenshot
fetchAIBrainStatus /v1/workphone/ai/status GET GET /api/v3/devices/{id}/ai/status
pushAITask /v1/workphone/ai/task POST POST .../ai/task
pushAIStandingOrder /v1/workphone/ai/standing-order POST standing-order
executeAITask /v1/workphone/ai/execute POST ai/execute
/v1/workphone/hook/events GET Hook 事件列表
/v1/workphone/hook/events/sync POST 事件同步存客宝
fetchWorkPhoneConnection /v1/workphone/connection/status GET GET /api/v3/connection/status
fetchHookProbe /v1/workphone/hook/probe GET GET /api/v3/hook/probe/{id}
sendWorkPhoneMessage /v1/workphone/message/send POST POST /api/v3/message/send
executeWorkPhoneHook /v1/workphone/hook/execute POST POST /api/v3/hook/execute

代码:cunkebao_v3/Server/application/cunkebao/config/route.php · GetWorkPhoneStatusController.php · WorkPhoneSDK.php


七、场景计划常用 SDK 接口速查

存客宝业务 推荐 SDK 接口
场景群发消息 POST /api/v3/message/batch-send
加好友计划 POST /api/v3/friend/batch-add
群欢迎语 POST /api/v3/group/set-welcome
朋友圈营销 POST /api/v3/moments/post
标签分流 POST /api/v3/tag/add + GET /api/v3/tag/users
新好友进流量池 Hook → /api/v3/cunke-bao/hook/friend-add

八、相关文档


九、联调验收curl 快测)

SDK 直连(本机 SDK 已启动时):

# 健康检查
curl -s http://127.0.0.1:8899/health

# 工作台总览BFF status 优先拉此接口)
curl -s http://127.0.0.1:8899/api/v3/workbench/overview

# AI Brain 状态(替换 {device_id}
curl -s http://127.0.0.1:8899/api/v3/devices/{device_id}/ai/status

# 推送 AI 任务
curl -s -X POST http://127.0.0.1:8899/api/v3/devices/{device_id}/ai/task \
  -H 'Content-Type: application/json' \
  -d '{"instruction":"检查微信未读","priority":5}'

一键冒烟脚本开发文档/8、部署/05-测试验收/scripts/workphone_bff_smoke.sh

2026-05-24 实测SDK healthy2 台 WS 在线;/ai/status/ai/task 返回 200。


十、场景联调示例curl

{device_id}{to_id} 替换为真机值。Basehttp://127.0.0.1:8899

10.1 场景群发消息

curl -s -X POST http://127.0.0.1:8899/api/v3/message/batch-send \
  -H 'Content-Type: application/json' \
  -d '{
    "device_id": "{device_id}",
    "platform": "wechat",
    "to_ids": ["好友A", "好友B"],
    "content": "【存客宝】活动通知:今晚 8 点直播",
    "interval": 3
  }'

10.2 批量加好友

curl -s -X POST http://127.0.0.1:8899/api/v3/friend/batch-add \
  -H 'Content-Type: application/json' \
  -d '{
    "device_id": "{device_id}",
    "platform": "wechat",
    "user_ids": ["wxid_aaa", "wxid_bbb"],
    "message": "你好,通过一下",
    "interval": 8
  }'

10.3 群欢迎语

curl -s -X POST http://127.0.0.1:8899/api/v3/group/set-welcome \
  -H 'Content-Type: application/json' \
  -d '{
    "device_id": "{device_id}",
    "platform": "wechat",
    "group_id": "{group_id}",
    "welcome_text": "欢迎加入回复「1」领资料"
  }'

10.4 新好友 → 存客宝线索

curl -s -X POST http://127.0.0.1:8899/api/v3/cunke-bao/hook/friend-add \
  -H 'Content-Type: application/json' \
  -d '{
    "device_id": "{device_id}",
    "wechat_id": "wxid_newfriend",
    "nickname": "张三",
    "source": "微信添加"
  }'

10.5 PHP / TS 调用

// cunkebao_v3 WorkPhoneSDK.php 或 sdk/php-sdk/WorkPhoneClient.php
$sdk->sendMessage($deviceId, 'wechat', $toId, '你好');
$sdk->pushAITask($deviceId, '检查未读并汇总', 5);
// sdk/typescript-sdk
await sdk.batchSendMessage({ deviceId, platform: 'wechat', toIds: ['A','B'], content: '...' });
await sdk.pushAITask(deviceId, '检查微信未读', 5);

接口真源工作手机API全量接口目录.md


十一、存客宝 BFF 验收2026-05-24

结果
路由数 52 条 /v1/workphone/* + sdk/proxy
脚本 cunkebao_v3/Server/scripts/workphone_bff_acceptance.sh
结果 PASS=17 FAIL=0
设备离线 BFF 200 · data.sdk_code=503(非 500
bash cunkebao_v3/Server/scripts/workphone_bff_acceptance.sh

🔗 关联导航

方向 文档
↑ 上级索引 [[5、接口/02-业务对接/README
↔ 相关 接口规范 · 微信全功能矩阵_v8.0.56 · 工作手机API全量接口目录 · [[开发文档/README