システムを 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 を使い、クエリパラメータを受け取ります。レスポンスは {"data": ...} 形式の JSON です。
| メソッド | パス | スコープ | 機能 |
|---|---|---|---|
| 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 | リード文と本文を含むプレスリリース 1 件。 |
| GET | /api/v1/blog-posts | content | ブログ記事の一覧。 |
| 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_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 | 1 分あたりの上限を超えました。 |
| daily_limit | 429 | 1 日あたりの上限に達しました。 |
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);
}接続ガイド
承認システムから承認する
- 汎用の 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 設定を開く