Script リソースとエンドポイント
Script はフロントエンドが HTTP で呼び出す宣言型のバックエンドエンドポイントです(概念と最上位構造は Script 概要 で扱います)。このページでは Script リソース の sys 構造と本文プロパティ、Script をオーサリング・実行する HTTP エンドポイント の仕様、そして実行の記録である ScriptLog を扱います。
Script を 作成して管理する作業(一覧・照会・作成・更新・削除)は CMA(https://cma.weegloo.com/v1)で行います。実行 は専用の Script ホスト(https://script.weegloo.com/v1)の実行パスが担当し、この実行パス 1 つが Weegloo User トークンと、製品にサインアップした会員(ServiceUser)のトークンを どちらも 受け取ります。ACMA に Script API はなく、読み取り専用の配信 API(CDA、ACDA)にもありません。
Script は version を持つリソースであり、プランごとに個数制限を受ける課金対象のリソースです。ただし Content や Media と異なり 公開状態を持ちません。 sys に status や publish のような公開関連のプロパティがなく、変更するたびに version だけが上がります。公開・公開停止の概念がないため、削除も公開停止なしに直ちに行われます。
リソース構造
次は Script "t6-http" の単一照会レスポンスです。sys(システムプロパティ)とともに、name、definition、そして呼び出し経路を開閉する directCallEnabled・anonymousCallEnabled を本文プロパティとして持ちます。
{
"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"
}
]
}
}主なキー:
sys.id: Script の一意な識別子です。単一照会・更新・削除・実行パスの{scriptId}に入ります。name: Script の名前です(1〜64 文字)。画面の一覧や管理用の識別に使われます。definition: この Script が何をするかを宣言するScriptDefinitionです。呼び出しメソッド(method)、ステートメント(statements)配列、任意の payload スキーマ(payloadSchema)で構成されます。詳しい構造は下の 定義と名前 と Script 概要の最上位構造 で扱います。directCallEnabled: この Script を/executeで直接呼び出せるかどうかです(ブール、省略時はtrue)。falseの場合、直接呼び出しは拒否されます。この Script を実行する他の経路はそのまま残ります。Webhook の連携アクション(script)と Scheduler はこのエンドポイントを通らないため、そのまま実行します。anonymousCallEnabled: この Script を 認証なしで/execute/anonymousで呼び出せるかどうかです(ブール、省略時はfalse)。有効にすると、トークンを載せられない第三者もその経路でこの Script を実行でき、実行は 作成者のアイデンティティで行われます。条件と保存の規則は下の 匿名呼び出し で扱います。
sys に status・publish・archive がないことに注意してください。Script は配信経路に公開されるリソースではなく、管理 API でオーサリング・実行するリソースです。
システムプロパティ (sys)
すべての Script は共通のシステムプロパティを sys オブジェクトに格納します。space、createdBy、updatedBy は Refer の形({ "sys": { "id", "type": "Refer", "targetType" } })で入ります。
| プロパティ | 型 | 説明 |
|---|---|---|
id | string | リソースの一意な識別子。 |
type | string | リソースの種類。Script は常に "Script"。 |
space | Refer<Space> | この Script が属する Space。 |
createdBy | Refer<User> | 作成したユーザー。 |
createdAt | string (date-time) | 作成日時。 |
updatedBy | Refer<User> | 最後に更新したユーザー。 |
updatedAt | string (date-time) | 最終更新日時。 |
version | integer (≥1) | リソースのバージョン。作成・更新のたびに 1 ずつ上がります。 |
Content・Content Type・Media の sys にある status(公開状態)と publish(公開履歴)は Script には ありません。 Script は公開されないためです。archive プロパティもありません。そのため Script の version は公開なしに、純粋に作成・更新の回数だけ増加します。
定義と名前 (name, definition)
Script の本文プロパティは name、definition、directCallEnabled、anonymousCallEnabled の 4 つです。
| プロパティ | 必須 | 説明 |
|---|---|---|
name | 必須 | Script の名前。1〜64 文字。 |
definition | 必須 | ScriptDefinition。下の表のキーで構成されます。 |
directCallEnabled | 任意 | この Script を /execute で直接呼び出せるかどうか。ブール、省略時は true。false の場合、直接呼び出しは拒否されます。Webhook の連携アクション(script)と Scheduler はこのエンドポイントを通らないため、そのまま実行します。 |
anonymousCallEnabled | 任意 | この Script を認証なしで /execute/anonymous で呼び出せるかどうか。ブール、省略時は false。下の 匿名呼び出し を参照。PUT は全体置換なので、省略すると false に戻ります。 |
definition(ScriptDefinition)のキー:
| キー | 必須 | 説明 |
|---|---|---|
method | 必須 | この Script を呼び出す HTTP メソッド。Get・Post・Put・Patch・Delete のいずれか。実行時にこの値でマッチングします。 |
statements | 必須 | 実行するステートメント(statement)の順序付き配列。最小 1 個。 |
payloadSchema | 任意 | JSON Schema。指定すると実行前にリクエスト payload をこのスキーマで検証します。 |
statements 配列に入れる各ステートメントの種類とフィールドは Statement カタログ で、値を流し込む { /pointer } 式は 値の式 で扱います。
上の例 "t6-http" の definition は method が Post で、Http ステートメントで外部 API を呼び出したあと、Return ステートメントでその結果を返します。Http のように外部呼び出しがある文は自分の分の時間を宣言し、その分が 1 回の実行に与えられる時間に加算されます(1 回の実行に与えられる時間 参照)。
制約
| 対象 | 制約 |
|---|---|
name | 1〜64 文字、必須。 |
definition.statements | 最小 1 個、必須。 |
1 定義あたりの外部呼び出し(Http・EmailSend) | プランごと(料金プラン を参照)。 |
| 1 定義あたりの全 statement | プランごと(料金プラン を参照、ネスト含む)。 |
1 定義あたりの SetVar | 最大 10 個(デフォルト、ネスト含む)。 |
Regex.pattern | 最大 128 文字。 |
anonymousCallEnabled が true の定義 | where に createdBy: ":self" を使えない。下の 匿名呼び出し を参照。 |
| 他のリソースが参照している Script | 削除できない。Webhook が連携アクションとして参照している場合や、Scheduler が実行対象として参照している場合は削除が拒否され、返るコードは参照している側ごとに異なります(無効にした Scheduler も同じです。エラー を参照)。 |
上の静的制約は Script を 保存(作成・更新)する時点 で検査され、違反すると保存が拒否されます。外部呼び出しの数と全 statement の数は妥当性エラーではなく プランの上限なので、同じ定義が上位プランでは許可されます。
保存時には、権限とリソースの種類も併せて検査します。
- 作成者がそれらの statement が使う リソース・アクションの権限を実際に持っているか を検査します(1 つでもなければ保存が拒否されます。エラー を参照)。会員(ServiceUser)を読む文は、権限マップではなく SpaceRole
settingsのSETTING_SERVICE_LOGINで検査します。 - 会員(ServiceUser)を 変更する文が含まれていると保存を拒否します。このリソースは Script では読み取りだけなので、どの役割でも保存できません。
詳しいルールと時間予算、実行中に検査される値の長さの上限は 実行セマンティクス、制約、セキュリティ で扱います。
Script は課金対象のリソースで、Organization ごとの個数 がプランごとに制限されます(Free 10 / Basic 30 / Pro 100 / Enterprise 無制限)。上限に達すると新しい Script の作成が拒否されます(プランごとの個数上限 を参照)。
匿名呼び出し (anonymousCallEnabled)
anonymousCallEnabled を true にすると、その Script は 認証のない専用経路でも実行されます。
{method} https://script.weegloo.com/v1/spaces/{spaceId}/scripts/{scriptId}/execute/anonymousこれが必要な場合はまれです。 決済代行会社(PG・MoR)のように、こちらへコールバックを送る必要があるのに カスタムヘッダーに対応しておらず Access Token を載せる方法がない 第三者のための仕組みです。トークンを載せられる呼び出し元は、すべて認証経路(/execute)を使います。
- 認証経路はそのままです。
/executeは今も Bearer トークンと Script の Execute 権限を要求します。認証なしになるのは/execute/anonymousというこの経路 1 つだけです。 - トークンを受け取りません。 トークンを載せて送っても無視され、実行は常に作成者のアイデンティティです。呼び出し元のアイデンティティで実行するには
/executeを使います。 - 2 つのゲートを両方通る必要があります。
anonymousCallEnabledがfalseなら認証されていないアクセスとして拒否され、directCallEnabledがfalseなら直接呼び出しがふさがれていて拒否されます。返るコードは、どちらのゲートに引っかかったかによって異なります(エラー を参照)。匿名を許可しているかを先に見るため、資格のない呼び出し元はその Script の設定状態を知ることができません。 - その先は
/executeと同じです。リクエストの HTTP メソッドがdefinition.methodと一致しなければならず、Organization の Script 実行クォータを消費して使用量として計量されます。 - この経路は、認証された実行の経路と同じ Script ホスト(
https://script.weegloo.com/v1)にあります。
作成者のアイデンティティで実行されます
呼び出し元がいないため、実行はその Script を 作成したユーザー(sys.createdBy)のアイデンティティで行われます。
- Script の中で作成または更新した Content・Media の
createdBy・updatedByには 作成者が入ります(匿名の呼び出し元ではありません。帰属させる他のアイデンティティがないためです)。 whereのcreatedBy: ":self"も呼び出し元ではなく作成者に解決されます。認証された呼び出し元を前提に書いた所有権フィルターをそのまま残して匿名を有効にすると、作成者のリソースが黙って開いてしまうため、そうした定義はそもそも保存されません(下記)。
保存時の追加検査
anonymousCallEnabled が true の Script には、規則が 1 つ追加されます。
| 規則 | コード |
|---|---|
ResourceFind・ResourceForEach の where に createdBy: ":self" を使えない | エラー を参照 |
匿名呼び出しには呼び出し元のアイデンティティがなく、:self が 作成者に解決される からです。認証された呼び出し元を前提に書いた所有権フィルターが黙って破られることを、保存の時点で防ぎます。
実質的な認証は Script が自分で行います
この経路には、プラットフォームがかけてくれる認証がありません。URL を知っている者は誰でも呼び出せ、その呼び出しは Organization の Script 実行クォータを消費し、別途のレートリミットもありません。 そのため匿名 Script は、自分が受け取ったリクエストを自分で検証しなければなりません。
- 先頭に
Signatureを置いて{ /rawPayload }に対する署名を確認し、通らなければReturnでその場で打ち切ります。完結した例は クックブックの Webhook 署名検証 にあります。 /nowで replay window まで検査すれば、過去のリクエストを再送することも防げます(/now)。- 匿名 Script には、そのコールバックが実際にしなければならないことだけを入れます。Script は作成者の権限を委任されて実行されるため、入れた分だけが認証なしで開かれます(セキュリティモデル)。
ScriptLog
Script が 1 回実行されるたびに、記録が 1 つ残ります。この記録が ScriptLog です。照会専用で、作成・更新・削除のエンドポイントはありません。パスは /spaces/{spaceId}/scripts/{scriptId}/logs で、基準 URL は実行ホストではなく CMA の https://cma.weegloo.com/v1 です。読み取るにはその Script の Read 権限が必要です。
{
"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": "夏のワンピースの商品説明 3 行" },
"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"
}
}すべての値が sys の中にあり、本文プロパティはありません。値がないキーはレスポンスから外れます。
| プロパティ | 型 | 説明 |
|---|---|---|
id | string | 記録の一意な識別子。 |
type | string | 常に "ScriptLog"。 |
space | Refer<Space> | この記録が属する Space。 |
script | Refer<Script> | 実行された Script。 |
trigger | Refer | この実行を引き起こしたもの。下の説明を参照。 |
requestId | string | この実行の識別子。実行レスポンスのエンベロープの requestId と同じ値です。 |
returned | boolean | Return 文に到達したかどうか。 |
value | any | 到達した Return が返した値です。オブジェクト・配列・スカラーのいずれもそのまま載ります。失敗した場合は失敗の理由がここに入ります。 |
success | boolean | 成功したかどうか。 |
statusCode | integer | 到達した Return が定めたステータスコード。 |
durationMs | integer | 実行にかかった時間(ミリ秒)。 |
createdBy | Refer<User> または Refer<ServiceUser> | この記録が帰属するアイデンティティ。下の説明を参照。 |
createdAt | string (date-time) | 記録の作成日時。 |
updatedBy | Refer<User> または Refer<ServiceUser> | createdBy と同じです。 |
updatedAt | string (date-time) | createdAt と同じです。 |
trigger は、この実行を引き起こしたものを指します。直接呼び出しなら その Script 自身、Webhook の連携アクションとして実行されたならその Webhook、Scheduler が回したものならその Scheduler です。
requestId は実行レスポンスのエンベロープの requestId と同じ値です。呼び出し元が受け取ったレスポンスから、その実行の記録を見つけるときにこの値を基準として使います。
記録は実行が終わったあとに一度書かれ、変わりません。成功した実行は 1 時間、失敗した実行は 3 日後に消えます。 それより長く残す必要がある値は、Script の中で Content として保存してください。
createdBy は、その実行がどのアイデンティティで行われたかを指します。Weegloo User トークンで呼んだ実行はそのユーザーで、会員(ServiceUser)トークンで呼んだ実行はその会員です。呼び出し元がいない実行は、アイデンティティがトリガーから来ます。匿名実行はその Script の作成者、Scheduler が回した実行は その Scheduler を作成したユーザー(Script の作成者と異なることがあります)、Webhook が実行したものは その Webhook を作成したユーザーです。Webhook の runAs は Script の中の作業が誰の名前で行われるかを定めるだけで、このログの帰属は変えません。
エラー
Script を呼び出したり削除したりするときに出るコードです。定義を保存するときに出るコードは 実行セマンティクス、制約、セキュリティのエラー に、値式の規則に反したコードは 値式のエラー に、すべてのリソースに共通するコードは 共通エラー にあります。
| コード | 条件 |
|---|---|
WGL422066 | 削除しようとしている Script を、Webhook が連携アクションとして参照しています(無効にした Webhook も同じです)。 |
WGL422110 | 削除しようとしている Script を、Scheduler が実行対象として参照しています(無効にした Scheduler も同じです)。 |
WGL401001 | anonymousCallEnabled が false の Script を、匿名実行の経路(/execute/anonymous)で呼び出しました。 |
WGL422062 | directCallEnabled が false の Script を、実行の経路(/execute・/execute/anonymous)で直接呼び出しました。 |
WGL400007 | 実行リクエストの HTTP メソッドが、その Script の definition.method と異なります。リクエスト本文を送ったのにそれが JSON オブジェクトでないとき、そして definition.payloadSchema を設けた Script で本文がそのスキーマを満たさないときも、同じコードで拒否します。 |
WGL408002 | 実行が時間予算を超えて中断されました。その時点までの実行記録は ScriptLog に残ります。 |
API
下の 5 つ(一覧・照会・作成・更新・削除)の基準 URL は CMA の https://cma.weegloo.com/v1 で、Authorization ヘッダーに CMA を認証する Bearer トークンが必要です。更新は楽観的同時実行制御のため、X-Weegloo-Version ヘッダー(現在のリソースの sys.version)を併せて送る必要があります。一番下の ScriptLog 照会 2 つも同じ CMA の基準 URL を使います。
実行エンドポイント 2 つの基準 URL は、専用の Script ホストである https://script.weegloo.com/v1 です。認証された実行(/execute)は Weegloo User アイデンティティの Bearer トークンと、会員(ServiceUser)アイデンティティの Bearer トークンを どちらも 受け取り、いずれの場合も呼び出し元にその Script の Execute 権限が必要です。
匿名実行(/execute/anonymous)だけは例外で、認証ヘッダーを要求しません。 同じ Script ホストにあり、その Script が anonymousCallEnabled を有効にしているときにだけ到達します(上の 匿名呼び出し を参照)。
上の認証された実行の例のレスポンスには return がありません。対象の Script が値を含む Return に到達せずに終わったためです(この場合 statusCode はデフォルト値 200)。匿名実行の例のように Return で値を返すと、レスポンスに return(または Return.isError が真であれば error)が載ります。レスポンスの全ルールは Script 概要のリクエストとレスポンス で扱います。
関連ドキュメント
- Script 概要: 最上位の
ScriptDefinition構造、リクエストとレスポンス、1 回の実行に与えられる時間を扱います。 - Statement カタログ:
statementsに入れる各ステートメントのフィールドと結果を扱います。 - 値の式:
{ /pointer }参照と JsonLogic 演算を扱います。 - 実行セマンティクス、制約、セキュリティ: 静的制約、プランごとの個数上限、権限とセキュリティモデルを扱います。
- SpaceRole・ServiceUserRole: Script のアクション権限(
Executeを含む)をロールに付与する方法を扱います。
