member-marketing API / MCP
版本 0.3 · 面向商品中心、公众号数据采集、Agent 可验证交付及企微审批待办。
product_id → article_id → msg_id → corresponding_article_key → 唯一标题兜底
只有唯一标题匹配才允许兜底;同名或相近的多个候选不会自动写入,防止串商品。采集器应尽量同时上报 product_id、article_id、msg_id。
鉴权与调用身份
外部请求使用系统 Basic Auth;受保护的内部接口由工具网关注入 X-API-Key。Agent 不直接持有内部 API Key。
| Header / 环境变量 | 用途 |
|---|---|
X-Agent-ID | 必填的 Agent 身份,用于工具白名单与审计。 |
X-Task-ID | 可选,关联销转 CRM / member-marketing 任务。 |
X-Run-ID | 可选,关联 sandbox 运行与交付物。 |
MEMBER_MARKETING_BASIC_AUTH_* | 由宿主机环境注入 MCP 进程,不写入 workspace 文档。 |
Agent 调用流程
- 调用
mm_sandbox_run_start登记隔离运行。 - 在 workspace 中完成任务;需要业务数据时调用获准的 MCP 工具。
- 调用
mm_artifact_upload上传文件,获得artifact_id、下载链接和 SHA-256。 - 调用
mm_sandbox_run_complete绑定交付物并结束运行。 - 任务执行回写时携带
artifact_ids;没有真实证据的文字产出不能进入 verified。
双设备 Agent 团队调用方式
同一套系统支持两种调用模式:生产建议走中心队列调度;联调或单任务回放可走工作流直调。所有写操作仍需遵守审批与验收门禁。
| 模式 | 适用场景 | 关键接口 |
|---|---|---|
| 中心队列调度(推荐生产) | 多 Agent 协同、可追踪状态机、Worker 拉取执行 | POST /api/agent-dispatch/tasks/:taskId/preflightPOST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/agent-dispatch/worker/claimPOST /api/agent-dispatch/worker/jobs/:jobId/heartbeatPOST /api/agent-dispatch/worker/jobs/:jobId/result |
| 固定工作流直调(联调/回放) | 已知 task_id 时快速执行固定流程 |
GET /api/tasks/agent-workflows?role=content|community|sales|strategy|tech|qaPOST /api/tasks/agent-workflows/matchPOST /api/tasks/agent-workflows/preflightPOST /api/tasks/agent-workflows/execute |
| 工具网关模式(Agent 侧) | 按 X-Agent-ID 白名单执行工具并留审计 |
GET /api/tasks/tool-gateway/manifestPOST /api/tasks/tool-gateway/call(可调用 agent_workflow_execute 或 agent_workflow.<workflow_id>) |
Windows 设备团队(worker_windows_chengyuan)
| Agent | 调用方式 | 接口 | 常用 workflow_id |
|---|---|---|---|
main |
默认获客入口(content 身份别名),建议工作流直调 | POST /api/tasks/agent-workflows/executeheader: X-Agent-ID: main队列模式建议使用 canonical: huoke-agent |
paid_content_growth_closed_loopcontent_topic_planningcontent_draft_production |
huoke-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
paid_content_growth_closed_looppaid_content_growth_data_product_reviewpaid_content_growth_action_selectionpaid_content_growth_notion_draftpaid_content_growth_wechat_draft |
huiyuan-agent |
队列调度(会员激活主责) | POST /api/agent-dispatch/tasks/:taskId/enqueuebody: {"agent_id":"huiyuan-agent","preferred_device_id":"worker_windows_chengyuan"} |
h5_paid_buyer_activation_campaigncommunity_daily_touch |
siyu-agent |
队列调度(触达执行) | POST /api/agent-dispatch/tasks/:taskId/enqueuebody: {"agent_id":"siyu-agent","preferred_device_id":"worker_windows_chengyuan"} |
h5_private_invite_deliverycommunity_daily_touchcommunity_engagement |
xiaozhuan-agent |
队列调度(销转承接) | POST /api/agent-dispatch/tasks/:taskId/enqueuebody: {"agent_id":"xiaozhuan-agent","preferred_device_id":"worker_windows_chengyuan"} |
h5_activation_sales_handoffsales_lead_intakesales_product_matchingsales_deal_handoff |
ops-agent |
community 身份别名;建议工作流直调 | POST /api/tasks/agent-workflows/executeheader: X-Agent-ID: ops-agent队列模式建议使用 canonical: community-agent |
community_daily_touchcommunity_moments_campaignh5_group_reminder_delivery |
Mac mini 设备团队(worker_macmini_guishuiyulong)
| Agent | 调用方式 | 接口 | 常用 workflow_id |
|---|---|---|---|
strategy-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
strategy-brain-weekly-growth-loopstrategy-brain-priority-allocationstrategy-brain-growth-experiment |
content-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
h5_invite_copy_productioncontent_topic_planningcontent_draft_productioncontent_data_review |
product-agent |
content 身份别名;建议工作流直调 | POST /api/tasks/agent-workflows/executebody: {"agent_id":"product-agent","workflow_id":"content_product_conversion","task_id":"task_xxx"} |
content_product_conversioncontent_asset_library |
community-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
h5_group_reminder_deliverycommunity_daily_touchcommunity_moments_campaign |
sales-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
sales_lead_intakesales_opening_chatsales_follow_upsales_deal_handoff |
crm-sales-agent |
sales 身份别名;建议工作流直调 | POST /api/tasks/agent-workflows/executebody: {"agent_id":"crm-sales-agent","workflow_id":"sales_need_diagnosis","task_id":"task_xxx"} |
sales_need_diagnosissales_objection_handlingsales_data_review |
tech-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
h5_activation_technical_recoverytech-integration-validationtech-incident-responsetech-monitoring-alerting |
sync-agent |
tech 身份别名;建议工作流直调 | POST /api/tasks/agent-workflows/executebody: {"agent_id":"sync-agent","workflow_id":"tech-automation-implementation","task_id":"task_xxx"} |
tech-automation-implementationtech-release-controltech-ops-retrospective |
qa-agent |
队列调度或工作流直调 | POST /api/agent-dispatch/tasks/:taskId/enqueuePOST /api/tasks/agent-workflows/execute |
h5_activation_quality_reviewqa-acceptance-criteria-definitionqa-retest-closure |
说明:main、product-agent、ops-agent、crm-sales-agent、sync-agent 属于 canonical 身份组别名。若队列 preflight 出现角色或 agent 不兼容,请改用对应 canonical Agent 重新 enqueue。
调度请求样例
{
"task_id": "task_xxx",
"agent_id": "huoke-agent",
"preferred_device_id": "worker_windows_chengyuan",
"workflow_id": "paid_content_growth_closed_loop",
"idempotency_key": "task_xxx:huoke-agent:v1"
}
{
"task_id": "task_yyy",
"agent_id": "strategy-agent",
"preferred_device_id": "worker_macmini_guishuiyulong",
"workflow_id": "strategy-brain-weekly-growth-loop",
"idempotency_key": "task_yyy:strategy-agent:v1"
}
核心 HTTP 接口
/api/tasks/tool-gateway/manifest按 X-Agent-ID 返回该 Agent 可见工具。
/api/tasks/tool-gateway/call执行白名单中的工具并写入调用审计。
/api/artifacts上传文本或 Base64 文件,最大尺寸由服务端配置。
/api/artifacts按 task、run、agent 查询交付物。
/api/sandbox/runs登记 filesystem / docker / sandbox_agent / openai_sandbox 运行。
/api/sandbox/runs/complete结束运行并绑定交付物证据。
/api/products读取 Notion 商品主数据与公众号付费映射。
/api/products/writeback-status读取付费数据回写 Notion 的定时配置(启用状态、间隔、每日时间、下次每日运行时间、是否运行中)及最近回写记录;参数 limit(1–30,默认 8)。
/api/products/writeback-trigger立即回写一次(非试运行,来源记为 manual_ui):将最新公众号付费快照中付费人数有变化的商品,写入 Notion 付费文章库的「付费人数」「统计日期」。运行中会复用同一次任务,单次最长 20 分钟,超时记为 failed。
/api/products/writeback服务调用回写,需 X-API-Key 或 X-Service-Token。dry_run 默认 true,仅预览候选;传 false 才写入;trigger_source 标记来源。
/api/products/writeback-runs服务调用,需 X-API-Key 或 X-Service-Token。读取完整回写审计记录,含逐商品明细与下游同步结果;状态:running / success / noop / partial / failed / interrupted / dry_run。
/api/tasks/article-stats-ingest写入单篇公众号传播数据,稳定键为 msg_id + item_idx。
/api/wecom-approval-todos/status读取企微审批应用、模板、审批人、同步队列及权限阻塞状态。
/api/wecom-approval-todos按状态查询 Agent 人工闸门与企微审批单的映射。
/api/wecom-approval-todos/sync立即扫描待审批来源、幂等创建企微审批待办并回收审批结果。
/api/wecom-approval-todos/:id/retry重试待配置、同步失败、状态轮询或已批准但仍受前置依赖阻塞的待办。
/api/h5-activation/delivery-attempts/reconcile回读企微成员任务与目标发送结果;只有两项均成功才生成私域发送回执。
/api/h5-activation/campaigns/repair-execution-state撤销 H5 阶段错误完成态、冻结未释放目标并重锁 QA/销售;默认仅返回修复预览,apply=true 才写入。
企微审批待办闭环
以下来源会自动同步到企微「审批」中的个人待办:战役名单与文案放行、社群发送、公众号草稿、朋友圈/群推送,以及没有独立审批对象且已绑定项目的 awaiting_approval Agent 任务。
- 系统为每个来源版本计算
source_fingerprint,同一版本只创建一条企微审批,避免重复提醒。 - 历史通用审批只同步最近 7 天内仍待处理的记录;战役和社群发送闸门按当前有效状态同步,避免旧任务污染个人待办。
- 企微审批通过后才创建 Task Run 或调用对应执行接口;审批本身不计入发送、付款或业务完成。
- 企微驳回会回写来源状态;审批期间名单、文案或物料发生变化时,旧审批不会执行。
- 社群发送继续遵守单群串行门禁:后一群即使提前获批,也会等待前一群的企微确认和真实回执。
| 环境变量 | 用途 |
|---|---|
WECOM_APPROVAL_SECRET | 企微「审批」应用 Secret;现有自建应用已获审批权限时可省略并复用 WECOM_SECRET。 |
WECOM_APPROVAL_TEMPLATE_ID | 可选。未配置时系统尝试创建“Agent 执行审批”模板并持久化模板 ID。 |
WECOM_APPROVER_USER_ID | 默认审批人;未配置时回退到 WECOM_SENDER_USER_ID。 |
WECOM_APPROVAL_CREATOR_USER_ID | 审批发起人;未配置时使用默认审批人。 |
WECOM_APPROVAL_SYNC_ENABLED | 是否启用自动同步,默认 true。 |
WECOM_APPROVAL_SYNC_INTERVAL_MS | 扫描与状态回收周期,默认 60 秒、最小 30 秒。 |
公众号文章数据字段
| 类型 | 字段 | 规则 |
|---|---|---|
| 稳定标识 | product_id、article_id、msg_id、item_idx、corresponding_article_key | 采集时原样保留,禁止由标题反推伪造。 |
| 传播 | read_uv、avg_read_time_minutes、new_follow_uv、share_uv、share_read_uv | 页面缺失的值写 null,不写 0。 |
| 付费 | new_paid、paid_users、actual_revenue | 商品中心读取累计值;日快照保留采集日期。 |
| 溯源 | account、ref_date、collected_date、source | 用于审计与去重。 |
付费数据回写 Notion
把公众号后台最新付费快照中付费人数有变化的商品,回写到 Notion「付费文章库」的 付费人数 与 统计日期(统计日期为快照日期,不是运行当天)。实际收入(元) 等为 Notion 公式,不写入。只有匹配分不低于 0.8 且快照不早于 Notion 现有统计日期的商品才会更新。商品中心页的「Notion 回写触发器」卡片即使用下列接口。
/api/products/writeback-status站点登录即可。返回定时配置与最近回写记录。
/api/products/writeback-trigger站点登录即可。立即真实回写一次,来源记为 manual_ui。
/api/products/writeback服务调用,需 X-API-Key 或 X-Service-Token。dry_run 默认 true,只预览不写入。
/api/products/writeback-runs服务调用,需密钥。完整审计记录,含逐商品明细与下游同步结果,limit 最大 200。
| 配置项 | 默认 | 说明 |
|---|---|---|
NOTION_PAID_ARTICLE_WRITEBACK_ENABLED | true | 是否启用自动回写。 |
NOTION_PAID_ARTICLE_WRITEBACK_INTERVAL_MS | 30 分钟 | 循环间隔,最小 60 秒,从服务启动时起算。 |
NOTION_PAID_ARTICLE_WRITEBACK_DAILY_TIME | 02:00 | 每日固定时间(服务器本地时间,HH:MM);设为空字符串则关闭。 |
NOTION_PAID_ARTICLE_WRITEBACK_ON_START | true | 启动约 1 分钟后是否先跑一次。 |
NOTION_PAID_ARTICLE_WRITEBACK_MIN_MATCH_SCORE | 0.8 | 商品与公众号文章的最低匹配分。 |
writeback-status 返回字段:enabled、scheduler_running、interval_minutes、daily_time、next_daily_run_at(UTC ISO 时间)、min_match_score、in_flight(是否正在回写)、latest_run、runs。记录字段:id、trigger_source、status、snapshot_date、candidate_count、updated_count、skipped_count、failed_count、error、started_at、finished_at(数据库时间为 UTC)。
| 状态 | 含义 |
|---|---|
running | 回写中。 |
success / noop | 已更新 / 无需更新(Notion 已是最新)。 |
partial / failed | 部分页面失败 / 全部失败或整体超时,下一轮会自动重试未更新的页面。 |
interrupted | 服务重启或任务中断时残留的 running 记录,启动时自动标记。 |
dry_run | 仅预览,未写入。 |
可靠性:单个 Notion 页面更新遇网络错误、429、5xx 最多重试 3 次;整次回写最长 20 分钟、下游商品同步最长 5 分钟,超时记为 failed 并释放运行锁;同一时间只运行一次,重复触发会复用进行中的任务。
curl -X POST "$BASE/api/products/writeback" \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"dry_run": true, "trigger_source": "ops_check"}'
MCP 配置
{
"mcpServers": {
"member_marketing": {
"command": "node",
"args": ["D:/clawdbot/ops/member-marketing/mcp-tool-gateway/server.mjs"],
"env": {
"MEMBER_MARKETING_BASE_URL": "https://ops.chengyuan.team/member-marketing",
"MEMBER_MARKETING_AGENT_ID": "huoke-agent"
}
}
}
}
Basic Auth 只通过 Windows 服务或 OpenClaw 宿主进程环境变量注入。每个 Agent 使用独立配置文件,服务端仍会再次校验白名单。
完整机器可读规范
下载 OpenAPI 3.1 JSON。MCP 工具名称以 mm_ 开头,可在工具中心或 mm_tool_gateway_manifest 中查看当前 Agent 实际权限。