将您的系统接入 Marcomm AI
在您自己的系统中读取新闻摘要、重要新闻和待审批事项,并通过自己的审批工具批准或驳回。API 在 Team 及以上套餐提供,需经过简短审核。
快速开始
- 1申请访问权限
描述您的系统并选择所需数据。我们会逐一审核申请。
- 2创建密钥
获批后,在“设置 → API”中创建密钥。密钥只显示一次,请将其保存到您的系统中。
- 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/digest | news | 某一时段的报道量、情感倾向和主要媒体。 |
| GET | /api/v1/news/articles | news | 搜索新闻报道。 |
| GET | /api/v1/news/outlets | news | 报道您所关注公司的媒体。 |
| GET | /api/v1/crisis/incidents | crisis | 危机事件和重要文章。 |
| GET | /api/v1/approvals | approvals | 等待密钥所有者处理的新闻稿和博客文章,以及密钥所有者发起审批的内容。 |
| GET | /api/v1/press-releases | content | 列出新闻稿。 |
| GET | /api/v1/press-releases/{id} | content | 单篇新闻稿,含导语和正文。 |
| GET | /api/v1/blog-posts | content | 列出博客文章。 |
| 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_key | 401 | 密钥缺失、格式错误或已被撤销。 |
| expired | 401 | 密钥已过期。请创建新密钥或轮换密钥。 |
| ip_denied | 403 | 该密钥仅限其他 IP 地址使用。 |
| plan_required | 403 | 工作区未订阅 Team 或更高套餐。 |
| access_required | 403 | 此工作区尚未获批使用 API。 |
| suspended | 403 | 此工作区的 API 访问已被暂停。 |
| scope_denied | 403 | 密钥不具备此端点所需的权限范围。 |
| personal_key_required | 403 | 只有个人密钥可以批准或驳回。 |
| denied | 403 | 密钥所有者的角色不允许此操作。 |
| unknown_endpoint | 404 | 不存在该端点。 |
| comment_required | 400 | 驳回时必须说明原因。 |
| confirmation_required | 409 | 警告需要确认。请将 force 设为 true 后重新发送。 |
| rate_limited | 429 | 超出了每分钟限制。 |
| daily_limit | 429 | 已达到每日限制。 |
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);
}接入指南
在您的审批系统中批准
- 添加一个通用 Webhook 接收地址,并开启审批请求。
- 收到审批 Webhook 时,验证签名并读取 data.kind 和 data.id。
- 在您的审批系统中展示该请求。如需正文,可通过 GET press-releases/{id} 或 blog-posts/{id} 读取。
- 使用决策人的个人密钥提交决定。活动和邮件发送需通过消息中的链接在应用内决定。
将新闻摘要接入您的看板
- 创建带有 news 和 crisis 权限范围的工作区密钥。
- 按计划调用 news/digest,例如每天早晨。
- 如需自建警报,可更频繁地调用 crisis/incidents,并留意 X-RateLimit 请求头,避免超出限制。
在聊天工具中接收警报
- 对于 Teams 和 Google Chat,创建聊天室的 Webhook URL,并在“设置 → API → Webhook”中添加为接收地址。
- 对于 JANDI、Dooray! 和 Chatwork,请在“设置 → 集成”中连接。
- 为每个接收地址选择要接收警报、审批请求和早间简报中的哪几项,然后发送一条测试消息。
准备好接入了吗?
工作区所有者或管理员在“设置 → API”中提交申请。审核完成后,您会收到邮件和应用内通知。
打开 API 设置