Lompat ke konten
MarcommAI
Developer

Hubungkan sistem Anda ke Marcomm AI

Baca ringkasan berita, berita kritis, dan persetujuan yang tertunda dari sistem Anda sendiri, lalu setujui atau tolak dari alat persetujuan Anda. API tersedia di paket Team ke atas, setelah peninjauan singkat.

Mulai

  1. 1
    Ajukan akses

    Jelaskan sistem Anda dan pilih data yang dibutuhkan. Kami meninjau setiap permohonan yang masuk.

  2. 2
    Buat kunci

    Setelah disetujui, buat kunci di Pengaturan, API. Kunci hanya ditampilkan sekali, jadi simpan di sistem Anda.

  3. 3
    Kirim permintaan

    Kirim kunci di header Authorization lalu panggil salah satu endpoint di bawah.

Contoh permintaan

curl https://app.marcomm.works/api/v1/news/digest?days=7 \
  -H "Authorization: Bearer mc_live_..."

Autentikasi

Kirim kunci Anda sebagai token Bearer pada setiap permintaan. Kunci pribadi bertindak sebagai orang yang membuatnya, sehingga dapat membaca dan memutuskan persetujuan atas nama orang tersebut. Kunci ruang kerja dibuat oleh admin dan hanya dapat membaca. Kunci dapat kedaluwarsa, dibatasi ke alamat IP tertentu, dan dirotasi: kunci lama tetap berfungsi selama 24 jam setelah rotasi.

Scope

Kunci hanya membawa scope yang disetujui untuk aplikasi Anda.

news
Ringkasan berita, artikel, dan media.
crisis
Berita kritis dan insiden krisis.
approvals
Persetujuan yang tertunda, serta menyetujui atau menolaknya dengan kunci pribadi.
content
Membaca siaran pers dan artikel blog.

Endpoint

Path diawali /api/v1. Endpoint baca memakai GET dan menerima parameter query. Responsnya JSON dengan bentuk {"data": ...}.

MetodePathScopeFungsi
GET/api/v1/news/digestnewsVolume pemberitaan, sentimen, dan media teratas untuk suatu periode.
GET/api/v1/news/articlesnewsCari pemberitaan.
GET/api/v1/news/outletsnewsMedia yang memberitakan perusahaan Anda.
GET/api/v1/crisis/incidentscrisisInsiden krisis dan artikel kritis.
GET/api/v1/approvalsapprovalsSiaran pers dan artikel blog yang menunggu pemilik kunci, serta yang persetujuannya diminta oleh pemilik kunci.
GET/api/v1/press-releasescontentDaftar siaran pers.
GET/api/v1/press-releases/{id}contentSatu siaran pers dengan paragraf pembuka dan isinya.
GET/api/v1/blog-postscontentDaftar artikel blog.
GET/api/v1/blog-posts/{id}contentSatu artikel blog dengan isinya.
POST/api/v1/approvals/press-releases/{id}approvalsMenyetujui atau menolak siaran pers yang menunggu pemilik kunci.
POST/api/v1/approvals/blog-posts/{id}approvalsMenyetujui atau menolak artikel blog yang menunggu pemilik kunci.

Setujui dan tolak

Kirim {"decision": "approve"} atau {"decision": "reject", "comment": "..."} ke item. Penolakan memerlukan komentar. Keputusan mengikuti aturan yang sama dengan aplikasi dan Slack, dan dicatat atas nama pemilik kunci. Jika teks memuat frasa yang perlu dikonfirmasi, Anda menerima 409 confirmation_required beserta peringatannya, dan dapat mengirim ulang permintaan dengan "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."}'

Batas laju

Batas ditetapkan per ruang kerja, per menit, dan per hari (UTC). Respons menyertakan header di bawah. Jika melewati batas, Anda menerima 429 dengan Retry-After. Untuk menaikkan batas, ajukan permintaan di Pengaturan, API. Tim kami akan meninjaunya.

