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 调用流程

  1. 调用 mm_sandbox_run_start 登记隔离运行。
  2. 在 workspace 中完成任务;需要业务数据时调用获准的 MCP 工具。
  3. 调用 mm_artifact_upload 上传文件,获得 artifact_id、下载链接和 SHA-256。
  4. 调用 mm_sandbox_run_complete 绑定交付物并结束运行。
  5. 任务执行回写时携带 artifact_ids;没有真实证据的文字产出不能进入 verified。

双设备 Agent 团队调用方式

同一套系统支持两种调用模式:生产建议走中心队列调度;联调或单任务回放可走工作流直调。所有写操作仍需遵守审批与验收门禁。

模式适用场景关键接口
中心队列调度(推荐生产) 多 Agent 协同、可追踪状态机、Worker 拉取执行 POST /api/agent-dispatch/tasks/:taskId/preflight
POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/agent-dispatch/worker/claim
POST /api/agent-dispatch/worker/jobs/:jobId/heartbeat
POST /api/agent-dispatch/worker/jobs/:jobId/result
固定工作流直调(联调/回放) 已知 task_id 时快速执行固定流程 GET /api/tasks/agent-workflows?role=content|community|sales|strategy|tech|qa
POST /api/tasks/agent-workflows/match
POST /api/tasks/agent-workflows/preflight
POST /api/tasks/agent-workflows/execute
工具网关模式(Agent 侧) 按 X-Agent-ID 白名单执行工具并留审计 GET /api/tasks/tool-gateway/manifest
POST /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/execute
header: X-Agent-ID: main
队列模式建议使用 canonical:huoke-agent
paid_content_growth_closed_loop
content_topic_planning
content_draft_production
huoke-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
paid_content_growth_closed_loop
paid_content_growth_data_product_review
paid_content_growth_action_selection
paid_content_growth_notion_draft
paid_content_growth_wechat_draft
huiyuan-agent 队列调度(会员激活主责) POST /api/agent-dispatch/tasks/:taskId/enqueue
body: {"agent_id":"huiyuan-agent","preferred_device_id":"worker_windows_chengyuan"}
h5_paid_buyer_activation_campaign
community_daily_touch
siyu-agent 队列调度(触达执行) POST /api/agent-dispatch/tasks/:taskId/enqueue
body: {"agent_id":"siyu-agent","preferred_device_id":"worker_windows_chengyuan"}
h5_private_invite_delivery
community_daily_touch
community_engagement
xiaozhuan-agent 队列调度(销转承接) POST /api/agent-dispatch/tasks/:taskId/enqueue
body: {"agent_id":"xiaozhuan-agent","preferred_device_id":"worker_windows_chengyuan"}
h5_activation_sales_handoff
sales_lead_intake
sales_product_matching
sales_deal_handoff
ops-agent community 身份别名;建议工作流直调 POST /api/tasks/agent-workflows/execute
header: X-Agent-ID: ops-agent
队列模式建议使用 canonical:community-agent
community_daily_touch
community_moments_campaign
h5_group_reminder_delivery

Mac mini 设备团队(worker_macmini_guishuiyulong)

Agent调用方式接口常用 workflow_id
strategy-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
strategy-brain-weekly-growth-loop
strategy-brain-priority-allocation
strategy-brain-growth-experiment
content-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
h5_invite_copy_production
content_topic_planning
content_draft_production
content_data_review
product-agent content 身份别名;建议工作流直调 POST /api/tasks/agent-workflows/execute
body: {"agent_id":"product-agent","workflow_id":"content_product_conversion","task_id":"task_xxx"}
content_product_conversion
content_asset_library
community-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
h5_group_reminder_delivery
community_daily_touch
community_moments_campaign
sales-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
sales_lead_intake
sales_opening_chat
sales_follow_up
sales_deal_handoff
crm-sales-agent sales 身份别名;建议工作流直调 POST /api/tasks/agent-workflows/execute
body: {"agent_id":"crm-sales-agent","workflow_id":"sales_need_diagnosis","task_id":"task_xxx"}
sales_need_diagnosis
sales_objection_handling
sales_data_review
tech-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
h5_activation_technical_recovery
tech-integration-validation
tech-incident-response
tech-monitoring-alerting
sync-agent tech 身份别名;建议工作流直调 POST /api/tasks/agent-workflows/execute
body: {"agent_id":"sync-agent","workflow_id":"tech-automation-implementation","task_id":"task_xxx"}
tech-automation-implementation
tech-release-control
tech-ops-retrospective
qa-agent 队列调度或工作流直调 POST /api/agent-dispatch/tasks/:taskId/enqueue
POST /api/tasks/agent-workflows/execute
h5_activation_quality_review
qa-acceptance-criteria-definition
qa-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 接口

