Webhook

Terakhir diperbarui: 22 Juni 2026

Webhook adalah konfigurasi yang mengirim permintaan HTTP ke URL eksternal yang telah ditentukan ketika terjadi sesuatu di Space (misalnya pembuatan atau publikasi Content). Digunakan untuk integrasi sistem eksternal atau otomatisasi. Misalnya, Anda dapat mengonfigurasinya untuk memanggil server notifikasi internal atau memanggil API eksternal setiap kali sebuah Content produk dipublikasikan.

Webhook tidak berhenti pada pengiriman permintaan saja, tetapi juga dapat menerima respons tersebut dan menulisnya kembali ke Content atau Media melalui WriteBack. Beginilah cara Anda menyusun alur kerja asinkron yang menyerap hasil API eksternal menjadi data di dalam Space. Webhook adalah sumber daya turunan dari Space di CMA, dan jalurnya berbasis pada /spaces/{spaceId}/webhooks.

Struktur sumber daya

Berikut adalah respons pengambilan tunggal dari Webhook "Notifikasi perubahan produk". Bersama dengan sys (properti sistem), ia memiliki field konfigurasi seperti tujuan pengiriman, event yang dilanggan, dan kondisi pemicu.

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PWhk01Examp",
    "type": "Webhook",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T11:30:00.000Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T11:30:00.000Z",
    "version": 1
  },
  "name": "Notifikasi perubahan produk",
  "filters": [
    { "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  ],
  "headers": [
    { "key": "X-Source", "value": "weegloo", "secret": false }
  ],
  "httpBasicUsername": "dailywear",
  "topics": ["Content.Create", "Content.Publish"],
  "transformation": { "method": "POST", "contentType": "application/json", "includeBody": true },
  "url": "https://api.dailywear.example/webhooks/products",
  "activate": true
}

Kunci utama:

  • sys.id: Pengenal unik Webhook. Dimasukkan ke dalam {webhookId} pada jalur pengambilan tunggal, perubahan, dan penghapusan.
  • url: URL tujuan eksternal yang dipanggil ketika event terjadi.
  • topics: Array yang menentukan event mana yang akan dilanggan. Formatnya dijelaskan di topics di bawah.
  • filters: Kondisi yang benar-benar memicu di antara event yang dilanggan. Dijelaskan di filters di bawah.
  • transformation: Konfigurasi yang mengubah bentuk permintaan keluar (metode, body, dll.). Dijelaskan di transformation di bawah.
  • writeBacks: Array pekerjaan yang menerima respons eksternal dan menulisnya kembali ke Content atau Media. Tidak ada pada contoh di atas. Dijelaskan di writeBacks di bawah.

Properti sistem (sys)

Setiap Webhook menyimpan properti sistem umum dalam objek sys. space, createdBy, dan updatedBy dimasukkan dalam bentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropertiTipeDeskripsi
idstringPengenal unik sumber daya.
typestringJenis sumber daya. Webhook selalu "Webhook".
spaceRefer<Space>Space tempat Webhook ini berada.
createdByRefer<User>Pengguna yang membuat.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir mengubah.
updatedAtstring (date-time)Waktu perubahan terakhir.
versioninteger (≥1)Versi sumber daya. Bertambah 1 setiap kali diubah.

Webhook adalah sumber daya konfigurasi, sehingga tidak memiliki konsep publikasi. Berbeda dengan Content atau Content Type, ia tidak memiliki properti status publikasi seperti publish, archive, atau status, dan hanya memiliki version untuk pelacakan perubahan. Menghidupkan dan mematikan dikendalikan bukan oleh publikasi melainkan oleh field body activate.

Properti body

Body Webhook (nilai konfigurasi yang dikirim saat pembuatan dan perubahan, serta yang dikembalikan dalam respons) terdiri dari field berikut.

FieldTipeWajibDeskripsi
namestring (1~64)Nama Webhook.
urlstring (url)URL tujuan eksternal yang dipanggil ketika event terjadi.
activatebooleanStatus aktif. Jika false, permintaan tidak dikirim meskipun event terjadi.
topicsstring[]Array event yang dilanggan. Lihat topics di bawah.
filtersFilter[]Array kondisi pemicu. Jika dikosongkan, semua event yang dilanggan akan memicu. Lihat filters di bawah.
headersWebhookHeader[] (0~30)Array header HTTP yang disertakan pada permintaan.
httpBasicUsernamestring (1~32)Nama pengguna autentikasi HTTP Basic.
httpBasicPasswordstring (1~32)Kata sandi autentikasi HTTP Basic. Hanya untuk penulisan. Tidak muncul pada respons.
transformationTransformationPenyesuaian permintaan keluar. Lihat transformation di bawah.
writeBacksWriteBack[]Array pekerjaan penulisan yang dilakukan setelah menerima respons. Lihat writeBacks di bawah.

Setiap item pada headers terdiri dari key (wajib), value (wajib), dan secret (opsional, boolean). Header dengan secret bernilai true nilainya disamarkan pada respons. Letakkan nilai yang tidak boleh terekspos seperti API key pada header dengan secret: true.

topics

Setiap item pada topics berformat {resource}.{action}. Contoh: Content.Create, Content.Publish, Media.Create.

Action adalah salah satu dari berikut, atau * yang berarti semua action dari sumber daya tersebut (contoh: Content.*).

ActionArti
AllSemua action.
CreatePembuatan.
ReadPengambilan.
EditPenyuntingan.
SavePenyimpanan (perubahan). Event perubahan adalah Save. Bukan Update.
DeletePenghapusan.
PublishPublikasi.
UnpublishPembatalan publikasi.
ArchivePengarsipan.
UnarchivePembatalan pengarsipan.

filters

filters adalah array yang mempersempit kondisi yang benar-benar memicu Webhook di antara topics yang dilanggan. Setiap filter berbentuk sebagai berikut.

{ "doc": "sys.contentType.sys.id", "op": "EQ", "value": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" }
  • doc: Jalur field yang dibandingkan. Salah satu dari sys.id, sys.contentType.sys.id, sys.createdBy.sys.id, atau sys.updatedBy.sys.id.
  • op: Operator perbandingan. Salah satu dari EQ, NE, IN, NOT_IN, REGEX, atau NOT_REGEX.
  • value: Nilai pembanding. Berikan string untuk EQ, NE, REGEX, NOT_REGEX, dan array string untuk IN, NOT_IN.

Jika Anda menetapkan beberapa filter, semuanya harus terpenuhi agar memicu (AND). Jika filters dikosongkan, semua event dari topics yang dilanggan akan memicu.

transformation

transformation mengubah bentuk permintaan HTTP keluar. Jika tidak ditentukan, seluruh payload sumber daya dikirim apa adanya dengan POST default.

KunciTipeDeskripsi
methodstringMetode HTTP. Salah satu dari GET, POST, PUT, DELETE, PATCH.
contentTypestringContent-Type dari body permintaan.
bodyobjectObjek yang menyusun body yang dikirim dengan template JSON Pointer.
includeBodybooleanApakah body sumber daya pemicu turut dikirim.

writeBacks

writeBacks adalah array berurutan dari pekerjaan yang menulis kembali ke Content atau Media menggunakan respons eksternal yang diterima Webhook. Dijalankan secara berurutan hanya ketika API eksternal merespons dengan 2xx. Setiap item memiliki satu $content (WriteBackContent) atau $media (WriteBackMedia).

Kunci WriteBackContent ($content):

KunciTipeDeskripsi
actionstringSalah satu dari Create, Update, Delete, Publish, Unpublish, Archive, Unarchive.
contentTypeRefer<ContentType>Content Type yang akan dibuat saat Create. Cukup berikan sys.id saja.
targetstringTemplate JSON Pointer yang menunjuk ke sys.id dari Content sasaran pada Update, Delete, dll. (contoh: { /response/id }). Harus dibungkus dengan { }; jika tidak dibungkus, diperlakukan sebagai literal. Jika dihilangkan, sumber daya yang memicu Webhook dijadikan sasaran.
localestringLocale tempat nilai ditulis saat Create, Update. Berupa kode locale atau template pointer. Jika dihilangkan, locale default Space.
fieldsobjectMap dari kunci field sasaran ke ekspresi sumber saat Create, Update. Kuncinya adalah apiName dari field Content sasaran.
publishbooleanApakah akan dipublikasikan setelah Create, Update. Nilai default true.
unpublishbooleanApakah akan dibatalkan publikasinya sebelum penghapusan saat Delete. Nilai default true.

Kunci WriteBackMedia ($media):

KunciTipeDeskripsi
actionstringSalah satu dari Create, Delete, Publish, Unpublish, Archive, Unarchive.
sourcestringTemplate pointer dari nilai yang diambil menjadi Media saat Create (contoh: { /response/data/0/url }). Harus dibungkus dengan { }.
encodingstringCara menafsirkan source saat Create. Salah satu dari Url, Base64, Binary.
localestringLocale tempat file, judul, dan deskripsi ditulis saat Create. Jika dihilangkan, locale default Space.
titlestringJudul Media saat Create (ekspresi sumber atau literal).
descriptionstringDeskripsi Media saat Create.
targetstringTemplate pointer yang menunjuk ke sys.id dari Media sasaran pada Delete, dll. Jika dihilangkan, sumber daya pemicu menjadi sasaran.
publishbooleanApakah akan dipublikasikan setelah pemrosesan selesai saat Create. Nilai default true.
unpublishbooleanApakah akan dibatalkan publikasinya sebelum penghapusan saat Delete. Nilai default true.

Berikut adalah contoh writeBacks yang mengekstrak nilai dari JSON respons eksternal untuk membuat satu Content.

"writeBacks": [
  {
    "$content": {
      "action": "Create",
      "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA" } },
      "locale": "ko-KR",
      "fields": {
        "productName": "{ /response/title }",
        "price": "{ /response/price }"
      },
      "publish": true,
      "unpublish": true
    }
  }
]

{ /response/... } adalah template JSON Pointer yang mengekstrak nilai dari JSON respons yang diterima Webhook. Kunci pada fields (productName, price) adalah apiName dari field Content sasaran. Contoh di atas mengisi title dari respons ke productName Content, dan price ke price, lalu membuat Content dan mempublikasikannya.

API

Base URL untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan diperlukan Bearer token yang mengautentikasi CMA pada header Authorization. Perubahan (PUT) dan perubahan parsial (PATCH) harus turut mengirim header X-Weegloo-Version (sys.version sumber daya saat ini) untuk kontrol konkurensi optimistis.

  • Content: Data body yang dipicu oleh Webhook atau ditulis melalui WriteBack.
  • Media: Sumber daya file yang dapat dibuat melalui WriteBack.
  • SpaceRole: Ketika membatasi akses Content pekerjaan Webhook dengan :self.