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)のトークンを どちらも 受け取ります。ACMAScript API はなく、読み取り専用の配信 API(CDA、ACDA)にもありません。

Scriptversion を持つリソースであり、プランごとに個数制限を受ける課金対象のリソースです。ただし ContentMedia と異なり 公開状態を持ちません。 sysstatuspublish のような公開関連のプロパティがなく、変更するたびに version だけが上がります。公開・公開停止の概念がないため、削除も公開停止なしに直ちに行われます。

リソース構造

次は Script "t6-http" の単一照会レスポンスです。sys(システムプロパティ)とともに、namedefinition、そして呼び出し経路を開閉する directCallEnabledanonymousCallEnabled を本文プロパティとして持ちます。

{
  "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 を実行でき、実行は 作成者のアイデンティティで行われます。条件と保存の規則は下の 匿名呼び出し で扱います。

sysstatuspublisharchive がないことに注意してください。Script は配信経路に公開されるリソースではなく、管理 API でオーサリング・実行するリソースです。

システムプロパティ (sys)

すべての Script は共通のシステムプロパティを sys オブジェクトに格納します。spacecreatedByupdatedByRefer の形({ "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 ずつ上がります。

ContentContent TypeMediasys にある status(公開状態)と publish(公開履歴)は Script には ありません。 Script は公開されないためです。archive プロパティもありません。そのため Scriptversion は公開なしに、純粋に作成・更新の回数だけ増加します。

定義と名前 (name, definition)

Script の本文プロパティは namedefinitiondirectCallEnabledanonymousCallEnabled の 4 つです。

プロパティ必須説明
name必須Script の名前。1〜64 文字。
definition必須ScriptDefinition。下の表のキーで構成されます。
directCallEnabled任意この Script/execute で直接呼び出せるかどうか。ブール、省略時は truefalse の場合、直接呼び出しは拒否されます。Webhook の連携アクション(script)と Scheduler はこのエンドポイントを通らないため、そのまま実行します。
anonymousCallEnabled任意この Script を認証なしで /execute/anonymous で呼び出せるかどうか。ブール、省略時は false。下の 匿名呼び出し を参照。PUT は全体置換なので、省略すると false に戻ります。

definition(ScriptDefinition)のキー:

キー必須説明
method必須この Script を呼び出す HTTP メソッド。GetPostPutPatchDelete のいずれか。実行時にこの値でマッチングします。
statements必須実行するステートメント(statement)の順序付き配列。最小 1 個。
payloadSchema任意JSON Schema。指定すると実行前にリクエスト payload をこのスキーマで検証します。

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

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

制約

対象制約
name1〜64 文字、必須。
definition.statements最小 1 個、必須。
1 定義あたりの外部呼び出し(HttpEmailSend)プランごと(料金プラン を参照)。
1 定義あたりの全 statementプランごと(料金プラン を参照、ネスト含む)。
1 定義あたりの SetVar最大 10 個(デフォルト、ネスト含む)。
Regex.pattern最大 128 文字。
anonymousCallEnabledtrue の定義wherecreatedBy: ":self" を使えない。下の 匿名呼び出し を参照。
他のリソースが参照している Script削除できない。Webhook が連携アクションとして参照している場合や、Scheduler が実行対象として参照している場合は削除が拒否され、返るコードは参照している側ごとに異なります(無効にした Scheduler も同じです。エラー を参照)。

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

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

  • 作成者がそれらの statement が使う リソース・アクションの権限を実際に持っているか を検査します(1 つでもなければ保存が拒否されます。エラー を参照)。会員(ServiceUser)を読む文は、権限マップではなく SpaceRole settingsSETTING_SERVICE_LOGIN で検査します。
  • 会員(ServiceUser)を 変更する文が含まれていると保存を拒否します。このリソースは Script では読み取りだけなので、どの役割でも保存できません。

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

Script は課金対象のリソースで、Organization ごとの個数 がプランごとに制限されます(Free 10 / Basic 30 / Pro 100 / Enterprise 無制限)。上限に達すると新しい Script の作成が拒否されます(プランごとの個数上限 を参照)。

匿名呼び出し (anonymousCallEnabled)

anonymousCallEnabledtrue にすると、その Script認証のない専用経路でも実行されます。

{method} https://script.weegloo.com/v1/spaces/{spaceId}/scripts/{scriptId}/execute/anonymous

これが必要な場合はまれです。 決済代行会社(PG・MoR)のように、こちらへコールバックを送る必要があるのに カスタムヘッダーに対応しておらず Access Token を載せる方法がない 第三者のための仕組みです。トークンを載せられる呼び出し元は、すべて認証経路(/execute)を使います。

  • 認証経路はそのままです。 /execute は今も Bearer トークンと ScriptExecute 権限を要求します。認証なしになるのは /execute/anonymous というこの経路 1 つだけです。
  • トークンを受け取りません。 トークンを載せて送っても無視され、実行は常に作成者のアイデンティティです。呼び出し元のアイデンティティで実行するには /execute を使います。
  • 2 つのゲートを両方通る必要があります。 anonymousCallEnabledfalse なら認証されていないアクセスとして拒否され、directCallEnabledfalse なら直接呼び出しがふさがれていて拒否されます。返るコードは、どちらのゲートに引っかかったかによって異なります(エラー を参照)。匿名を許可しているかを先に見るため、資格のない呼び出し元はその Script の設定状態を知ることができません。
  • その先は /execute と同じです。リクエストの HTTP メソッドが definition.method と一致しなければならず、OrganizationScript 実行クォータを消費して使用量として計量されます。
  • この経路は、認証された実行の経路と同じ Script ホスト(https://script.weegloo.com/v1)にあります。

作成者のアイデンティティで実行されます

呼び出し元がいないため、実行はその Script作成したユーザー(sys.createdBy)のアイデンティティで行われます。

  • Script の中で作成または更新した ContentMediacreatedByupdatedBy には 作成者が入ります(匿名の呼び出し元ではありません。帰属させる他のアイデンティティがないためです)。
  • wherecreatedBy: ":self" も呼び出し元ではなく作成者に解決されます。認証された呼び出し元を前提に書いた所有権フィルターをそのまま残して匿名を有効にすると、作成者のリソースが黙って開いてしまうため、そうした定義はそもそも保存されません(下記)。

保存時の追加検査

anonymousCallEnabledtrueScript には、規則が 1 つ追加されます。

規則コード
ResourceFindResourceForEachwherecreatedBy: ":self" を使えないエラー を参照

匿名呼び出しには呼び出し元のアイデンティティがなく、:self作成者に解決される からです。認証された呼び出し元を前提に書いた所有権フィルターが黙って破られることを、保存の時点で防ぎます。

実質的な認証は Script が自分で行います

この経路には、プラットフォームがかけてくれる認証がありません。URL を知っている者は誰でも呼び出せ、その呼び出しは OrganizationScript 実行クォータを消費し、別途のレートリミットもありません。 そのため匿名 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 です。読み取るにはその ScriptRead 権限が必要です。

{
  "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 文に到達したかどうか。
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 の連携アクションとして実行されたならその WebhookScheduler が回したものならその Scheduler です。

requestId は実行レスポンスのエンベロープの requestId と同じ値です。呼び出し元が受け取ったレスポンスから、その実行の記録を見つけるときにこの値を基準として使います。

記録は実行が終わったあとに一度書かれ、変わりません。成功した実行は 1 時間、失敗した実行は 3 日後に消えます。 それより長く残す必要がある値は、Script の中で Content として保存してください。

createdBy は、その実行がどのアイデンティティで行われたかを指します。Weegloo User トークンで呼んだ実行はそのユーザーで、会員(ServiceUser)トークンで呼んだ実行はその会員です。呼び出し元がいない実行は、アイデンティティがトリガーから来ます。匿名実行はその Script の作成者、Scheduler が回した実行は その Scheduler を作成したユーザー(Script の作成者と異なることがあります)、Webhook が実行したものは その Webhook を作成したユーザーです。WebhookrunAsScript の中の作業が誰の名前で行われるかを定めるだけで、このログの帰属は変えません。

エラー

Script を呼び出したり削除したりするときに出るコードです。定義を保存するときに出るコードは 実行セマンティクス、制約、セキュリティのエラー に、値式の規則に反したコードは 値式のエラー に、すべてのリソースに共通するコードは 共通エラー にあります。

コード条件
WGL422066削除しようとしている Script を、Webhook が連携アクションとして参照しています(無効にした Webhook も同じです)。
WGL422110削除しようとしている Script を、Scheduler が実行対象として参照しています(無効にした Scheduler も同じです)。
WGL401001anonymousCallEnabledfalseScript を、匿名実行の経路(/execute/anonymous)で呼び出しました。
WGL422062directCallEnabledfalseScript を、実行の経路(/execute/execute/anonymous)で直接呼び出しました。
WGL400007実行リクエストの HTTP メソッドが、その Scriptdefinition.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 トークンを どちらも 受け取り、いずれの場合も呼び出し元にその ScriptExecute 権限が必要です。

匿名実行(/execute/anonymous)だけは例外で、認証ヘッダーを要求しません。 同じ Script ホストにあり、その ScriptanonymousCallEnabled を有効にしているときにだけ到達します(上の 匿名呼び出し を参照)。

上の認証された実行の例のレスポンスには return がありません。対象の Script が値を含む Return に到達せずに終わったためです(この場合 statusCode はデフォルト値 200)。匿名実行の例のように Return で値を返すと、レスポンスに return(または Return.isError が真であれば error)が載ります。レスポンスの全ルールは Script 概要のリクエストとレスポンス で扱います。

  • Script 概要: 最上位の ScriptDefinition 構造、リクエストとレスポンス、1 回の実行に与えられる時間を扱います。
  • Statement カタログ: statements に入れる各ステートメントのフィールドと結果を扱います。
  • 値の式: { /pointer } 参照と JsonLogic 演算を扱います。
  • 実行セマンティクス、制約、セキュリティ: 静的制約、プランごとの個数上限、権限とセキュリティモデルを扱います。
  • SpaceRoleServiceUserRole: Script のアクション権限(Execute を含む)をロールに付与する方法を扱います。