Configuration
Định tuyến kênh
Kênh & định tuyến
OpenClaw định tuyến câu trả lời trở lại kênh nơi tin nhắn xuất phát. Mô hình không chọn kênh; việc định tuyến là xác định và được kiểm soát bởi cấu hình host.
Thuật ngữ chính
- Kênh:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line, cùng các kênh Plugin.webchatlà kênh WebChat UI nội bộ và không phải là kênh gửi ra 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 dùng khi một đường dẫn gửi ra không chỉ địnhaccountId.- Trong các thiết lập nhiều tài khoản, hãy đặt mặc định rõ ràng (
defaultAccounthoặcaccounts.default) khi có hai tài khoản trở lên được cấu hình. 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 các thiết lập nhiều tài khoản, hãy đặt mặc định rõ ràng (
- AgentId: một workspace + kho phiên biệt lập ("bộ não").
- SessionKey: khóa bucket dùng để lưu ngữ cảnh và kiểm soát đồng thời.
Tiền tố đích gửi ra
Đích gửi ra 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. Lõi chỉ xem 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 theo cách khác, và chỉ khi Plugin đã tải quảng bá tiền tố đó. Nếu bên gọi đã chọn một kênh rõ ràng, tiền tố nhà cung cấp phải khớp với kênh đó; các tổ hợp xuyên kênh như gửi WhatsApp tới telegram:123 sẽ thất bại trước bước chuẩn hóa đích riêng của 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> nằm trong ngữ pháp của kênh đã chọn. Chúng không tự chọn nhà cung cấp.
Hình dạng khóa phiên (ví dụ)
Tin nhắn trực tiếp mặc định được gom vào phiên main của tác tử:
agent:<agentId>:<mainKey>(mặc định:agent:main:main)
Ngay cả khi lịch sử hội thoại tin nhắn trực tiếp được chia sẻ với main, chính sách sandbox và công cụ vẫn dùng một khóa runtime chat trực tiếp theo tài khoản được dẫn xuất cho DM bên ngoài, để các tin nhắn bắt nguồn từ kênh không bị xử lý như các lần chạy phiên main cục bộ.
Nhóm và kênh vẫn được biệt lập theo từng kênh:
- Nhóm:
agent:<agentId>:<channel>:group:<id> - Kênh/phòng:
agent:<agentId>:<channel>:channel:<id>
Luồng:
- Luồng Slack/Discord nối thêm
:thread:<threadId>vào khóa cơ sở. - Chủ đề diễn đàn Telegram nhúng
:topic:<topicId>vào khóa nhóm.
Ví dụ:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
Ghim tuyến DM chính
Khi session.dmScope là main, tin nhắn trực tiếp có thể chia sẻ một phiên main. Để ngăn lastRoute của phiên bị ghi đè bởi DM 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ả điều kiện sau đú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 DM đến không khớp với chủ sở hữu được ghim đó.
Trong trường hợp không khớp đó, OpenClaw vẫn ghi lại siêu dữ liệu phiên đến, nhưng bỏ qua việc cập nhật lastRoute của phiên main.
Ghi nhận lượt đến được bảo vệ
Plugin kênh có thể đánh dấu một 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. Ở 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ỉ có 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 peer chính xác (
bindingsvớipeer.kind+peer.id). - Khớp peer cha (kế thừa luồng).
- Khớp guild + vai trò (Discord) qua
guildId+roles. - Khớp guild (Discord) qua
guildId. - Khớp team (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 có thì mục đầu tiên trong danh sách, dự phòng làmain).
Khi một binding bao gồm nhiều trường khớp (peer, guildId, teamId, roles), tất cả các trường được cung cấp phải khớp để binding đó được áp dụng.
Tác tử được khớp xác định workspace và kho phiên đượ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 bạn chạy nhiều tác tử cho cùng một peer khi OpenClaw thường sẽ trả lời (ví dụ: trong nhóm WhatsApp, sau cổng nhắc đến/kích hoạt).
Cấu hình:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
Xem: Nhóm phát sóng.
Tổng quan cấu hình
agents.list: định nghĩa tác tử được đặt tên (workspace, model, v.v.).bindings: ánh xạ kênh/tài khoản/peer đến thành tác tử.
Ví dụ:
{
agents: {
list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }],
},
bindings: [
{ match: { channel: "slack", teamId: "T123" }, agentId: "support" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" },
],
}
Lưu trữ phiên
Kho phiên nằm dưới thư mục trạng thái (mặc định ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- Bản ghi JSONL nằm cùng nơi với kho
Bạn có thể ghi đè đường dẫn kho qua session.store và tạo mẫu {agentId}.
Khám phá phiên Gateway và ACP cũng quét các kho tác tử dựa trên ổ đĩa dưới gốc agents/ mặc định và dưới các gốc session.store được tạo 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à dùng tệp sessions.json thông thường. Symlink và đường dẫn nằm ngoài gốc sẽ bị bỏ qua.
Hành vi WebChat
WebChat gắn vào tác tử được chọn và mặc định dùng phiên main của tác tử. Vì vậy, WebChat cho phép bạn xem ngữ cảnh xuyên kênh của tác tử đó ở một nơi.
Ngữ cảnh trả lời
Câu trả lời đến bao gồm:
ReplyToId,ReplyToBody, vàReplyToSenderkhi có.- Ngữ cảnh được trích dẫn được nối vào
Bodydưới dạng khối[Replying to ...].
Điều này nhất quán trên các kênh.