Resource dan endpoint Script
Script adalah endpoint backend deklaratif yang dipanggil frontend melalui HTTP (konsep dan struktur tingkat atasnya dibahas di Ikhtisar Script). Halaman ini membahas struktur sys dan properti badan dari resource Script, spesifikasi endpoint HTTP yang menyusun dan menjalankan Script, serta ScriptLog, yaitu catatan eksekusinya.
Membuat dan mengelola Script (daftar, pengambilan, pembuatan, penyuntingan, penghapusan) dilakukan di CMA (https://cma.weegloo.com/v1). Eksekusi ditangani oleh jalur eksekusi pada host Script khusus (https://script.weegloo.com/v1), dan satu jalur eksekusi itu menerima keduanya: token Weegloo User dan token anggota yang telah mendaftar ke produk (ServiceUser). ACMA tidak memiliki Script API, dan API pengiriman baca-saja (CDA, ACDA) juga tidak.
Script adalah resource yang memiliki version dan merupakan resource yang dapat ditagih dengan batas jumlah per paket. Namun, berbeda dengan Content atau Media, ia tidak memiliki status publikasi. sys-nya tidak memiliki properti terkait publikasi seperti status atau publish, dan hanya version yang naik setiap kali ada perubahan. Karena tidak ada konsep publikasi maupun pembatalan publikasi, penghapusan pun langsung terjadi tanpa pembatalan publikasi.
Struktur resource
Berikut adalah respons pengambilan tunggal dari Script "t6-http". Bersama dengan sys (properti sistem), ia memiliki name, definition, serta directCallEnabled·anonymousCallEnabled yang membuka dan menutup jalur pemanggilan, sebagai properti badan.
{
"sys": {
"id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK",
"type": "Script",
"space": { "sys": { "id": "6jSUUAWT", "type": "Refer", "targetType": "Space" } },
"createdBy": { "sys": { "id": "3p4tcFbQYJNvYTBJf2rYKr42xegQLJ", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-07-15T12:35:47.575Z",
"updatedBy": { "sys": { "id": "3p4tcFbQYJNvYTBJf2rYKr42xegQLJ", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-07-15T12:35:47.575Z",
"version": 1
},
"name": "t6-http",
"directCallEnabled": true,
"anonymousCallEnabled": false,
"definition": {
"method": "Post",
"statements": [
{
"name": "resp",
"method": "POST",
"url": "https://postman-echo.com/post",
"headers": [ { "key": "Content-Type", "value": "application/json", "secret": false } ],
"body": { "prompt": "{ /payload/prompt }" },
"timeoutMs": 10000,
"retry": 0,
"type": "Http"
},
{
"value": { "status": "{ /resp/status }", "prompt": "{ /resp/body/json/prompt }" },
"isError": false,
"statusCode": 200,
"type": "Return"
}
]
}
}Kunci utama:
sys.id: Pengenal unik dari Script. Nilai ini masuk ke{scriptId}pada jalur pengambilan tunggal, penyuntingan, penghapusan, dan eksekusi.name: Nama dari Script (1~64 karakter). Digunakan pada daftar di layar dan untuk identifikasi pengelolaan.definition:ScriptDefinitionyang mendeklarasikan apa yang dilakukan Script ini. Terdiri dari metode pemanggilan (method), array statement (statements), dan skema payload opsional (payloadSchema). Struktur terperincinya dibahas di Definisi dan nama di bawah dan di struktur tingkat atas pada Ikhtisar Script.directCallEnabled: Menentukan apakah Script ini dapat dipanggil langsung melalui/execute(boolean,truejika dihilangkan). Jikafalse, pemanggilan langsung ditolak. Jalur lain untuk menjalankan Script ini tetap tersedia. Aksi terhubung (script) pada Webhook dan Scheduler tidak melewati endpoint ini sehingga tetap menjalankannya seperti biasa.anonymousCallEnabled: Menentukan apakah Script ini dapat dipanggil tanpa autentikasi melalui/execute/anonymous(boolean,falsejika dihilangkan). Jika diaktifkan, pihak ketiga yang tidak dapat menyertakan token pun dapat menjalankan Script ini melalui jalur tersebut, dan eksekusinya berjalan dengan identitas penulis. Syarat dan aturan penyimpanannya dibahas di Panggilan anonim di bawah.
Perhatikan bahwa sys tidak memiliki status, publish, maupun archive. Script bukanlah resource yang dipublikasikan ke jalur pengiriman, melainkan resource yang disusun dan dijalankan di API pengelolaan.
Properti sistem (sys)
Setiap Script menempatkan properti sistem umum di dalam objek sys. space, createdBy, dan updatedBy masuk dalam bentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).
| Properti | Tipe | Keterangan |
|---|---|---|
id | string | Pengenal unik resource. |
type | string | Jenis resource. Script selalu "Script". |
space | Refer<Space> | Space tempat Script ini berada. |
createdBy | Refer<User> | Pengguna yang membuatnya. |
createdAt | string (date-time) | Waktu pembuatan. |
updatedBy | Refer<User> | Pengguna yang terakhir menyuntingnya. |
updatedAt | string (date-time) | Waktu penyuntingan terakhir. |
version | integer (≥1) | Versi resource. Naik 1 pada setiap pembuatan dan penyuntingan. |
status (status publikasi) dan publish (riwayat publikasi) yang ada pada sys dari Content, Content Type, dan Media tidak ada pada Script. Ini karena Script tidak dipublikasikan. Properti archive juga tidak ada. Karena itu, version dari Script murni bertambah sebanyak jumlah pembuatan dan penyuntingan, tanpa publikasi.
Definisi dan nama (name, definition)
Properti badan Script ada empat: name, definition, directCallEnabled, dan anonymousCallEnabled.
| Properti | Wajib | Keterangan |
|---|---|---|
name | Wajib | Nama Script. 1~64 karakter. |
definition | Wajib | ScriptDefinition. Terdiri dari kunci-kunci pada tabel di bawah. |
directCallEnabled | Opsional | Menentukan apakah Script ini dapat dipanggil langsung melalui /execute. Boolean, true jika dihilangkan. Jika false, pemanggilan langsung ditolak. Aksi terhubung (script) pada Webhook dan Scheduler tidak melewati endpoint ini sehingga tetap menjalankannya seperti biasa. |
anonymousCallEnabled | Opsional | Menentukan apakah Script ini dapat dipanggil tanpa autentikasi melalui /execute/anonymous. Boolean, false jika dihilangkan. Lihat Panggilan anonim di bawah. PUT adalah penggantian keseluruhan, sehingga jika dihilangkan nilainya kembali menjadi false. |
Kunci dari definition (ScriptDefinition):
| Kunci | Wajib | Keterangan |
|---|---|---|
method | Wajib | Metode HTTP yang digunakan untuk memanggil Script ini. Salah satu dari Get, Post, Put, Patch, Delete. Saat eksekusi, pencocokan dilakukan dengan nilai ini. |
statements | Wajib | Array terurut dari statement yang akan dijalankan. Minimal 1. |
payloadSchema | Opsional | JSON Schema. Jika ditentukan, payload permintaan divalidasi dengan skema ini sebelum eksekusi. |
Jenis dan field dari tiap statement yang dimasukkan ke array statements dibahas di Katalog Statement, sedangkan ekspresi { /pointer } yang mengalirkan nilai dibahas di Ekspresi nilai.
Pada contoh "t6-http" di atas, definition memiliki method bernilai Post; ia memanggil API eksternal dengan statement Http lalu mengembalikan hasilnya dengan statement Return. Statement yang melakukan panggilan eksternal seperti Http mendeklarasikan waktu bagiannya sendiri, dan sebanyak itulah yang ditambahkan ke waktu yang diberikan untuk satu eksekusi (lihat Waktu yang diberikan untuk satu eksekusi).
Batasan
| Sasaran | Batasan |
|---|---|
name | 1~64 karakter, wajib. |
definition.statements | Minimal 1, wajib. |
Panggilan eksternal per definisi (Http·EmailSend) | Per paket (lihat Paket Harga). |
| Total statement per definisi | Per paket (lihat Paket Harga, termasuk yang bersarang). |
SetVar per definisi | Maksimal 10 (nilai bawaan, termasuk yang bersarang). |
Regex.pattern | Maksimal 128 karakter. |
Definisi dengan anonymousCallEnabled bernilai true | createdBy: ":self" tidak dapat dipakai pada where. Lihat Panggilan anonim di bawah. |
| Script yang direferensikan resource lain | Tidak dapat dihapus. Jika Webhook mereferensikan Script itu sebagai aksi terhubung atau Scheduler mereferensikan Script itu sebagai sasaran eksekusi, penghapusan ditolak, dan kode yang dikembalikan berbeda antara kedua kasus itu (berlaku sama untuk Scheduler yang dimatikan; lihat Error). |
Batasan statis di atas diperiksa saat menyimpan (membuat atau menyunting) Script, dan jika ada pelanggaran, penyimpanan ditolak. Jumlah panggilan eksternal dan jumlah total statement bukan error validasi melainkan batas paket, sehingga definisi yang sama diperbolehkan pada paket yang lebih tinggi.
Saat penyimpanan, izin dan jenis resource juga diperiksa bersamaan.
- Sistem memeriksa apakah penulis benar-benar memiliki izin resource dan aksi yang dipakai oleh statement-statement tersebut (jika satu saja tidak ada, penyimpanan ditolak; lihat Error). Statement yang membaca anggota (ServiceUser) diperiksa bukan lewat map izin, melainkan lewat
SETTING_SERVICE_LOGINpadasettingsSpaceRole. - Jika ada statement yang mengubah anggota (ServiceUser), penyimpanan ditolak. Resource ini hanya dapat dibaca dari Script, sehingga tidak dapat disimpan dengan role apa pun.
Aturan terperinci, anggaran waktu, dan batas atas panjang nilai yang diperiksa selama eksekusi dibahas di Semantik eksekusi, batasan, dan keamanan.
Script adalah resource yang dapat ditagih, dan jumlahnya per Organization dibatasi menurut paket (Free 10 / Basic 30 / Pro 100 / Enterprise tanpa batas). Ketika batas tercapai, pembuatan Script baru ditolak (lihat batas jumlah per paket).
Panggilan anonim (anonymousCallEnabled)
Jika anonymousCallEnabled disetel true, Script tersebut juga dapat dijalankan melalui jalur khusus tanpa autentikasi.
{method} https://script.weegloo.com/v1/spaces/{spaceId}/scripts/{scriptId}/execute/anonymousKasus yang memerlukan ini jarang terjadi. Ini adalah perangkat untuk pihak ketiga, seperti penyedia pembayaran (PG·MoR), yang harus mengirimkan callback kepada kita tetapi tidak mendukung header kustom sehingga tidak memiliki cara menyertakan Access Token. Setiap pemanggil yang dapat menyertakan token memakai jalur terautentikasi (/execute).
- Jalur terautentikasi tetap seperti sebelumnya.
/executemasih menuntut token Bearer dan izin Execute Script. Yang menjadi tanpa autentikasi hanyalah satu jalur/execute/anonymousini. - Token tidak diterima. Meski Anda menyertakan token, token itu diabaikan dan eksekusinya selalu memakai identitas penulis. Untuk menjalankan dengan identitas pemanggil, gunakan
/execute. - Kedua gerbang harus dilewati. Jika
anonymousCallEnabledbernilaifalse, permintaan ditolak sebagai akses tanpa autentikasi, dan jikadirectCallEnabledbernilaifalse, permintaan ditolak karena pemanggilan langsung sedang tertutup. Kode yang dikembalikan berbeda menurut gerbang mana yang menahan permintaan itu (lihat Error). Karena izin anonim diperiksa lebih dahulu, pemanggil tanpa kewenangan tidak dapat mengetahui status konfigurasi Script tersebut. - Selanjutnya sama seperti
/execute. Metode HTTP permintaan harus cocok dengandefinition.method, dan pemanggilan itu memakai kuota eksekusi Script milik Organization serta terukur sebagai penggunaan. - Jalur ini berada di host Script yang sama dengan jalur eksekusi terautentikasi (
https://script.weegloo.com/v1).
Berjalan dengan identitas penulis
Karena tidak ada pemanggil, eksekusi berjalan dengan identitas pengguna yang membuat Script tersebut (sys.createdBy).
createdBydanupdatedBydari Content dan Media yang dibuat atau diubah di dalam Script diisi dengan penulis (bukan pemanggil anonim, karena tidak ada identitas lain untuk mengaitkannya).createdBy: ":self"padawherejuga diuraikan menjadi penulis, bukan pemanggil. Jika Anda membiarkan filter kepemilikan yang ditulis dengan asumsi pemanggil terautentikasi lalu mengaktifkan mode anonim, resource milik penulis akan terbuka secara senyap; karena itu definisi semacam itu memang tidak dapat disimpan sejak awal (lihat di bawah).
Pemeriksaan tambahan saat penyimpanan
Pada Script yang anonymousCallEnabled-nya true, ada satu aturan tambahan.
| Aturan | Kode |
|---|---|
createdBy: ":self" tidak dapat dipakai pada where milik ResourceFind·ResourceForEach | Lihat Error |
Sebabnya, panggilan anonim tidak memiliki identitas pemanggil sehingga :self diuraikan menjadi penulis. Ini mencegah, tepat pada saat penyimpanan, tertembusnya secara senyap filter kepemilikan yang ditulis dengan asumsi pemanggil terautentikasi.
Autentikasi yang sebenarnya dilakukan Script sendiri
Pada jalur ini tidak ada autentikasi yang dipasang platform. Siapa pun yang mengetahui URL-nya dapat memanggilnya, pemanggilan itu memakai kuota eksekusi Script milik Organization, dan tidak ada rate limit terpisah. Karena itu, Script anonim harus memverifikasi sendiri permintaan yang diterimanya.
- Letakkan
Signaturedi paling depan untuk memeriksa tanda tangan atas{ /rawPayload }, lalu putuskan permintaan di tempat denganReturnjika tidak lolos. Contoh lengkapnya ada di verifikasi tanda tangan webhook pada Cookbook. - Jika Anda juga memeriksa replay window dengan
/now, pengiriman ulang permintaan lama pun tercegah (/now). - Muat pada Script anonim hanya pekerjaan yang benar-benar harus dilakukan callback itu. Karena Script berjalan dengan izin penulis yang didelegasikan, sebanyak apa pun yang Anda muat, sebanyak itulah yang terbuka tanpa autentikasi (Model keamanan).
ScriptLog
Setiap kali sebuah Script dijalankan, tertinggal satu catatan. Catatan itulah ScriptLog. Ia hanya dapat diambil dan tidak memiliki endpoint pembuatan, penyuntingan, maupun penghapusan. Jalurnya adalah /spaces/{spaceId}/scripts/{scriptId}/logs, dan URL dasarnya bukan host eksekusi melainkan CMA, yaitu https://cma.weegloo.com/v1. Untuk membacanya diperlukan izin Read atas Script tersebut.
{
"sys": {
"id": "3trmXRM7pLdV5Rz8kWq2NcHfJt4bYs",
"type": "ScriptLog",
"space": { "sys": { "id": "6jSUUAWT", "type": "Refer", "targetType": "Space" } },
"script": { "sys": { "id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK", "type": "Refer", "targetType": "Script" } },
"trigger": { "sys": { "id": "3trmXRMZcTAjDnphewjj1AaxYcaxlK", "type": "Refer", "targetType": "Script" } },
"requestId": "3trmXRM9wTbK4Vz7hLp2QsNdRf6cYm",
"returned": true,
"value": { "status": 200, "prompt": "Deskripsi produk gaun musim panas dalam 3 baris" },
"success": true,
"statusCode": 200,
"durationMs": 195,
"createdBy": { "sys": { "id": "3p4tcFbQYJNvYTBJf2rYKr42xegQLJ", "type": "Refer", "targetType": "User" } },
"createdAt": "2026-07-15T12:41:03.902Z",
"updatedBy": { "sys": { "id": "3p4tcFbQYJNvYTBJf2rYKr42xegQLJ", "type": "Refer", "targetType": "User" } },
"updatedAt": "2026-07-15T12:41:03.902Z"
}
}Semua nilai berada di dalam sys dan tidak ada properti badan. Kunci yang tidak memiliki nilai dihilangkan dari respons.
| Properti | Tipe | Keterangan |
|---|---|---|
id | string | Pengenal unik catatan. |
type | string | Selalu "ScriptLog". |
space | Refer<Space> | Space tempat catatan ini berada. |
script | Refer<Script> | Script yang dijalankan. |
trigger | Refer | Hal yang memicu eksekusi ini. Lihat keterangan di bawah. |
requestId | string | Pengenal eksekusi ini. Nilainya sama dengan requestId pada envelope respons eksekusi. |
returned | boolean | Apakah statement Return tercapai. |
value | any | Nilai yang dikembalikan Return yang tercapai. Objek, array, maupun skalar dimuat apa adanya. Jika gagal, alasan kegagalannya dimuat di sini. |
success | boolean | Berhasil atau tidak. |
statusCode | integer | Kode status yang ditetapkan Return yang tercapai. |
durationMs | integer | Durasi eksekusi (milidetik). |
createdBy | Refer<User> atau Refer<ServiceUser> | Identitas yang menjadi atribusi catatan ini. Lihat keterangan di bawah. |
createdAt | string (date-time) | Waktu pembuatan catatan. |
updatedBy | Refer<User> atau Refer<ServiceUser> | Sama dengan createdBy. |
updatedAt | string (date-time) | Sama dengan createdAt. |
trigger menunjuk pada hal yang memicu eksekusi ini. Untuk pemanggilan langsung, isinya adalah Script itu sendiri; jika dijalankan sebagai aksi terhubung sebuah Webhook, isinya Webhook tersebut; dan jika dijalankan oleh Scheduler, isinya Scheduler tersebut.
requestId bernilai sama dengan requestId pada envelope respons eksekusi. Nilai ini dipakai sebagai acuan ketika mencari catatan eksekusi tersebut dari respons yang diterima pemanggil.
Catatan ditulis satu kali setelah eksekusi berakhir dan tidak berubah lagi. Eksekusi yang berhasil hilang setelah 1 jam, dan eksekusi yang gagal setelah 3 hari. Nilai yang harus Anda simpan lebih lama dari itu, simpanlah sebagai Content dari dalam Script.
createdBy menunjuk pada identitas yang dipakai untuk melakukan eksekusi itu. Eksekusi yang dipanggil dengan token Weegloo User adalah pengguna tersebut, dan eksekusi yang dipanggil dengan token anggota (ServiceUser) adalah anggota tersebut. Pada eksekusi tanpa pemanggil, identitasnya berasal dari pemicunya. Eksekusi anonim adalah penulis Script itu, eksekusi yang dijalankan Scheduler adalah pengguna yang membuat Scheduler itu (bisa berbeda dari penulis Script), dan yang dijalankan Webhook adalah pengguna yang membuat Webhook itu. runAs pada Webhook hanya menentukan atas nama siapa pekerjaan di dalam Script dilakukan, dan tidak mengubah atribusi log ini.
Error
Berikut adalah kode yang muncul saat Anda memanggil atau menghapus Script. Kode yang muncul saat menyimpan definisi ada di Error pada Semantik eksekusi, batasan, dan keamanan, kode yang melanggar aturan ekspresi nilai ada di Error pada Ekspresi nilai, sedangkan kode yang berlaku umum pada semua resource ada di Error umum.
| Kode | Kondisi |
|---|---|
WGL422066 | Sebuah Webhook mereferensikan Script yang hendak Anda hapus sebagai aksi terhubung (berlaku sama untuk Webhook yang dimatikan). |
WGL422110 | Sebuah Scheduler mereferensikan Script yang hendak Anda hapus sebagai sasaran eksekusi (berlaku sama untuk Scheduler yang dimatikan). |
WGL401001 | Anda memanggil Script dengan anonymousCallEnabled bernilai false melalui jalur eksekusi anonim (/execute/anonymous). |
WGL422062 | Anda memanggil langsung Script dengan directCallEnabled bernilai false melalui jalur eksekusi (/execute·/execute/anonymous). |
WGL400007 | Metode HTTP permintaan eksekusi berbeda dari definition.method milik Script tersebut. Permintaan yang mengirim body yang bukan objek JSON pun ditolak dengan kode yang sama, begitu pula permintaan ke Script yang memiliki definition.payloadSchema ketika body tidak memenuhi skema tersebut. |
WGL408002 | Eksekusi terhenti karena melewati anggaran waktu. Catatan eksekusi sampai titik tersebut tetap tersimpan di ScriptLog. |
API
URL dasar untuk lima endpoint di bawah (daftar, pengambilan, pembuatan, penyuntingan, penghapusan) adalah CMA, yaitu https://cma.weegloo.com/v1, dan diperlukan token Bearer yang mengautentikasi CMA pada header Authorization. Penyuntingan harus menyertakan header X-Weegloo-Version (sys.version resource saat ini) untuk kendali konkurensi optimistis. Dua pengambilan ScriptLog di paling bawah juga memakai URL dasar CMA yang sama.
URL dasar untuk dua endpoint eksekusi adalah host Script khusus, yaitu https://script.weegloo.com/v1. Eksekusi terautentikasi (/execute) menerima keduanya, yaitu token Bearer beridentitas Weegloo User dan token Bearer beridentitas anggota (ServiceUser), dan pada kedua kasus pemanggil memerlukan izin Execute atas Script tersebut.
Hanya eksekusi anonim (/execute/anonymous) yang menjadi pengecualian dan tidak menuntut header autentikasi. Ia berada di host Script yang sama, dan hanya dapat dijangkau ketika Script tersebut mengaktifkan anonymousCallEnabled (lihat Panggilan anonim di atas).
Respons pada contoh eksekusi terautentikasi di atas tidak memiliki return, karena Script sasaran selesai tanpa mencapai Return yang berisi nilai (dalam hal ini statusCode bernilai bawaan 200). Jika Anda mengembalikan nilai dengan Return seperti pada contoh eksekusi anonim, respons akan memuat return (atau error jika Return.isError bernilai true). Aturan lengkap respons dibahas di bagian permintaan dan respons pada Ikhtisar Script.
Dokumen terkait
- Ikhtisar Script: Membahas struktur
ScriptDefinitiontingkat atas, permintaan dan respons, serta waktu yang diberikan untuk satu eksekusi. - Katalog Statement: Membahas field dan hasil dari tiap statement yang dimasukkan ke
statements. - Ekspresi nilai: Membahas referensi
{ /pointer }dan operasi JsonLogic. - Semantik eksekusi, batasan, dan keamanan: Membahas batasan statis, batas jumlah per paket, serta model izin dan keamanan.
- SpaceRole dan ServiceUserRole: Membahas cara memberikan izin aksi Script (termasuk
Execute) kepada sebuah peran.
