跳到主要内容
开发者

将您的系统接入 Marcomm AI

在您自己的系统中读取新闻摘要、重要新闻和待审批事项,并通过自己的审批工具批准或驳回。API 在 Team 及以上套餐提供,需经过简短审核。

快速开始

  1. 1
    申请访问权限

    描述您的系统并选择所需数据。我们会逐一审核申请。

  2. 2
    创建密钥

    获批后,在“设置 → API”中创建密钥。密钥只显示一次,请将其保存到您的系统中。

  3. 3
    发送请求

    在 Authorization 请求头中携带密钥,然后调用下方任一端点。

请求示例

curl https://app.marcomm.works/api/v1/news/digest?days=7 \
  -H "Authorization: Bearer mc_live_..."

身份验证

每次请求都以 Bearer 令牌的形式发送密钥。个人密钥以创建者本人的身份操作,因此可以以其名义读取并处理审批。工作区密钥由管理员创建,只能读取。密钥可以设置过期时间、限制 IP 地址,也可以轮换:轮换后旧密钥仍可使用 24 小时。

权限范围

每个密钥只带有您的申请获批的权限范围。

news
新闻摘要、文章和媒体。
crisis
重要新闻和危机事件。
approvals
待审批事项,以及使用个人密钥批准或驳回。
content
读取新闻稿和博客文章。

端点

路径以 /api/v1 开头。读取端点使用 GET 并接受查询参数。响应为 JSON,格式为 {"data": ...}。

方法路径范围作用
GET/api/v1/news/digestnews某一时段的报道量、情感倾向和主要媒体。
GET/api/v1/news/articlesnews搜索新闻报道。
GET/api/v1/news/outletsnews报道您所关注公司的媒体。
GET/api/v1/crisis/incidentscrisis危机事件和重要文章。
GET/api/v1/approvalsapprovals等待密钥所有者处理的新闻稿和博客文章,以及密钥所有者发起审批的内容。
GET/api/v1/press-releasescontent列出新闻稿。
GET/api/v1/press-releases/{id}content单篇新闻稿,含导语和正文。
GET/api/v1/blog-postscontent列出博客文章。
GET/api/v1/blog-posts/{id}content单篇博客文章,含正文。
POST/api/v1/approvals/press-releases/{id}approvals批准或驳回等待密钥所有者处理的新闻稿。
POST/api/v1/approvals/blog-posts/{id}approvals批准或驳回等待密钥所有者处理的博客文章。

批准与驳回

向该条目发送 {"decision": "approve"} 或 {"decision": "reject", "comment": "..."}。驳回时必须附上说明。决定遵循与应用和 Slack 相同的规则,并记录在密钥所有者名下。当正文包含需要确认的措辞时,您会收到带有警告的 409 confirmation_required,此时可加上 "force": true 重新发送请求。

curl -X POST https://app.marcomm.works/api/v1/approvals/press-releases/<id> \
  -H "Authorization: Bearer mc_live_..." \
  -H "Content-Type: application/json" \
  -d '{"decision":"reject","comment":"Please fix the headline."}'

速率限制

限制按工作区设置,分为每分钟和每天(UTC)。响应都会带有下列请求头。超出限制时,您会收到 429 和 Retry-After。如需提高限制,请在“设置 → API”中申请,由我们的团队审核。

X-RateLimit-Limit
每分钟允许的请求数。
X-RateLimit-Remaining
当前分钟内剩余的请求数。
X-RateLimit-Reset
分钟窗口重置时的 Unix 时间。
X-RateLimit-Day-Limit
每天允许的请求数。
X-RateLimit-Day-Remaining
今天剩余的请求数。
Retry-After
重试前需等待的秒数。仅在 429 时返回。

错误

错误以 JSON 返回,格式为 {"error": {"code": ..., "message": ...}}。

错误码状态含义
invalid_key401密钥缺失、格式错误或已被撤销。
expired401密钥已过期。请创建新密钥或轮换密钥。
ip_denied403该密钥仅限其他 IP 地址使用。
plan_required403工作区未订阅 Team 或更高套餐。
access_required403此工作区尚未获批使用 API。
suspended403此工作区的 API 访问已被暂停。
scope_denied403密钥不具备此端点所需的权限范围。
personal_key_required403只有个人密钥可以批准或驳回。
denied403密钥所有者的角色不允许此操作。
unknown_endpoint404不存在该端点。
comment_required400驳回时必须说明原因。
confirmation_required409警告需要确认。请将 force 设为 true 后重新发送。
rate_limited429超出了每分钟限制。
daily_limit429已达到每日限制。

Webhook

警报、审批请求和早间简报也可以推送到您的系统。在“设置 → API → Webhook”中添加接收地址。每个请求都是 JSON,包含字段 event(alert、approval 或 briefing)、workspace、title、text、url、data 和 sentAt。审批请求带有 data.kind(press_release、blog 或 event)和 data.id,可据此通过 API 读取并处理。

每个请求都带有签名。使用您的签名密钥对原始请求体计算 HMAC-SHA256,并与格式为 sha256=<hex> 的 X-Marcomm-Signature 请求头比对。不匹配的请求应予拒绝。

在 Node.js 中验证 Webhook

import { createHmac, timingSafeEqual } from 'node:crypto';

export function isFromMarcomm(rawBody: string, signature: string, secret: string) {
  const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && timingSafeEqual(a, b);
}

接入指南

在您的审批系统中批准

  1. 添加一个通用 Webhook 接收地址,并开启审批请求。
  2. 收到审批 Webhook 时,验证签名并读取 data.kind 和 data.id。
  3. 在您的审批系统中展示该请求。如需正文,可通过 GET press-releases/{id} 或 blog-posts/{id} 读取。
  4. 使用决策人的个人密钥提交决定。活动和邮件发送需通过消息中的链接在应用内决定。

将新闻摘要接入您的看板

  1. 创建带有 news 和 crisis 权限范围的工作区密钥。
  2. 按计划调用 news/digest,例如每天早晨。
  3. 如需自建警报,可更频繁地调用 crisis/incidents,并留意 X-RateLimit 请求头,避免超出限制。

在聊天工具中接收警报

  1. 对于 Teams 和 Google Chat,创建聊天室的 Webhook URL,并在“设置 → API → Webhook”中添加为接收地址。
  2. 对于 JANDI、Dooray! 和 Chatwork,请在“设置 → 集成”中连接。
  3. 为每个接收地址选择要接收警报、审批请求和早间简报中的哪几项,然后发送一条测试消息。

准备好接入了吗?

工作区所有者或管理员在“设置 → API”中提交申请。审核完成后,您会收到邮件和应用内通知。

打开 API 设置