GET/api/tasks/tool-gateway/manifest

按 X-Agent-ID 返回该 Agent 可见工具。

POST/api/tasks/tool-gateway/call

执行白名单中的工具并写入调用审计。

POST/api/artifacts

上传文本或 Base64 文件,最大尺寸由服务端配置。

GET/api/artifacts

按 task、run、agent 查询交付物。

POST/api/sandbox/runs

登记 filesystem / docker / sandbox_agent / openai_sandbox 运行。

POST/api/sandbox/runs/complete

结束运行并绑定交付物证据。

GET/api/products

读取 Notion 商品主数据与公众号付费映射。

GET/api/products/writeback-status

读取付费数据回写 Notion 的定时配置(启用状态、间隔、每日时间、下次每日运行时间、是否运行中)及最近回写记录;参数 limit(1–30,默认 8)。

POST/api/products/writeback-trigger

立即回写一次(非试运行,来源记为 manual_ui):将最新公众号付费快照中付费人数有变化的商品,写入 Notion 付费文章库的「付费人数」「统计日期」。运行中会复用同一次任务,单次最长 20 分钟,超时记为 failed。

POST/api/products/writeback

服务调用回写,需 X-API-Key 或 X-Service-Token。dry_run 默认 true,仅预览候选;传 false 才写入;trigger_source 标记来源。

GET/api/products/writeback-runs

服务调用,需 X-API-Key 或 X-Service-Token。读取完整回写审计记录,含逐商品明细与下游同步结果;状态:running / success / noop / partial / failed / interrupted / dry_run。

POST/api/tasks/article-stats-ingest

写入单篇公众号传播数据,稳定键为 msg_id + item_idx。

GET/api/wecom-approval-todos/status

读取企微审批应用、模板、审批人、同步队列及权限阻塞状态。

GET/api/wecom-approval-todos

按状态查询 Agent 人工闸门与企微审批单的映射。

POST/api/wecom-approval-todos/sync

立即扫描待审批来源、幂等创建企微审批待办并回收审批结果。

POST/api/wecom-approval-todos/:id/retry

重试待配置、同步失败、状态轮询或已批准但仍受前置依赖阻塞的待办。

POST/api/h5-activation/delivery-attempts/reconcile

回读企微成员任务与目标发送结果;只有两项均成功才生成私域发送回执。

POST/api/h5-activation/campaigns/repair-execution-state

撤销 H5 阶段错误完成态、冻结未释放目标并重锁 QA/销售;默认仅返回修复预览,apply=true 才写入。

企微审批待办闭环

以下来源会自动同步到企微「审批」中的个人待办:战役名单与文案放行、社群发送、公众号草稿、朋友圈/群推送,以及没有独立审批对象且已绑定项目的 awaiting_approval Agent 任务。

  1. 系统为每个来源版本计算 source_fingerprint,同一版本只创建一条企微审批,避免重复提醒。
  2. 历史通用审批只同步最近 7 天内仍待处理的记录;战役和社群发送闸门按当前有效状态同步,避免旧任务污染个人待办。
  3. 企微审批通过后才创建 Task Run 或调用对应执行接口;审批本身不计入发送、付款或业务完成。
  4. 企微驳回会回写来源状态;审批期间名单、文案或物料发生变化时,旧审批不会执行。
  5. 社群发送继续遵守单群串行门禁:后一群即使提前获批,也会等待前一群的企微确认和真实回执。
环境变量用途
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 回写触发器」卡片即使用下列接口。

GET/api/products/writeback-status

站点登录即可。返回定时配置与最近回写记录。

POST/api/products/writeback-trigger

站点登录即可。立即真实回写一次,来源记为 manual_ui。

POST/api/products/writeback

服务调用,需 X-API-Key 或 X-Service-Token。dry_run 默认 true,只预览不写入。

GET/api/products/writeback-runs

服务调用,需密钥。完整审计记录,含逐商品明细与下游同步结果,limit 最大 200。

配置项默认说明
NOTION_PAID_ARTICLE_WRITEBACK_ENABLEDtrue是否启用自动回写。
NOTION_PAID_ARTICLE_WRITEBACK_INTERVAL_MS30 分钟循环间隔,最小 60 秒,从服务启动时起算。
NOTION_PAID_ARTICLE_WRITEBACK_DAILY_TIME02:00每日固定时间(服务器本地时间,HH:MM);设为空字符串则关闭。
NOTION_PAID_ARTICLE_WRITEBACK_ON_STARTtrue启动约 1 分钟后是否先跑一次。
NOTION_PAID_ARTICLE_WRITEBACK_MIN_MATCH_SCORE0.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 实际权限。