Kênh và định tuyến
OpenClaw định tuyến phản hồi trở lại kênh nơi tin nhắn được gửi đến. Mô hình không chọn kênh; việc định tuyến mang tính xác định và do cấu hình máy chủ kiểm soát. Với phạm vi tin nhắn trực tiếp mặc định, tin nhắn trực tiếp từ mọi kênh đều hội tụ vào phiên chính của tác tử.Thuật ngữ chính
- Kênh: một plugin kênh đi kèm như
discord,googlechat,imessage,irc,line,signal,slack,telegramhoặcwhatsapp, cùng với các kênh plugin đã cài đặt.webchatlà kênh giao diện người dùng WebChat nội bộ và không phải là kênh gửi đi có thể cấu hình. - AccountId: phiên bản tài khoản theo từng kênh (khi được hỗ trợ).
- Tài khoản mặc định tùy chọn của kênh:
channels.<channel>.defaultAccountchọn tài khoản được sử dụng khi đường dẫn gửi đi không chỉ địnhaccountId.- Trong thiết lập nhiều tài khoản, hãy đặt một tài khoản mặc định rõ ràng (
defaultAccounthoặc tài khoản có têndefault) khi cấu hình từ hai tài khoản trở lên. Nếu không, định tuyến dự phòng có thể chọn ID tài khoản đã chuẩn hóa đầu tiên.
- Trong thiết lập nhiều tài khoản, hãy đặt một tài khoản mặc định rõ ràng (
- AgentId: một không gian làm việc + kho phiên biệt lập (“bộ não”).
- SessionKey: khóa nhóm dùng để lưu trữ ngữ cảnh và kiểm soát tính đồng thời.
Tiền tố đích gửi đi
Đích gửi đi được chỉ định rõ ràng có thể bao gồm tiền tố nhà cung cấp, chẳng hạn nhưtelegram:123 hoặc tg:123. Phần lõi chỉ coi tiền tố đó là gợi ý chọn kênh khi kênh được chọn là last hoặc chưa được phân giải, và chỉ khi plugin đã tải công bố hỗ trợ tiền tố đó. Nếu bên gọi đã chọn rõ một kênh, tiền tố nhà cung cấp phải khớp với kênh đó; các tổ hợp chéo kênh như gửi WhatsApp đến telegram:123 sẽ thất bại trước bước chuẩn hóa đích dành riêng cho plugin.
Các tiền tố loại đích và dịch vụ như channel:<id>, user:<id>, room:<id>, thread:<id>, imessage:<handle> và sms:<number> vẫn nằm trong cú pháp của kênh đã chọn. Bản thân chúng không chọn nhà cung cấp.
Dạng khóa phiên (ví dụ)
Theo mặc định, tin nhắn trực tiếp được gộp vào phiên chính của tác tử:agent:<agentId>:<mainKey>(mặc định:agent:main:main)
session.dmScope kiểm soát việc gộp tin nhắn trực tiếp: main (mặc định) dùng chung một
phiên chính, còn per-peer, per-channel-peer và per-account-channel-peer
giữ tin nhắn trực tiếp trong các phiên riêng biệt. Một liên kết định tuyến có thể ghi đè phạm vi cho các
đối tác ngang hàng khớp với nó qua bindings[].session.dmScope.
Ngay cả khi lịch sử hội thoại tin nhắn trực tiếp được dùng chung với phiên chính, sandbox và
chính sách công cụ vẫn sử dụng khóa thời gian chạy trò chuyện trực tiếp được suy ra theo từng tài khoản cho tin nhắn trực tiếp bên ngoài
để các tin nhắn bắt nguồn từ kênh không bị xử lý như lượt chạy phiên chính cục bộ.
Các nhóm và kênh vẫn được tách biệt theo từng kênh:
- Nhóm:
agent:<agentId>:<channel>:group:<id> - Kênh/phòng:
agent:<agentId>:<channel>:channel:<id>
- Các luồng Slack/Discord nối thêm
:thread:<threadId>vào khóa cơ sở. - Các chủ đề diễn đàn Telegram nhúng
:topic:<topicId>vào khóa nhóm.
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Ghim tuyến tin nhắn trực tiếp chính
Khisession.dmScope là main, các tin nhắn trực tiếp có thể dùng chung một phiên chính.
Để ngăn lastRoute của phiên bị ghi đè bởi tin nhắn trực tiếp từ người không phải chủ sở hữu,
OpenClaw suy ra một chủ sở hữu được ghim từ allowFrom khi tất cả các điều kiện sau đều đúng:
allowFromcó đúng một mục không phải ký tự đại diện.- Mục đó có thể được chuẩn hóa thành ID người gửi cụ thể cho kênh đó.
- Người gửi tin nhắn trực tiếp đến không khớp với chủ sở hữu được ghim đó.
lastRoute của phiên chính.
Ghi nhận đầu vào có bảo vệ
Plugin kênh có thể đánh dấu bản ghi phiên đến làcreateIfMissing: false
khi một đường dẫn có bảo vệ không được tạo phiên OpenClaw mới. Trong chế độ đó,
OpenClaw có thể cập nhật siêu dữ liệu và lastRoute cho một phiên hiện có, nhưng
không tạo mục phiên chỉ dành cho tuyến chỉ vì đã quan sát thấy một tin nhắn.
Quy tắc định tuyến (cách chọn tác tử)
Định tuyến chọn một tác tử cho mỗi tin nhắn đến:- Khớp chính xác đối tác ngang hàng (
bindingsvớipeer.kind+peer.id). - Khớp đối tác ngang hàng cha (kế thừa luồng).
- Khớp ký tự đại diện đối tác ngang hàng (
peer.id: "*"cho một loại đối tác ngang hàng). - Khớp máy chủ + vai trò (Discord) qua
guildId+roles. - Khớp máy chủ (Discord) qua
guildId. - Khớp nhóm làm việc (Slack) qua
teamId. - Khớp tài khoản (
accountIdtrên kênh). - Khớp kênh (bất kỳ tài khoản nào trên kênh đó,
accountId: "*"). - Tác tử mặc định (
agents.list[].default, nếu không thì mục đầu tiên trong danh sách, dự phòng vềmain).
peer, guildId, teamId, roles), tất cả các trường được cung cấp đều phải khớp để liên kết đó được áp dụng.
Tác tử khớp xác định không gian làm việc và kho phiên nào được sử dụng.
Nhóm phát sóng (chạy nhiều tác tử)
Nhóm phát sóng cho phép chạy nhiều tác tử cho cùng một đối tác ngang hàng khi OpenClaw thông thường sẽ phản hồi (ví dụ: trong các nhóm WhatsApp, sau bước kiểm soát đề cập/kích hoạt). Cấu hình:Tổng quan cấu hình
agents.list: các định nghĩa tác tử có tên (không gian làm việc, mô hình, v.v.).bindings: ánh xạ các kênh/tài khoản/đối tác ngang hàng đến với tác tử.
Lưu trữ phiên
Các hàng phiên thời gian chạy nằm trong cơ sở dữ liệu SQLite của từng tác tử dưới thư mục trạng thái (mặc định~/.openclaw):
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
sessions.json trong ~/.openclaw/agents/<agentId>/sessions/. Quá trình khởi động Gateway và
openclaw doctor --fix tự động nhập các hàng/lịch sử cũ đang hoạt động vào SQLite.
Sử dụng openclaw doctor --session-sqlite inspect --session-sqlite-all-agents và trình tự xác thực
Doctor khi cần bằng chứng di chuyển
rõ ràng.
Bạn vẫn có thể chọn đường dẫn kho cũ qua khuôn mẫu session.store và {agentId}
cho quy trình di chuyển và bảo trì ngoại tuyến.
Khả năng khám phá phiên của Gateway và ACP cũng quét các kho tác tử dựa trên ổ đĩa trong
gốc agents/ mặc định và trong các gốc session.store dùng khuôn mẫu. Các kho được phát hiện
phải nằm trong gốc tác tử đã phân giải đó và sử dụng tệp sessions.json
cũ thông thường. Các liên kết tượng trưng và đường dẫn ngoài gốc sẽ bị bỏ qua.
Hành vi WebChat
WebChat gắn vào tác tử đã chọn và mặc định sử dụng phiên chính của tác tử. Vì vậy, WebChat cho phép xem ngữ cảnh chéo kênh của tác tử đó tại một nơi.Ngữ cảnh phản hồi
Phản hồi đến bao gồm:ReplyToId,ReplyToBodyvàReplyToSenderkhi có.- Ngữ cảnh được trích dẫn được nối vào
Bodydưới dạng khối[Replying to ...].