本文へスキップ
開発者

システムを 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 を使い、クエリパラメータを受け取ります。レスポンスは {"data": ...} 形式の JSON です。

メソッドパススコープ機能
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リード文と本文を含むプレスリリース 1 件。
GET/api/v1/blog-postscontentブログ記事の一覧。
GET/api/v1/blog-posts/{id}content本文を含むブログ記事 1 件。
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."}'

レート制限

制限はワークスペースごとに、1 分あたりと 1 日あたり(UTC)で設定されます。レスポンスには下記のヘッダーが付きます。制限を超えると Retry-After 付きで 429 が返ります。上限の引き上げは「設定 > API」から申請してください。担当チームが審査します。

X-RateLimit-Limit
1 分あたりの許可リクエスト数。
X-RateLimit-Remaining
現在の 1 分間で残っているリクエスト数。
X-RateLimit-Reset
1 分間のウィンドウがリセットされる Unix 時刻。
X-RateLimit-Day-Limit
1 日あたりの許可リクエスト数。
X-RateLimit-Day-Remaining
今日の残りリクエスト数。
Retry-After
再試行までの待機秒数。429 のときのみ付きます。

エラー

エラーは {"error": {"code": ..., "message": ...}} 形式の JSON で返ります。

コードステータス意味
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_limited4291 分あたりの上限を超えました。
daily_limit4291 日あたりの上限に達しました。

Webhook

アラート、承認依頼、朝のブリーフィングは、お使いのシステムへプッシュすることもできます。「設定 > API > Webhook」で送信先を追加してください。各リクエストは、event(alert、approval、briefing)、workspace、title、text、url、data、sentAt の各フィールドを持つ JSON です。承認依頼には 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 設定を開く