Skip to content

WebSocket RPC

GoClaw sử dụng WebSocket JSON-RPC (protocol v3) làm control plane chính. Client kết nối tới /ws, xác thực qua frame connect, sau đó trao đổi request/response/event frames.


Tổng Quan

  • URL kết nối: ws://<host>:<port>/ws
  • Protocol version: 3
  • Xác thực: Frame connect bắt buộc là request đầu tiên sau khi upgrade
  • Định dạng: JSON thuần túy, mỗi frame là một JSON object

Kết Nối và Xác Thực

Sau khi WebSocket upgrade thành công (HTTP 101), request đầu tiên bắt buộc phải là connect:

json
{
  "type": "req",
  "id": "client-gen-uuid",
  "method": "connect",
  "params": {
    "token": "gateway-token-hoac-api-key",
    "user_id": "external-user-id",
    "sender_id": "device-id-tuy-chon",
    "locale": "vi"
  }
}

Response thành công:

json
{
  "type": "res",
  "id": "client-gen-uuid",
  "ok": true,
  "payload": {
    "protocol": 3,
    "role": "admin",
    "user_id": "user-123",
    "server": {"version": "1.0.0", "uptime": "2h30m"}
  }
}

Luồng xác thực: Gateway token so sánh timing-safe → role admin. Nếu không khớp, SHA-256 hash → tra cứu API key → role suy ra từ scopes. Pairing codes cũng được chấp nhận cho channel devices.

Tham Số Kết Nối

Tham sốGiá trịMô tả
Read limit512 KBTự động đóng kết nối nếu vượt quá
Send buffer256Drop messages khi đầy
Read deadline60sReset mỗi message hoặc pong
Write deadline10sTimeout mỗi lần ghi
Ping interval30sServer keepalive

Định Dạng Frame

Request Frame (Client → Server)

json
{
  "type": "req",
  "id": "<client-gen-uuid>",
  "method": "<ten-method>",
  "params": { ... }
}

Response Frame (Server → Client)

json
{
  "type": "res",
  "id": "<khop-voi-request-id>",
  "ok": true,
  "payload": { ... }
}

Khi lỗi:

json
{
  "type": "res",
  "id": "<khop-voi-request-id>",
  "ok": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "permission denied",
    "details": "",
    "retryable": false,
    "retryAfterMs": 0
  }
}

Event Frame (Server → Client)

json
{
  "type": "event",
  "event": "<ten-event>",
  "payload": { ... },
  "seq": 42,
  "stateVersion": { ... }
}

Methods — Theo Nhóm

System

MethodMô tảRole tối thiểu
connectHandshake xác thực (phải là request đầu tiên)
healthKiểm tra sức khỏe server và clients kết nốiViewer
statusSố lượng agent/session/client nhanhViewer

Chat

MethodMô tảRole tối thiểu
chat.sendGửi message tới agent, nhận response (có thể streaming)Operator
chat.historyLấy lịch sử chat cho sessionViewer
chat.abortHủy agent invocations đang chạyOperator
chat.injectInject message vào session transcript không kích hoạt agentOperator

chat.send request:

json
{
  "message": "Xin chào agent",
  "agentId": "uuid-hoac-key",
  "sessionKey": "session-tuy-chon",
  "stream": true,
  "media": [{"type": "image", "url": "..."}]
}

Khi stream: true, intermediate events được phát: chunk, tool.call, tool.result, run.started, run.completed.

Sessions

MethodMô tảRole tối thiểu
sessions.listLiệt kê sessions (có phân trang)Viewer
sessions.previewLấy lịch sử session và tóm tắtViewer
sessions.patchCập nhật label, model, metadataOperator
sessions.deleteXóa sessionOperator
sessions.resetXóa tất cả messages của sessionOperator

Agents

MethodMô tảRole tối thiểu
agents.listLiệt kê tất cả agentsViewer
agentLấy trạng thái một agent cụ thểViewer
agent.waitChờ agent hoàn thànhViewer
agent.identity.getLấy identity agent (tên, emoji, avatar, description)Viewer
agents.createTạo agent mớiAdmin
agents.updateCập nhật thuộc tính agentAdmin
agents.deleteXóa agentAdmin
agents.files.listLiệt kê context files của agentAdmin
agents.files.getĐọc nội dung context fileAdmin
agents.files.setGhi nội dung context fileAdmin

Teams

MethodMô tảRole tối thiểu
teams.listLiệt kê tất cả teamsAdmin
teams.createTạo team mớiAdmin
teams.getLấy chi tiết team với membersAdmin
teams.updateCập nhật thuộc tính teamAdmin
teams.deleteXóa teamAdmin
teams.members.addThêm agent vào team với roleAdmin
teams.members.removeXóa agent khỏi teamAdmin
teams.tasks.listLiệt kê team tasks (có thể lọc)Admin
teams.tasks.getLấy task với comments/eventsAdmin
teams.tasks.createTạo taskAdmin
teams.tasks.approveChấp nhận taskAdmin
teams.tasks.rejectTừ chối taskAdmin
teams.tasks.commentThêm comment vào taskAdmin
teams.tasks.assignGán task cho memberAdmin
teams.tasks.deleteXóa taskAdmin
teams.known_usersLấy danh sách user IDs trong teamAdmin
teams.scopesLấy channel/chat scopes cho task routingAdmin
teams.workspace.listLiệt kê workspace itemsAdmin
teams.workspace.readĐọc nội dung workspace fileAdmin
teams.workspace.deleteXóa workspace itemAdmin

