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" } ],
        "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)、Statement(statements)配列、任意の payload スキーマ(payloadSchema)、任意のシークレット値の一覧(secrets)で構成されます。詳しい構造は下の 定義と名前 と 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" } })で入ります。

プロパティ型説明
idstringリソースの一意な識別子。
typestringリソースの種類。Script は常に "Script"。
spaceRefer<Space>この Script が属する Space。
createdByRefer<User>作成したユーザー。
createdAtstring (date-time)作成日時。
updatedByRefer<User>最後に更新したユーザー。
updatedAtstring (date-time)最終更新日時。
versioninteger (≥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 をこのスキーマで検証します。
secrets任意シークレット値の一覧。項目は { "key", "value", "description" } で、Statement では { /secrets/<key> } で読みます。value は WEEGLOO が暗号化して安全に保存し、レスポンスには元の値のまま返されます。PUT は全体置換なので、省略すると宣言しておいたシークレット値が削除されます。Statement がまだ { /secrets/… } で参照している場合は、削除される代わりに保存が拒否されます。ルールは セキュリティモデルの secrets を参照。

statements 配列に入れる各 Statement の種類とフィールドは Statement カタログ で、値を流し込む { /pointer } 式は 値の式 で扱います。

上の例 "t6-http" の definition は method が Post で、Http Statement で外部 API を呼び出したあと、Return Statement でその結果を返します。Http のように外部呼び出しがある Statement は自分の分の時間を宣言し、その分が 1 回の実行に与えられる時間に加算されます(1 回の実行に与えられる時間 参照)。

制約

対象制約
name1〜64 文字、必須。
definition.statements最小 1 個、必須。
1 定義あたりの外部呼び出し(Http・EmailSend)プランごと(料金プラン を参照)。
1 定義あたりの全 Statementプランごと(料金プラン を参照、ネスト含む)。
1 定義あたりの SetVar最大 10 個(デフォルト、ネスト含む)。
Regex.pattern最大 128 文字。
definition.secrets最大 20 個。key は 1〜64 文字(英字・数字・_・-)で 1 つの Script の中で一意、value は 1〜4,096 文字、description は 0〜128 文字(フィールドは必須)。
anonymousCallEnabled が true の定義where に createdBy: ":self" を使えない。下の 匿名呼び出し を参照。
他のリソースが参照している Script削除できない。Webhook が連携アクションとして参照している場合や、Scheduler が実行対象として参照している場合は削除が拒否され、返るコードは参照している側ごとに異なります(無効にした Scheduler も同じです。エラー を参照)。

上の静的制約は Script を 保存(作成・更新)する時点 で検査され、違反すると保存が拒否されます。外部呼び出しの数と全 Statement の数は妥当性エラーではなく プランの上限なので、同じ定義が上位プランでは許可されます。

保存時には、権限とリソースの種類も併せて検査します。

  • 作成者がそれらの Statement が使う リソース・アクションの権限を実際に持っているか を検査します(1 つでもなければ保存が拒否されます。エラー を参照)。会員(ServiceUser)を扱う Statement は、権限マップではなく SpaceRole settings の SETTING_SERVICE_LOGIN で検査します。
  • 会員(ServiceUser)を 作る・消す Statement が含まれていると保存を拒否します。Script は会員を作ったり消したりできないため、どの役割でも保存できません。会員に許される変更は ResourceUpdate・ResourcePatch の roleOverride と enableLogin だけです(会員ディレクトリを扱う)。

詳しいルールと時間予算、実行中に検査される値の長さの上限は 実行セマンティクス、制約、セキュリティ で扱います。

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 の中にあり、本文プロパティはありません。値がないキーはレスポンスから外れます。

プロパティ型説明
idstring記録の一意な識別子。
typestring常に "ScriptLog"。
spaceRefer<Space>この記録が属する Space。
scriptRefer<Script>実行された Script。
triggerReferこの実行を引き起こしたもの。下の説明を参照。
requestIdstringこの実行の識別子。実行レスポンスのエンベロープの requestId と同じ値です。
returnedbooleanReturn Statement に到達したかどうか。
valueany到達した Return が返した値です。オブジェクト・配列・スカラーのいずれもそのまま載ります。失敗した場合は失敗の理由がここに入ります。
successboolean成功したかどうか。
statusCodeinteger到達した Return が定めたステータスコード。
durationMsinteger実行にかかった時間(ミリ秒)。
createdByRefer<User> または Refer<ServiceUser>この記録が帰属するアイデンティティ。下の説明を参照。
createdAtstring (date-time)記録の作成日時。
updatedByRefer<User> または Refer<ServiceUser>createdBy と同じです。
updatedAtstring (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 も同じです)。
WGL401001anonymousCallEnabled が false の Script を、匿名実行の経路(/execute/anonymous)で呼び出しました。
WGL422062directCallEnabled が 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 概要のリクエストとレスポンス で扱います。