跳到主要內容
開發者

將您的系統串接至 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 設定