15 KiB
| read_when | summary | title | x-i18n | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
เรียกใช้เครื่องมือเดียวโดยตรงผ่านปลายทาง HTTP ของ Gateway | API สำหรับเรียกใช้เครื่องมือ |
|
การเรียกใช้เครื่องมือ (HTTP)
Gateway ของ OpenClaw เปิดเผย endpoint HTTP แบบเรียบง่ายสำหรับเรียกใช้เครื่องมือเดียวโดยตรง endpoint นี้เปิดใช้งานเสมอและใช้การยืนยันตัวตนของ Gateway ร่วมกับนโยบายเครื่องมือ เช่นเดียวกับพื้นผิว /v1/* ที่เข้ากันได้กับ OpenAI การยืนยันตัวตนแบบ bearer ด้วยความลับร่วมจะถือเป็นสิทธิ์เข้าถึงของผู้ปฏิบัติการที่เชื่อถือได้สำหรับ Gateway ทั้งหมด
POST /tools/invoke- พอร์ตเดียวกับ Gateway (มัลติเพล็กซ์ WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
ขนาด payload สูงสุดเริ่มต้นคือ 2 MB
การยืนยันตัวตน
ใช้การกำหนดค่าการยืนยันตัวตนของ Gateway
เส้นทางการยืนยันตัวตน HTTP ที่พบบ่อย:
- การยืนยันตัวตนด้วยความลับร่วม (
gateway.auth.mode="token"หรือ"password"):Authorization: Bearer <token-or-password> - การยืนยันตัวตน HTTP ที่มีตัวตนที่เชื่อถือได้ (
gateway.auth.mode="trusted-proxy"): ส่งผ่านพร็อกซีที่รับรู้ตัวตนตามที่กำหนดค่าไว้ และให้พร็อกซีนั้นฉีด header ตัวตนที่จำเป็น - การยืนยันตัวตนแบบเปิดผ่านทางเข้าส่วนตัว (
gateway.auth.mode="none"): ไม่ต้องใช้ header การยืนยันตัวตน
หมายเหตุ:
- เมื่อ
gateway.auth.mode="token"ให้ใช้gateway.auth.token(หรือOPENCLAW_GATEWAY_TOKEN) - เมื่อ
gateway.auth.mode="password"ให้ใช้gateway.auth.password(หรือOPENCLAW_GATEWAY_PASSWORD) - เมื่อ
gateway.auth.mode="trusted-proxy"คำขอ HTTP ต้องมาจากแหล่งพร็อกซีที่เชื่อถือได้ ซึ่งกำหนดค่าไว้; พร็อกซี loopback บนโฮสต์เดียวกันต้องกำหนดอย่างชัดเจนgateway.auth.trustedProxy.allowLoopback = true - หากกำหนดค่า
gateway.auth.rateLimitและเกิดความล้มเหลวในการยืนยันตัวตนมากเกินไป endpoint จะส่งคืน429พร้อมRetry-After
ขอบเขตความปลอดภัย (สำคัญ)
ให้ถือว่า endpoint นี้เป็นพื้นผิวที่มี สิทธิ์เข้าถึงระดับผู้ปฏิบัติการเต็มรูปแบบ สำหรับอินสแตนซ์ Gateway
- การยืนยันตัวตนแบบ bearer ของ HTTP ที่นี่ไม่ใช่โมเดล scope ต่อผู้ใช้แบบแคบ
- token/password ของ Gateway ที่ถูกต้องสำหรับ endpoint นี้ควรถูกปฏิบัติเหมือนข้อมูลประจำตัวของเจ้าของ/ผู้ปฏิบัติการ
- สำหรับโหมดการยืนยันตัวตนด้วยความลับร่วม (
tokenและpassword) endpoint จะคืนค่าเริ่มต้นระดับผู้ปฏิบัติการเต็มรูปแบบตามปกติ แม้ว่าผู้เรียกจะส่ง headerx-openclaw-scopesที่แคบกว่า - การยืนยันตัวตนด้วยความลับร่วมยังถือว่าการเรียกใช้เครื่องมือโดยตรงบน endpoint นี้เป็นรอบที่ผู้ส่งคือเจ้าของ
- โหมด HTTP ที่มีตัวตนที่เชื่อถือได้ (เช่น การยืนยันตัวตนด้วยพร็อกซีที่เชื่อถือได้ หรือ
gateway.auth.mode="none"บนทางเข้าส่วนตัว) จะเคารพx-openclaw-scopesเมื่อมีอยู่ และมิฉะนั้นจะย้อนกลับไปใช้ชุด scope เริ่มต้นของผู้ปฏิบัติการตามปกติ - เก็บ endpoint นี้ไว้เฉพาะบน loopback/tailnet/ทางเข้าส่วนตัวเท่านั้น; อย่าเปิดเผยต่ออินเทอร์เน็ตสาธารณะโดยตรง
เมทริกซ์การยืนยันตัวตน:
gateway.auth.mode="token"หรือ"password"+Authorization: Bearer ...- พิสูจน์การครอบครองความลับร่วมของผู้ปฏิบัติการ Gateway
- ไม่สนใจ
x-openclaw-scopesที่แคบกว่า - คืนค่าชุด scope เริ่มต้นของผู้ปฏิบัติการแบบเต็ม:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - ถือว่าการเรียกใช้เครื่องมือโดยตรงบน endpoint นี้เป็นรอบที่ผู้ส่งคือเจ้าของ
- โหมด HTTP ที่มีตัวตนที่เชื่อถือได้ (เช่น การยืนยันตัวตนด้วยพร็อกซีที่เชื่อถือได้ หรือ
gateway.auth.mode="none"บนทางเข้าส่วนตัว)- ยืนยันตัวตนภายนอกที่เชื่อถือได้บางอย่างหรือขอบเขตการปรับใช้
- เคารพ
x-openclaw-scopesเมื่อมี header อยู่ - ย้อนกลับไปใช้ชุด scope เริ่มต้นของผู้ปฏิบัติการตามปกติเมื่อไม่มี header
- สูญเสียความหมายแบบเจ้าของเฉพาะเมื่อผู้เรียกจำกัด scope ให้แคบลงอย่างชัดเจนและละเว้น
operator.admin
เนื้อหาคำขอ
{
"tool": "sessions_list",
"action": "json",
"args": {},
"sessionKey": "main",
"dryRun": false
}
ฟิลด์:
tool(สตริง, จำเป็น): ชื่อเครื่องมือที่จะเรียกใช้action(สตริง, ไม่บังคับ): แมปเข้าไปใน args หาก schema ของเครื่องมือรองรับactionและ payload args ละเว้นค่านี้args(อ็อบเจกต์, ไม่บังคับ): อาร์กิวเมนต์เฉพาะของเครื่องมือsessionKey(สตริง, ไม่บังคับ): คีย์ session เป้าหมาย หากละเว้นหรือเป็น"main"Gateway จะใช้คีย์ session หลักที่กำหนดค่าไว้ (เคารพsession.mainKeyและ agent เริ่มต้น หรือglobalใน scope แบบ global)dryRun(บูลีน, ไม่บังคับ): สำรองไว้สำหรับการใช้งานในอนาคต; ปัจจุบันถูกละเว้น
นโยบาย + พฤติกรรมการกำหนดเส้นทาง
ความพร้อมใช้งานของเครื่องมือถูกกรองผ่านลำดับนโยบายเดียวกับที่ agent ของ Gateway ใช้:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- นโยบายกลุ่ม (หากคีย์ session แมปกับกลุ่มหรือช่องทาง)
- นโยบาย subagent (เมื่อเรียกใช้ด้วยคีย์ session ของ subagent)
หากนโยบายไม่อนุญาตเครื่องมือ endpoint จะส่งคืน 404
หมายเหตุสำคัญเกี่ยวกับขอบเขต:
- การอนุมัติ exec เป็นรั้วป้องกันของผู้ปฏิบัติการ ไม่ใช่ขอบเขตการอนุญาตแยกต่างหากสำหรับ endpoint HTTP นี้ หากเครื่องมือเข้าถึงได้ที่นี่ผ่านการยืนยันตัวตนของ Gateway + นโยบายเครื่องมือ
/tools/invokeจะไม่เพิ่ม prompt การอนุมัติรายครั้งเพิ่มเติม - อย่าแชร์ข้อมูลประจำตัว bearer ของ Gateway กับผู้เรียกที่ไม่น่าเชื่อถือ หากต้องการแยกระหว่างขอบเขตความไว้วางใจ ให้รัน Gateway แยกกัน (และควรแยกผู้ใช้/โฮสต์ของ OS ด้วย)
HTTP ของ Gateway ยังใช้รายการปฏิเสธแบบบังคับโดยค่าเริ่มต้น (แม้ว่านโยบาย session จะอนุญาตเครื่องมือนั้น):
exec— การเรียกใช้คำสั่งโดยตรง (พื้นผิว RCE)spawn— การสร้าง process ลูกตามอำเภอใจ (พื้นผิว RCE)shell— การเรียกใช้คำสั่ง shell (พื้นผิว RCE)fs_write— การแก้ไขไฟล์ใดก็ได้บนโฮสต์ตามอำเภอใจfs_delete— การลบไฟล์ใดก็ได้บนโฮสต์ตามอำเภอใจfs_move— การย้าย/เปลี่ยนชื่อไฟล์ใดก็ได้บนโฮสต์ตามอำเภอใจapply_patch— การใช้ patch สามารถเขียนไฟล์ใดก็ได้ใหม่sessions_spawn— การจัดการ session; การ spawn agent ระยะไกลคือ RCEsessions_send— การฉีดข้อความข้าม sessioncron— control plane ระบบอัตโนมัติแบบถาวรgateway— control plane ของ Gateway; ป้องกันการกำหนดค่าใหม่ผ่าน HTTPnodes— relay คำสั่งของ Node สามารถเข้าถึง system.run บนโฮสต์ที่จับคู่ไว้whatsapp_login— การตั้งค่าแบบโต้ตอบที่ต้องสแกน QR จาก terminal; จะค้างบน HTTP
คุณสามารถปรับแต่งรายการปฏิเสธนี้ผ่าน gateway.tools:
{
gateway: {
tools: {
// Additional tools to block over HTTP /tools/invoke
deny: ["browser"],
// Remove tools from the default deny list
allow: ["gateway"],
},
},
}
เพื่อช่วยให้นโยบายกลุ่มแก้ context ได้ คุณสามารถตั้งค่าเพิ่มเติมได้:
x-openclaw-message-channel: <channel>(ตัวอย่าง:slack,telegram)x-openclaw-account-id: <accountId>(เมื่อมีหลายบัญชี)
การตอบกลับ
200→{ ok: true, result }400→{ ok: false, error: { type, message } }(คำขอไม่ถูกต้องหรือข้อผิดพลาด input ของเครื่องมือ)401→ ไม่ได้รับอนุญาต429→ การยืนยันตัวตนถูกจำกัดอัตรา (Retry-Afterถูกตั้งค่า)404→ เครื่องมือไม่พร้อมใช้งาน (ไม่พบหรือไม่ได้อยู่ในรายการอนุญาต)405→ ไม่อนุญาต method นี้500→{ ok: false, error: { type, message } }(ข้อผิดพลาดการเรียกใช้เครื่องมือที่ไม่คาดคิด; ข้อความถูกทำให้ปลอดภัยแล้ว)
ตัวอย่าง
curl -sS http://127.0.0.1:18789/tools/invoke \
-H 'Authorization: Bearer secret' \
-H 'Content-Type: application/json' \
-d '{
"tool": "sessions_list",
"action": "json",
"args": {}
}'