Cron

MethodMô tảRole tối thiểu
cron.listLiệt kê cron jobsViewer
cron.createTạo job theo lịchOperator
cron.updateCập nhật cài đặt jobOperator
cron.deleteXóa jobOperator
cron.toggleBật/tắt jobOperator
cron.statusLấy trạng thái schedulerViewer
cron.runKích hoạt chạy ngay lập tứcOperator
cron.runsLiệt kê lịch sử thực thiViewer

cron.create request:

json
{
  "name": "bao-cao-hang-ngay",
  "schedule": "every day at 09:00",
  "message": "Tạo báo cáo hàng ngày",
  "deliver": "channel",
  "channel": "telegram",
  "to": "chat-id",
  "agentId": "uuid"
}

Skills

MethodMô tảRole tối thiểu
skills.listLiệt kê tất cả skills khả dụngViewer
skills.getLấy metadata và nội dung skillViewer
skills.updateCập nhật metadata skill (chỉ DB-backed)Operator

Config

MethodMô tảRole tối thiểu
config.getLấy cấu hình hiện tại (secrets đã ẩn)Viewer
config.applyThay thế toàn bộ config (optimistic locking qua baseHash)Admin
config.patchCập nhật một phần configAdmin
config.schemaLấy JSON schema để tạo form configViewer

config.patch request:

json
{
  "raw": "{gateway: {port: 9090}}",
  "baseHash": "sha256-cua-config-hien-tai"
}

Channels

MethodMô tảRole tối thiểu
channels.listLiệt kê channels đã bậtViewer
channels.statusLấy trạng thái kết nối channelViewer
channels.instances.listLiệt kê instancesViewer
channels.instances.getLấy chi tiết instanceViewer
channels.instances.createTạo instanceAdmin
channels.instances.updateCập nhật instanceAdmin
channels.instances.deleteXóa instanceAdmin

Providers và Tools

MethodMô tảRole tối thiểu
providers.modelsLiệt kê models khả dụng từ tất cả providersViewer

API Keys

MethodMô tảRole tối thiểu
api_keys.listLiệt kê API keys (đã ẩn)Admin
api_keys.createTạo API key mớiAdmin
api_keys.revokeThu hồi API keyAdmin

Pairing (Ghép Thiết Bị)

MethodMô tảAuth
device.pair.requestYêu cầu ghép cặp (từ thiết bị)Chưa xác thực
device.pair.approveChấp nhận yêu cầu (từ admin)Admin
device.pair.denyTừ chối yêu cầuAdmin
device.pair.listLiệt kê pending + đã ghép cặpAdmin
device.pair.revokeThu hồi thiết bịAdmin
browser.pairing.statusKiểm tra trạng thái ghép cặp (poll)Chưa xác thực

Exec Approvals

MethodMô tảRole tối thiểu
exec.approval.listLiệt kê lệnh đang chờ duyệtOperator
exec.approval.approveChấp nhận lệnh (tùy chọn: luôn chấp nhận)Operator
exec.approval.denyTừ chối thực thi lệnhOperator

Usage và Quotas

MethodMô tảRole tối thiểu
usage.getLấy bản ghi sử dụng theo agentViewer
usage.summaryLấy tổng hợp sử dụng tokenViewer
quota.usageLấy mức tiêu thụ quotaViewer

Other

MethodMô tảRole tối thiểu
sendGửi message đi ra qua channelOperator
logs.tailBật/tắt live log streamingAdmin
delegations.listLiệt kê lịch sử delegationViewer
delegations.getLấy chi tiết delegationViewer

Streaming Events

Khi chat.send được gọi với stream: true, server đẩy events theo thứ tự:

EventMô tảPayload chính
run.startedAgent run bắt đầurunId, agentId
chunkText streaming chunkcontent (string)
tool.callTool invocation bắt đầutoolName, toolInput
tool.resultTool invocation hoàn thànhtoolName, result
run.completedAgent run kết thúccontent, usage

Events Đẩy Từ Server

EventMô tả
session.updatedSession metadata thay đổi
agent.updatedCấu hình agent thay đổi
cron.firedCron job được kích hoạt
team.task.*Team task lifecycle events
exec.approval.pendingLệnh đang chờ duyệt

Permission Matrix

RoleQuyền truy cập
AdminTất cả methods
OperatorĐọc + ghi (chat, sessions, cron, approvals, send)
ViewerChỉ đọc (list, get, preview, status, history)

Methods chỉ Admin: config.apply, config.patch, agents.create, agents.update, agents.delete, channels.toggle, device.pair.approve, device.pair.deny, device.pair.revoke, teams.*, api_keys.*


Mã Lỗi

CodeMô tả
UNAUTHORIZEDXác thực thất bại hoặc không đủ role
INVALID_REQUESTTrường thiếu, sai kiểu, hoặc method không tồn tại
NOT_FOUNDTài nguyên không tồn tại
ALREADY_EXISTSTài nguyên đã tồn tại
UNAVAILABLEDịch vụ tạm thời không khả dụng
RESOURCE_EXHAUSTEDVượt giới hạn rate limit
AGENT_TIMEOUTAgent run vượt quá thời gian cho phép
INTERNALLỗi server không mong đợi

Response lỗi bao gồm retryable (boolean) và retryAfterMs (integer).


Xem Thêm