우리 시스템을 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 | 보도자료 한 건(리드 문단과 본문). |
| 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)로 정합니다. 모든 응답에 아래 머리글이 붙고, 한도를 넘으면 Retry-After 와 함께 429 가 옵니다. 한도를 올리려면 설정 > API 에서 상향을 요청하세요. 팀이 심사합니다.
- X-RateLimit-Limit
- 분당 허용 호출 수.
- X-RateLimit-Remaining
- 이번 분에 남은 호출 수.
- X-RateLimit-Reset
- 이번 분 구간이 끝나는 Unix 시각.
- X-RateLimit-Day-Limit
- 하루 허용 호출 수.
- 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 | 분당 한도를 넘었습니다. |
| daily_limit | 429 | 일 한도에 도달했습니다. |
웹훅
알림, 승인 요청, 아침 브리핑을 회사 시스템으로 보낼 수도 있습니다. 설정 > API > 웹훅에서 받는 곳을 추가하세요. 요청은 event(alert · approval · briefing), workspace, title, text, url, data, sentAt 칸을 가진 JSON 입니다. 승인 요청에는 data.kind(press_release · blog · event)와 data.id 가 들어 있어, API 로 내용을 읽고 결정하는 데 쓸 수 있습니다.
요청에는 서명이 붙습니다. 받은 본문 원문에 서명 비밀로 HMAC-SHA256 을 계산해 X-Marcomm-Signature 머리글(sha256=<hex> 모양)과 맞춰 보고, 맞지 않으면 거절하세요.
Node.js 에서 웹훅 서명 확인
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);
}연결 가이드
사내 결재 시스템에서 승인하기
- 일반 웹훅 받는 곳을 추가하고 승인 요청을 켭니다.
- 승인 웹훅이 오면 서명을 확인하고 data.kind 와 data.id 를 읽습니다.
- 결재 시스템에 요청을 띄웁니다. 본문이 필요하면 GET press-releases/{id} 또는 blog-posts/{id} 로 읽습니다.
- 결정하는 사람의 개인 키로 결정을 보냅니다. 이벤트와 메일 발송 승인은 메시지의 링크로 앱에서 결정합니다.
뉴스 다이제스트를 우리 대시보드에 넣기
- news 와 crisis 범위의 워크스페이스 키를 만듭니다.
- news/digest 를 정해진 시각(예: 매일 아침)에 부릅니다.
- 자체 알림이 필요하면 crisis/incidents 를 더 자주 부르되, X-RateLimit 머리글을 보며 한도 안에서 부르세요.
대화방으로 알림 받기
- Teams 와 Google Chat 은 대화방의 웹훅 주소를 만들어 설정 > API > 웹훅에 받는 곳으로 추가합니다.
- 잔디, 두레이, Chatwork 는 설정 > 연동에서 연결합니다.
- 받는 곳마다 알림, 승인 요청, 아침 브리핑 중 받을 것을 고르고 시험 메시지를 보냅니다.
연결할 준비가 되셨나요?
워크스페이스 소유자나 관리자가 설정 > API 에서 신청합니다. 심사가 끝나면 메일과 앱 알림으로 알려 드립니다.
API 설정 열기