Bundled plugin guides
Admin HTTP RPC 外掛
內建的 admin-http-rpc 外掛會透過 HTTP 暴露一組列入允許清單的閘道控制平面方法,供無法保持閘道 WebSocket 連線開啟的受信任主機自動化使用。
它會隨 OpenClaw 一起提供,但預設為停用;停用時,不會註冊此路由。啟用時,它會在與閘道相同的監聽器上新增 POST /api/v1/admin/rpc(http://<gateway-host>:<port>/api/v1/admin/rpc)。
只應為私有主機工具、tailnet 自動化,或受信任的內部入口啟用它。切勿將此路由直接暴露到公用網際網路。
啟用前
Admin HTTP RPC 是完整的操作員控制平面介面:任何通過閘道 HTTP 驗證的呼叫端都可以叫用下方列入允許清單的方法。只有在以下條件全部成立時才啟用它:
- 呼叫端受信任,可以操作閘道。
- 呼叫端無法使用 WebSocket RPC 用戶端。
- 此路由只能透過回送、tailnet,或私有且已驗證的入口存取。
- 你已審查允許的方法,且它們符合你計畫執行的自動化。
對於能保持閘道 WebSocket 連線開啟的 OpenClaw 用戶端和互動式工具,請改用 WebSocket RPC。
啟用
啟用內建外掛:
命令列介面
openclaw plugins enable admin-http-rpcopenclaw gateway restart設定
{ plugins: { entries: { "admin-http-rpc": { enabled: true }, }, },}路由會在外掛啟動期間註冊,因此變更外掛設定後請重新啟動閘道。
不再需要 HTTP 介面時,請停用它:
openclaw plugins disable admin-http-rpcopenclaw gateway restart驗證路由
使用 health 作為最小的安全請求:
curl -sS http://<gateway-host>:<port>/api/v1/admin/rpc \ -H 'Authorization: Bearer <gateway-token>' \ -H 'Content-Type: application/json' \ -d '{"method":"health","params":{}}'成功的回應會有 ok: true:
{ "id": "generated-request-id", "ok": true, "payload": { "status": "ok" }}外掛停用時,此路由會傳回 404,因為它未被註冊。
驗證
此外掛路由使用閘道 HTTP 驗證。
常見驗證路徑:
- 共用密鑰驗證(
gateway.auth.mode="token"或"password"):Authorization: Bearer <token-or-password> - 帶有受信任身分的 HTTP 驗證(
gateway.auth.mode="trusted-proxy"):透過已設定的身分感知代理路由,並讓它注入必要的身分標頭 - 私有入口開放驗證(
gateway.auth.mode="none"):不需要驗證標頭
安全模型
請將此外掛視為完整的閘道操作員介面。
- 啟用此外掛會有意在
/api/v1/admin/rpc提供對列入允許清單的管理 RPC 方法的存取權。 - 此外掛宣告保留的
contracts.gatewayMethodDispatch: ["authenticated-request"]資訊清單合約,這讓它已通過閘道驗證的 HTTP 路由能在處理程序內分派控制平面方法。這不是沙箱:此合約會防止意外使用保留的 SDK 輔助工具,但受信任的外掛仍會在閘道處理程序中執行。 - 共用密鑰 bearer 驗證(
token/password模式)證明持有閘道操作員密鑰;此路徑會忽略較窄的x-openclaw-scopes標頭,並還原正常的完整操作員預設值。 - 帶有受信任身分的 HTTP 驗證(
trusted-proxy模式)會在存在x-openclaw-scopes時採用它。 gateway.auth.mode="none"表示如果外掛已啟用,此路由不需要驗證。只應在你完全信任的私有入口後方使用。- 外掛路由驗證通過後,請求會透過與 WebSocket RPC 相同的閘道方法處理常式和範圍檢查分派。
- 請將此路由保留在回送、tailnet,或私有受信任入口上。不要將它直接暴露到公用網際網路。呼叫端跨越信任邊界時,請使用個別的閘道。
請求
POST /api/v1/admin/rpcAuthorization: Bearer <gateway-token>Content-Type: application/json{ "id": "optional-request-id", "method": "health", "params": {}}欄位:
id(字串,選用):複製到回應中。省略時會產生 UUID。method(字串,必填):允許的閘道方法名稱。params(任何,選用):方法專屬參數。
預設的最大請求本文大小為 1 MB。
回應
成功回應使用閘道 RPC 形狀:
{ "id": "optional-request-id", "ok": true, "payload": {}}閘道方法錯誤使用:
{ "id": "optional-request-id", "ok": false, "error": { "code": "INVALID_REQUEST", "message": "bad params" }}HTTP 狀態會依錯誤碼而定:
| 錯誤碼 | HTTP 狀態 |
|---|---|
INVALID_REQUEST |
400 |
APPROVAL_NOT_FOUND |
404 |
NOT_LINKED, NOT_PAIRED |
409 |
UNAVAILABLE |
503 |
AGENT_TIMEOUT |
504 |
| 任何其他碼 | 500 |
允許的方法
- 探索:
commands.list傳回此外掛允許的 HTTP RPC 方法名稱。 - 閘道:
health,status,logs.tail,usage.status,usage.cost,gateway.restart.request - 設定:
config.get,config.schema,config.schema.lookup,config.set,config.patch,config.apply - 頻道:
channels.status,channels.start,channels.stop,channels.logout - 網頁:
web.login.start,web.login.wait - 模型:
models.list,models.authStatus - 代理:
agents.list,agents.create,agents.update,agents.delete - 核准:
exec.approvals.get,exec.approvals.set,exec.approvals.node.get,exec.approvals.node.set - 排程:
cron.status,cron.list,cron.get,cron.runs,cron.add,cron.update,cron.remove,cron.run - 裝置:
device.pair.list,device.pair.approve,device.pair.reject,device.pair.remove - 節點:
node.list,node.describe,node.pair.list,node.pair.approve,node.pair.reject,node.pair.remove,node.rename - 任務:
tasks.list,tasks.get,tasks.cancel - 診斷:
doctor.memory.status,update.status
其他閘道方法會被封鎖,直到它們被有意加入。
WebSocket 比較
一般閘道 WebSocket RPC 路徑仍是 OpenClaw 用戶端偏好的控制平面 API。只有在主機工具需要請求/回應式 HTTP 介面時,才使用 Admin HTTP RPC。
沒有受信任裝置身分的共用權杖 WebSocket 用戶端,無法在連線時自行宣告管理範圍。Admin HTTP RPC 會刻意沿用既有的受信任 HTTP 操作員模型:外掛啟用時,共用密鑰 bearer 驗證會被視為此管理介面的完整操作員存取權。
疑難排解
404 Not Found
: 外掛已停用、閘道在啟用後尚未重新啟動,或請求被送到不同的閘道處理程序。
401 Unauthorized
: 請求未滿足閘道 HTTP 驗證。請檢查 bearer 權杖或 trusted-proxy 身分標頭。
405 Method Not Allowed
: 請求使用了 POST 以外的方法。
413 Payload Too Large
: 請求本文超過 1 MB 限制。
400 INVALID_REQUEST
: 請求本文不是有效的 JSON、缺少 method 欄位,或方法不在外掛允許清單中。
503 UNAVAILABLE
: 閘道方法處理常式無法使用。請檢查閘道記錄,並在閘道完成啟動後重試。