X-RateLimit-Limit
Permintaan yang diizinkan per menit.
X-RateLimit-Remaining
Sisa permintaan pada menit berjalan.
X-RateLimit-Reset
Waktu Unix saat jendela menit direset.
X-RateLimit-Day-Limit
Permintaan yang diizinkan per hari.
X-RateLimit-Day-Remaining
Sisa permintaan hari ini.
Retry-After
Detik yang perlu ditunggu sebelum mencoba lagi. Hanya pada 429.

Kesalahan

Kesalahan mengembalikan JSON dengan bentuk {"error": {"code": ..., "message": ...}}.

KodeStatusArti
invalid_key401Kunci tidak ada, formatnya salah, atau sudah dicabut.
expired401Kunci sudah kedaluwarsa. Buat atau rotasi kunci.
ip_denied403Kunci dibatasi ke alamat IP lain.
plan_required403Ruang kerja tidak berada di paket Team ke atas.
access_required403Akses API belum disetujui untuk ruang kerja ini.
suspended403Akses API untuk ruang kerja ini ditangguhkan.
scope_denied403Kunci tidak memiliki scope yang dibutuhkan endpoint ini.
personal_key_required403Hanya kunci pribadi yang dapat menyetujui atau menolak.
denied403Peran pemilik kunci tidak mengizinkan hal ini.
unknown_endpoint404Endpoint tersebut tidak ada.
comment_required400Alasan wajib diisi untuk menolak.
confirmation_required409Peringatan perlu dikonfirmasi. Kirim ulang dengan force diatur ke true.
rate_limited429Batas per menit terlampaui.
daily_limit429Batas harian tercapai.

Webhook

Peringatan, permintaan persetujuan, dan ringkasan pagi juga dapat dikirim ke sistem Anda. Tambahkan tujuan di Pengaturan, API, Webhook. Setiap permintaan berupa JSON dengan kolom event (alert, approval, atau briefing), workspace, title, text, url, data, dan sentAt. Permintaan persetujuan membawa data.kind (press_release, blog, atau event) dan data.id, yang dapat Anda pakai untuk membaca dan memutuskan lewat API.

Permintaan ditandatangani. Hitung HMAC-SHA256 dari isi permintaan mentah dengan rahasia penandatanganan Anda, lalu bandingkan dengan header X-Marcomm-Signature yang berbentuk sha256=<hex>. Tolak permintaan yang tidak cocok.

Memverifikasi webhook di 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);
}

Panduan koneksi

Setujui dari sistem persetujuan Anda

  1. Tambahkan tujuan webhook generik dan aktifkan permintaan persetujuan.
  2. Saat webhook persetujuan masuk, verifikasi tanda tangan dan baca data.kind dan data.id.
  3. Tampilkan permintaan di sistem persetujuan Anda. Jika perlu, baca isinya dengan GET press-releases/{id} atau blog-posts/{id}.
  4. Kirim keputusan dengan kunci pribadi orang yang memutuskan. Event dan pengiriman email diputuskan di aplikasi lewat tautan di pesan.

Alirkan ringkasan berita ke dasbor Anda

  1. Buat kunci ruang kerja dengan scope news dan crisis.
  2. Panggil news/digest sesuai jadwal, misalnya setiap pagi.
  3. Panggil crisis/incidents lebih sering jika Anda ingin peringatan sendiri. Pantau header X-RateLimit agar tetap dalam batas.

Peringatan di chat Anda

  1. Untuk Teams dan Google Chat, buat URL webhook ruangan lalu tambahkan sebagai tujuan di Pengaturan, API, Webhook.
  2. Untuk JANDI, Dooray!, dan Chatwork, hubungkan dari Pengaturan, Integrasi.
  3. Pilih apakah setiap tujuan menerima peringatan, permintaan persetujuan, dan ringkasan pagi, lalu kirim pesan uji.

Siap terhubung?

Pemilik atau admin ruang kerja mengajukan permohonan di Pengaturan, API. Anda diberi tahu lewat email dan di aplikasi saat peninjauan selesai.

Buka pengaturan API