Gateway
Cấu hình — kênh
Các khóa cấu hình theo từng kênh dưới channels.*. Bao gồm quyền truy cập DM và nhóm,
thiết lập nhiều tài khoản, kiểm soát theo lượt nhắc, và các khóa theo từng kênh cho Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage, cùng các Plugin kênh được tích hợp sẵn khác.
Đối với tác tử, công cụ, runtime Gateway và các khóa cấp cao khác, xem Tham chiếu cấu hình.
Kênh
Mỗi kênh tự động khởi động khi phần cấu hình của kênh đó tồn tại (trừ khi enabled: false).
Quyền truy cập DM và nhóm
Tất cả kênh đều hỗ trợ chính sách DM và chính sách nhóm:
| Chính sách DM | Hành vi |
|---|---|
pairing (mặc định) |
Người gửi chưa biết nhận mã ghép nối dùng một lần; chủ sở hữu phải phê duyệt |
allowlist |
Chỉ người gửi trong allowFrom (hoặc kho cho phép đã ghép nối) |
open |
Cho phép mọi DM đến (yêu cầu allowFrom: ["*"]) |
disabled |
Bỏ qua mọi DM đến |
| Chính sách nhóm | Hành vi |
|---|---|
allowlist (mặc định) |
Chỉ các nhóm khớp với danh sách cho phép đã cấu hình |
open |
Bỏ qua danh sách cho phép của nhóm (kiểm soát theo lượt nhắc vẫn áp dụng) |
disabled |
Chặn mọi tin nhắn nhóm/phòng |
Ghi đè mô hình theo kênh
Dùng channels.modelByChannel để ghim các ID kênh cụ thể vào một mô hình. Giá trị chấp nhận provider/model hoặc bí danh mô hình đã cấu hình. Ánh xạ kênh được áp dụng khi một phiên chưa có ghi đè mô hình (ví dụ, được đặt qua /model).
{
channels: {
modelByChannel: {
discord: {
"123456789012345678": "anthropic/claude-opus-4-6",
},
slack: {
C1234567890: "openai/gpt-4.1",
},
telegram: {
"-1001234567890": "openai/gpt-4.1-mini",
"-1001234567890:topic:99": "anthropic/claude-sonnet-4-6",
},
},
},
}
Mặc định kênh và Heartbeat
Dùng channels.defaults cho chính sách nhóm dùng chung và hành vi Heartbeat trên các nhà cung cấp:
{
channels: {
defaults: {
groupPolicy: "allowlist", // open | allowlist | disabled
contextVisibility: "all", // all | allowlist | allowlist_quote
heartbeat: {
showOk: false,
showAlerts: true,
useIndicator: true,
},
},
},
}
channels.defaults.groupPolicy: chính sách nhóm dự phòng khigroupPolicycấp nhà cung cấp chưa được đặt.channels.defaults.contextVisibility: chế độ hiển thị ngữ cảnh bổ sung mặc định cho mọi kênh. Giá trị:all(mặc định, bao gồm toàn bộ ngữ cảnh trích dẫn/luồng/lịch sử),allowlist(chỉ bao gồm ngữ cảnh từ người gửi trong danh sách cho phép),allowlist_quote(giống allowlist nhưng giữ ngữ cảnh trích dẫn/trả lời rõ ràng). Ghi đè theo kênh:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: bao gồm trạng thái kênh khỏe mạnh trong đầu ra Heartbeat.channels.defaults.heartbeat.showAlerts: bao gồm trạng thái suy giảm/lỗi trong đầu ra Heartbeat.channels.defaults.heartbeat.useIndicator: hiển thị đầu ra Heartbeat theo kiểu chỉ báo gọn.
WhatsApp chạy qua kênh web của gateway (Baileys Web). Kênh này tự động khởi động khi có phiên đã liên kết.
{
web: {
enabled: true,
heartbeatSeconds: 60,
whatsapp: {
keepAliveIntervalMs: 25000,
connectTimeoutMs: 60000,
defaultQueryTimeoutMs: 60000,
},
reconnect: {
initialMs: 2000,
maxMs: 120000,
factor: 1.4,
jitter: 0.2,
maxAttempts: 0,
},
},
channels: {
whatsapp: {
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["+15555550123", "+447700900123"],
textChunkLimit: 4000,
chunkMode: "length", // length | newline
mediaMaxMb: 50,
sendReadReceipts: true, // blue ticks (false in self-chat mode)
groups: {
"*": { requireMention: true },
},
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
},
}
WhatsApp nhiều tài khoản
{
channels: {
whatsapp: {
accounts: {
default: {},
personal: {},
biz: {
// authDir: "~/.openclaw/credentials/whatsapp/biz",
},
},
},
},
}
- Lệnh gửi ra mặc định dùng tài khoản
defaultnếu có; nếu không thì dùng id tài khoản được cấu hình đầu tiên (đã sắp xếp). channels.whatsapp.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định dự phòng đó khi khớp với một id tài khoản đã cấu hình.- Thư mục xác thực Baileys một tài khoản kiểu cũ được
openclaw doctordi chuyển vàowhatsapp/default. - Ghi đè theo tài khoản:
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
{
channels: {
telegram: {
enabled: true,
botToken: "your-bot-token",
dmPolicy: "pairing",
allowFrom: ["tg:123456789"],
groups: {
"*": { requireMention: true },
"-1001234567890": {
allowFrom: ["@admin"],
systemPrompt: "Keep answers brief.",
topics: {
"99": {
requireMention: false,
skills: ["search"],
systemPrompt: "Stay on topic.",
},
},
},
},
customCommands: [
{ command: "backup", description: "Git backup" },
{ command: "generate", description: "Create an image" },
],
historyLimit: 50,
replyToMode: "first", // off | first | all | batched
linkPreview: true,
streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits)
actions: { reactions: true, sendMessage: true },
reactionNotifications: "own", // off | own | all
mediaMaxMb: 100,
retry: {
attempts: 3,
minDelayMs: 400,
maxDelayMs: 30000,
jitter: 0.1,
},
network: {
autoSelectFamily: true,
dnsResultOrder: "ipv4first",
},
apiRoot: "https://api.telegram.org",
proxy: "socks5://localhost:9050",
webhookUrl: "https://example.com/telegram-webhook",
webhookSecret: "secret",
webhookPath: "/telegram-webhook",
},
},
}
- Token bot:
channels.telegram.botTokenhoặcchannels.telegram.tokenFile(chỉ tệp thông thường; từ chối symlink), vớiTELEGRAM_BOT_TOKENlàm dự phòng cho tài khoản mặc định. apiRootchỉ là gốc Telegram Bot API. Dùnghttps://api.telegram.orghoặc gốc tự lưu trữ/proxy của bạn, không dùnghttps://api.telegram.org/bot<TOKEN>;openclaw doctor --fixxóa hậu tố/bot<TOKEN>vô tình ở cuối.channels.telegram.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.- Trong thiết lập nhiều tài khoản (2+ id tài khoản), hãy đặt mặc định rõ ràng (
channels.telegram.defaultAccounthoặcchannels.telegram.accounts.default) để tránh định tuyến dự phòng;openclaw doctorcảnh báo khi phần này bị thiếu hoặc không hợp lệ. configWrites: falsechặn các lượt ghi cấu hình do Telegram khởi tạo (di chuyển ID supergroup,/config set|unset).- Các mục
bindings[]cấp cao vớitype: "acp"cấu hình liên kết ACP bền vững cho chủ đề diễn đàn (dùngchatId:topic:topicIdchuẩn trongmatch.peer.id). Ngữ nghĩa trường được chia sẻ trong Tác tử ACP. - Bản xem trước luồng Telegram dùng
sendMessage+editMessageText(hoạt động trong trò chuyện trực tiếp và nhóm). - Chính sách thử lại: xem Chính sách thử lại.
Discord
{
channels: {
discord: {
enabled: true,
token: "your-bot-token",
mediaMaxMb: 100,
allowBots: false,
actions: {
reactions: true,
stickers: true,
polls: true,
permissions: true,
messages: true,
threads: true,
pins: true,
search: true,
memberInfo: true,
roleInfo: true,
roles: false,
channelInfo: true,
voiceStatus: true,
events: true,
moderation: false,
},
replyToMode: "off", // off | first | all | batched
dmPolicy: "pairing",
allowFrom: ["1234567890", "123456789012345678"],
dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] },
guilds: {
"123456789012345678": {
slug: "friends-of-openclaw",
requireMention: false,
ignoreOtherMentions: true,
reactionNotifications: "own",
users: ["987654321098765432"],
channels: {
general: { allow: true },
help: {
allow: true,
requireMention: true,
users: ["987654321098765432"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
},
},
historyLimit: 20,
textChunkLimit: 2000,
chunkMode: "length", // length | newline
streaming: {
mode: "progress", // off | partial | block | progress (Discord default: progress)
progress: {
label: "auto",
maxLines: 8,
toolProgress: true,
},
},
maxLinesPerMessage: 17,
ui: {
components: {
accentColor: "#5865F2",
},
},
threadBindings: {
enabled: true,
idleHours: 24,
maxAgeHours: 0,
spawnSessions: true,
defaultSpawnContext: "fork",
},
voice: {
enabled: true,
autoJoin: [
{
guildId: "123456789012345678",
channelId: "234567890123456789",
},
],
daveEncryption: true,
decryptionFailureTolerance: 24,
connectTimeoutMs: 30000,
reconnectGraceMs: 15000,
tts: {
provider: "openai",
openai: { voice: "alloy" },
},
},
execApprovals: {
enabled: "auto", // true | false | "auto"
approvers: ["987654321098765432"],
agentFilter: ["default"],
sessionFilter: ["discord:"],
target: "dm", // dm | channel | both
cleanupAfterResolve: false,
},
retry: {
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1,
},
},
},
}
- Token:
channels.discord.token, vớiDISCORD_BOT_TOKENlàm dự phòng cho tài khoản mặc định. - Các lệnh gọi đi trực tiếp cung cấp Discord
tokenrõ ràng sẽ dùng token đó cho lệnh gọi; thiết lập thử lại/chính sách của tài khoản vẫn đến từ tài khoản đã chọn trong ảnh chụp nhanh runtime đang hoạt động. channels.discord.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.- Dùng
user:<id>(DM) hoặcchannel:<id>(kênh guild) cho mục tiêu gửi; ID số trần bị từ chối. - Slug guild viết thường và thay khoảng trắng bằng
-; khóa kênh dùng tên đã slug hóa (không có#). Ưu tiên ID guild. - Tin nhắn do bot soạn mặc định bị bỏ qua.
allowBots: truebật chúng; dùngallowBots: "mentions"để chỉ chấp nhận tin nhắn bot có nhắc đến bot (tin nhắn của chính bot vẫn bị lọc). channels.discord.guilds.<id>.ignoreOtherMentions(và các ghi đè kênh) loại bỏ tin nhắn nhắc đến người dùng hoặc vai trò khác nhưng không nhắc đến bot (loại trừ @everyone/@here).channels.discord.mentionAliasesánh xạ văn bản@handlegửi đi ổn định sang ID người dùng Discord trước khi gửi, để có thể nhắc đến đồng đội đã biết một cách xác định ngay cả khi bộ nhớ đệm thư mục tạm thời trống. Ghi đè theo tài khoản nằm trongchannels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(mặc định 17) chia các tin nhắn cao ngay cả khi dưới 2000 ký tự.channels.discord.threadBindingsđiều khiển định tuyến ràng buộc theo luồng Discord:enabled: ghi đè Discord cho các tính năng phiên ràng buộc theo luồng (/focus,/unfocus,/agents,/session idle,/session max-age, và gửi/định tuyến đã ràng buộc)idleHours: ghi đè Discord cho tự động bỏ tập trung khi không hoạt động, tính bằng giờ (0để tắt)maxAgeHours: ghi đè Discord cho tuổi tối đa cứng, tính bằng giờ (0để tắt)spawnSessions: công tắc chosessions_spawn({ thread: true })và tự động tạo/ràng buộc luồng khi ACP sinh luồng (mặc định:true)defaultSpawnContext: ngữ cảnh tác tử con gốc cho các lần sinh ràng buộc theo luồng (mặc định là"fork")
- Các mục
bindings[]cấp cao nhất vớitype: "acp"cấu hình các ràng buộc ACP bền vững cho kênh và luồng (dùng id kênh/luồng trongmatch.peer.id). Ngữ nghĩa trường được dùng chung trong Tác tử ACP. channels.discord.ui.components.accentColorđặt màu nhấn cho container thành phần Discord v2.channels.discord.voicebật các cuộc trò chuyện kênh thoại Discord và các ghi đè tự động tham gia + LLM + TTS tùy chọn. Cấu hình Discord chỉ văn bản mặc định để tắt thoại; đặtchannels.discord.voice.enabled=trueđể bật.channels.discord.voice.modeltùy chọn ghi đè mô hình LLM dùng cho phản hồi kênh thoại Discord.channels.discord.voice.daveEncryptionvàchannels.discord.voice.decryptionFailureTolerancetruyền tiếp đến các tùy chọn DAVE của@discordjs/voice(mặc định làtruevà24).channels.discord.voice.connectTimeoutMsđiều khiển thời gian chờ Ready ban đầu của@discordjs/voicecho/vc joinvà các lần thử tự động tham gia (mặc định là30000).channels.discord.voice.reconnectGraceMsđiều khiển khoảng thời gian một phiên thoại đã ngắt kết nối có thể dùng để đi vào tín hiệu kết nối lại trước khi OpenClaw hủy phiên đó (mặc định là15000).- Phát lại giọng nói Discord không bị gián đoạn bởi sự kiện bắt đầu nói của người dùng khác. Để tránh vòng lặp phản hồi, OpenClaw bỏ qua việc thu giọng nói mới trong khi TTS đang phát.
- OpenClaw cũng cố gắng khôi phục nhận thoại bằng cách rời/tham gia lại một phiên thoại sau các lỗi giải mã lặp lại.
channels.discord.streaminglà khóa chế độ stream chính tắc. Discord mặc định làstreaming.mode: "progress"để tiến trình công cụ/công việc xuất hiện trong một tin nhắn xem trước được chỉnh sửa; đặtstreaming.mode: "off"để tắt. Các giá trị cũstreamModevàstreamingdạng boolean vẫn là alias runtime; chạyopenclaw doctor --fixđể viết lại cấu hình đã lưu.channels.discord.autoPresenceánh xạ mức sẵn sàng runtime sang trạng thái hiện diện của bot (healthy => online, degraded => idle, exhausted => dnd) và cho phép ghi đè văn bản trạng thái tùy chọn.channels.discord.dangerouslyAllowNameMatchingbật lại việc khớp tên/thẻ có thể thay đổi (chế độ tương thích phá kính).channels.discord.execApprovals: gửi phê duyệt exec gốc Discord và ủy quyền người phê duyệt.enabled:true,false, hoặc"auto"(mặc định). Ở chế độ tự động, phê duyệt exec kích hoạt khi có thể phân giải người phê duyệt từapprovershoặccommands.ownerAllowFrom.approvers: ID người dùng Discord được phép phê duyệt yêu cầu exec. Dự phòng vềcommands.ownerAllowFromkhi bị bỏ qua.agentFilter: danh sách cho phép ID tác tử tùy chọn. Bỏ qua để chuyển tiếp phê duyệt cho mọi tác tử.sessionFilter: mẫu khóa phiên tùy chọn (chuỗi con hoặc regex).target: nơi gửi lời nhắc phê duyệt."dm"(mặc định) gửi đến DM của người phê duyệt,"channel"gửi đến kênh khởi nguồn,"both"gửi đến cả hai. Khi target bao gồm"channel", chỉ những người phê duyệt đã phân giải mới dùng được nút.cleanupAfterResolve: khitrue, xóa DM phê duyệt sau khi phê duyệt, từ chối hoặc hết thời gian chờ.
Chế độ thông báo phản ứng: off (không có), own (tin nhắn của bot, mặc định), all (mọi tin nhắn), allowlist (từ guilds.<id>.users trên mọi tin nhắn).
Google Chat
{
channels: {
googlechat: {
enabled: true,
serviceAccountFile: "/path/to/service-account.json",
audienceType: "app-url", // app-url | project-number
audience: "https://gateway.example.com/googlechat",
webhookPath: "/googlechat",
botUser: "users/1234567890",
dm: {
enabled: true,
policy: "pairing",
allowFrom: ["users/1234567890"],
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": { allow: true, requireMention: true },
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
- JSON tài khoản dịch vụ: nội tuyến (
serviceAccount) hoặc dựa trên tệp (serviceAccountFile). - SecretRef tài khoản dịch vụ cũng được hỗ trợ (
serviceAccountRef). - Dự phòng env:
GOOGLE_CHAT_SERVICE_ACCOUNThoặcGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Dùng
spaces/<spaceId>hoặcusers/<userId>cho mục tiêu gửi. channels.googlechat.dangerouslyAllowNameMatchingbật lại việc khớp principal email có thể thay đổi (chế độ tương thích phá kính).
Slack
{
channels: {
slack: {
enabled: true,
botToken: "xoxb-...",
appToken: "xapp-...",
socketMode: {
clientPingTimeout: 15000,
serverPingTimeout: 30000,
pingPongLoggingEnabled: false,
},
dmPolicy: "pairing",
allowFrom: ["U123", "U456", "*"],
dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] },
channels: {
C123: { allow: true, requireMention: true, allowBots: false },
"#general": {
allow: true,
requireMention: true,
allowBots: false,
users: ["U123"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
historyLimit: 50,
allowBots: false,
reactionNotifications: "own",
reactionAllowlist: ["U123"],
replyToMode: "off", // off | first | all | batched
thread: {
historyScope: "thread", // thread | channel
inheritParent: false,
},
actions: {
reactions: true,
messages: true,
pins: true,
memberInfo: true,
emojiList: true,
},
slashCommand: {
enabled: true,
name: "openclaw",
sessionPrefix: "slack:slash",
ephemeral: true,
},
typingReaction: "hourglass_flowing_sand",
textChunkLimit: 4000,
chunkMode: "length",
streaming: {
mode: "partial", // off | partial | block | progress
nativeTransport: true, // use Slack native streaming API when mode=partial
},
mediaMaxMb: 20,
execApprovals: {
enabled: "auto", // true | false | "auto"
approvers: ["U123"],
agentFilter: ["default"],
sessionFilter: ["slack:"],
target: "dm", // dm | channel | both
},
},
},
}
- Chế độ socket yêu cầu cả
botTokenvàappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENcho dự phòng env của tài khoản mặc định). - Chế độ HTTP yêu cầu
botTokencộng vớisigningSecret(ở gốc hoặc theo tài khoản). socketModetruyền tiếp tinh chỉnh truyền tải Socket Mode của SDK Slack đến API receiver Bolt công khai. Chỉ dùng khi điều tra thời gian chờ ping/pong hoặc hành vi websocket cũ.botToken,appToken,signingSecret, vàuserTokenchấp nhận chuỗi văn bản thuần hoặc đối tượng SecretRef.- Ảnh chụp nhanh tài khoản Slack hiển thị các trường nguồn/trạng thái theo từng thông tin xác thực như
botTokenSource,botTokenStatus,appTokenStatus, và, trong chế độ HTTP,signingSecretStatus.configured_unavailablenghĩa là tài khoản được cấu hình thông qua SecretRef nhưng đường dẫn lệnh/runtime hiện tại không thể phân giải giá trị bí mật. configWrites: falsechặn việc ghi cấu hình do Slack khởi tạo.channels.slack.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.channels.slack.streaming.modelà khóa chế độ stream Slack chính tắc.channels.slack.streaming.nativeTransportđiều khiển truyền tải stream gốc của Slack. Các giá trị cũstreamMode,streamingdạng boolean, vànativeStreamingvẫn là alias runtime; chạyopenclaw doctor --fixđể viết lại cấu hình đã lưu.- Dùng
user:<id>(DM) hoặcchannel:<id>cho mục tiêu gửi.
Chế độ thông báo phản ứng: off, own (mặc định), all, allowlist (từ reactionAllowlist).
Cô lập phiên luồng: thread.historyScope là theo luồng (mặc định) hoặc dùng chung trên kênh. thread.inheritParent sao chép transcript kênh cha sang các luồng mới.
- Stream gốc Slack cùng trạng thái luồng kiểu trợ lý Slack "is typing..." yêu cầu mục tiêu luồng trả lời. DM cấp cao nhất mặc định vẫn nằm ngoài luồng, nên chúng vẫn có thể stream qua bản xem trước bài nháp đăng-và-sửa của Slack thay vì hiển thị bản xem trước stream/trạng thái gốc kiểu luồng.
typingReactionthêm phản ứng tạm thời vào tin nhắn Slack đến trong khi phản hồi đang chạy, rồi xóa nó khi hoàn tất. Dùng mã ngắn emoji Slack như"hourglass_flowing_sand".channels.slack.execApprovals: gửi phê duyệt exec gốc Slack và ủy quyền người phê duyệt. Cùng schema với Discord:enabled(true/false/"auto"),approvers(ID người dùng Slack),agentFilter,sessionFilter, vàtarget("dm","channel", hoặc"both").
| Nhóm hành động | Mặc định | Ghi chú |
|---|---|---|
| reactions | bật | Phản ứng + liệt kê phản ứng |
| messages | bật | Đọc/gửi/chỉnh sửa/xóa |
| pins | bật | Ghim/bỏ ghim/liệt kê |
| memberInfo | bật | Thông tin thành viên |
| emojiList | bật | Danh sách emoji tùy chỉnh |
Mattermost
Mattermost được phát hành dưới dạng Plugin đóng gói sẵn trong các bản phát hành OpenClaw hiện tại. Các bản dựng cũ hơn hoặc
tùy chỉnh có thể cài đặt gói npm hiện tại bằng
openclaw plugins install @openclaw/mattermost. Kiểm tra
npmjs.com/package/@openclaw/mattermost
để biết dist-tag hiện tại trước khi ghim phiên bản.
{
channels: {
mattermost: {
enabled: true,
botToken: "mm-token",
baseUrl: "https://chat.example.com",
dmPolicy: "pairing",
chatmode: "oncall", // oncall | onmessage | onchar
oncharPrefixes: [">", "!"],
groups: {
"*": { requireMention: true },
"team-channel-id": { requireMention: false },
},
commands: {
native: true, // opt-in
nativeSkills: true,
callbackPath: "/api/channels/mattermost/command",
// Optional explicit URL for reverse-proxy/public deployments
callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
},
textChunkLimit: 4000,
chunkMode: "length",
},
},
}
Chế độ trò chuyện: oncall (phản hồi khi được @-mention, mặc định), onmessage (mọi tin nhắn), onchar (tin nhắn bắt đầu bằng tiền tố kích hoạt).
Khi lệnh gốc của Mattermost được bật:
commands.callbackPathphải là một đường dẫn (ví dụ/api/channels/mattermost/command), không phải URL đầy đủ.commands.callbackUrlphải phân giải tới endpoint Gateway của OpenClaw và truy cập được từ máy chủ Mattermost.- Callback slash gốc được xác thực bằng token theo từng lệnh do Mattermost trả về trong quá trình đăng ký slash command. Nếu đăng ký thất bại hoặc không có lệnh nào được kích hoạt, OpenClaw sẽ từ chối callback với
Unauthorized: invalid command token. - Với các máy chủ callback riêng tư/tailnet/nội bộ, Mattermost có thể yêu cầu
ServiceSettings.AllowedUntrustedInternalConnectionsbao gồm máy chủ/tên miền callback. Dùng giá trị máy chủ/tên miền, không dùng URL đầy đủ. channels.mattermost.configWrites: cho phép hoặc từ chối các lượt ghi cấu hình do Mattermost khởi tạo.channels.mattermost.requireMention: yêu cầu@mentiontrước khi trả lời trong kênh.channels.mattermost.groups.<channelId>.requireMention: ghi đè kiểm soát yêu cầu nhắc tên theo từng kênh ("*"cho mặc định).channels.mattermost.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.
Signal
{
channels: {
signal: {
enabled: true,
account: "+15555550123", // optional account binding
dmPolicy: "pairing",
allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
configWrites: true,
reactionNotifications: "own", // off | own | all | allowlist
reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
historyLimit: 50,
},
},
}
Chế độ thông báo phản ứng: off, own (mặc định), all, allowlist (từ reactionAllowlist).
channels.signal.account: ghim khởi động kênh vào một danh tính tài khoản Signal cụ thể.channels.signal.configWrites: cho phép hoặc từ chối các lượt ghi cấu hình do Signal khởi tạo.channels.signal.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.
BlueBubbles
BlueBubbles là cầu nối iMessage cũ (được Plugin hỗ trợ, cấu hình trong channels.bluebubbles). Các thiết lập hiện có vẫn được hỗ trợ, nhưng các triển khai iMessage OpenClaw mới nên ưu tiên channels.imessage khi imsg có thể chạy trên máy chủ Messages.
{
channels: {
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
// serverUrl, password, webhookPath, group controls, and advanced actions:
// see /channels/bluebubbles
},
},
}
- Các đường dẫn khóa lõi được đề cập ở đây:
channels.bluebubbles,channels.bluebubbles.dmPolicy. channels.bluebubbles.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.- Các mục
bindings[]cấp cao nhất vớitype: "acp"có thể liên kết cuộc trò chuyện BlueBubbles với các phiên ACP bền vững. Dùng handle BlueBubbles hoặc chuỗi đích (chat_id:*,chat_guid:*,chat_identifier:*) trongmatch.peer.id. Ngữ nghĩa trường dùng chung: Tác nhân ACP. - Cấu hình đầy đủ của kênh BlueBubbles và lý do ngừng khuyến nghị được ghi lại trong BlueBubbles.
iMessage
OpenClaw khởi chạy imsg rpc (JSON-RPC qua stdio). Không cần daemon hoặc cổng. Đây là đường dẫn được ưu tiên cho các thiết lập iMessage OpenClaw mới khi máy chủ có thể cấp quyền cơ sở dữ liệu Messages và quyền Automation.
{
channels: {
imessage: {
enabled: true,
cliPath: "imsg",
dbPath: "~/Library/Messages/chat.db",
remoteHost: "user@gateway-host",
dmPolicy: "pairing",
allowFrom: ["+15555550123", "[email protected]", "chat_id:123"],
historyLimit: 50,
includeAttachments: false,
attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
mediaMaxMb: 16,
service: "auto",
region: "US",
},
},
}
-
channels.imessage.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình. -
Yêu cầu Full Disk Access tới DB của Messages.
-
Ưu tiên đích
chat_id:<id>. Dùngimsg chats --limit 20để liệt kê cuộc trò chuyện. -
cliPathcó thể trỏ tới một wrapper SSH; đặtremoteHost(hosthoặcuser@host) để lấy tệp đính kèm qua SCP. -
attachmentRootsvàremoteAttachmentRootsgiới hạn đường dẫn tệp đính kèm đầu vào (mặc định:/Users/*/Library/Messages/Attachments). -
SCP dùng kiểm tra host-key nghiêm ngặt, vì vậy hãy bảo đảm khóa máy chủ chuyển tiếp đã tồn tại trong
~/.ssh/known_hosts. -
channels.imessage.configWrites: cho phép hoặc từ chối các lượt ghi cấu hình do iMessage khởi tạo. -
Các mục
bindings[]cấp cao nhất vớitype: "acp"có thể liên kết cuộc trò chuyện iMessage với các phiên ACP bền vững. Dùng handle đã chuẩn hóa hoặc đích cuộc trò chuyện rõ ràng (chat_id:*,chat_guid:*,chat_identifier:*) trongmatch.peer.id. Ngữ nghĩa trường dùng chung: Tác nhân ACP.
Ví dụ wrapper SSH cho iMessage
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Matrix
Matrix được Plugin hỗ trợ và được cấu hình trong channels.matrix.
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_bot_xxx",
proxy: "http://127.0.0.1:7890",
encryption: true,
initialSyncLimit: 20,
defaultAccount: "ops",
accounts: {
ops: {
name: "Ops",
userId: "@ops:example.org",
accessToken: "syt_ops_xxx",
},
alerts: {
userId: "@alerts:example.org",
password: "secret",
proxy: "http://127.0.0.1:7891",
},
},
},
},
}
- Xác thực bằng token dùng
accessToken; xác thực bằng mật khẩu dùnguserId+password. channels.matrix.proxyđịnh tuyến lưu lượng HTTP của Matrix qua một proxy HTTP(S) rõ ràng. Các tài khoản có tên có thể ghi đè bằngchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkcho phép homeserver riêng tư/nội bộ.proxyvà lựa chọn tham gia mạng này là các điều khiển độc lập.channels.matrix.defaultAccountchọn tài khoản ưu tiên trong thiết lập nhiều tài khoản.channels.matrix.autoJoinmặc định làoff, nên các phòng được mời và lời mời kiểu DM mới sẽ bị bỏ qua cho tới khi bạn đặtautoJoin: "allowlist"vớiautoJoinAllowlisthoặcautoJoin: "always".channels.matrix.execApprovals: phân phối phê duyệt exec gốc Matrix và ủy quyền người phê duyệt.enabled:true,false, hoặc"auto"(mặc định). Ở chế độ tự động, phê duyệt exec được kích hoạt khi có thể phân giải người phê duyệt từapprovershoặccommands.ownerAllowFrom.approvers: id người dùng Matrix (ví dụ@owner:example.org) được phép phê duyệt yêu cầu exec.agentFilter: danh sách cho phép id tác nhân tùy chọn. Bỏ qua để chuyển tiếp phê duyệt cho mọi tác nhân.sessionFilter: mẫu khóa phiên tùy chọn (chuỗi con hoặc regex).target: nơi gửi lời nhắc phê duyệt."dm"(mặc định),"channel"(phòng gốc), hoặc"both".- Ghi đè theo từng tài khoản:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopekiểm soát cách DM Matrix được nhóm vào phiên:per-user(mặc định) chia sẻ theo peer được định tuyến, cònper-roomcô lập từng phòng DM.- Các probe trạng thái Matrix và tra cứu thư mục trực tiếp dùng cùng chính sách proxy như lưu lượng runtime.
- Cấu hình Matrix đầy đủ, quy tắc nhắm mục tiêu, và ví dụ thiết lập được ghi lại trong Matrix.
Microsoft Teams
Microsoft Teams được Plugin hỗ trợ và được cấu hình trong channels.msteams.
{
channels: {
msteams: {
enabled: true,
configWrites: true,
// appId, appPassword, tenantId, webhook, team/channel policies:
// see /channels/msteams
},
},
}
- Các đường dẫn khóa lõi được đề cập ở đây:
channels.msteams,channels.msteams.configWrites. - Cấu hình Teams đầy đủ (thông tin xác thực, Webhook, chính sách DM/nhóm, ghi đè theo từng nhóm/từng kênh) được ghi lại trong Microsoft Teams.
IRC
IRC được Plugin hỗ trợ và được cấu hình trong channels.irc.
{
channels: {
irc: {
enabled: true,
dmPolicy: "pairing",
configWrites: true,
nickserv: {
enabled: true,
service: "NickServ",
password: "${IRC_NICKSERV_PASSWORD}",
register: false,
registerEmail: "[email protected]",
},
},
},
}
- Các đường dẫn khóa lõi được đề cập ở đây:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. channels.irc.defaultAccounttùy chọn ghi đè lựa chọn tài khoản mặc định khi khớp với một id tài khoản đã cấu hình.- Cấu hình kênh IRC đầy đủ (máy chủ/cổng/TLS/kênh/danh sách cho phép/kiểm soát yêu cầu nhắc tên) được ghi lại trong IRC.
Nhiều tài khoản (mọi kênh)
Chạy nhiều tài khoản trên mỗi kênh (mỗi tài khoản có accountId riêng):
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
defaultđược dùng khiaccountIdbị bỏ qua (CLI + định tuyến).- Token env chỉ áp dụng cho tài khoản mặc định.
- Thiết lập kênh cơ sở áp dụng cho mọi tài khoản trừ khi được ghi đè theo từng tài khoản.
- Dùng
bindings[].match.accountIdđể định tuyến từng tài khoản tới một tác nhân khác. - Nếu bạn thêm tài khoản không mặc định qua
openclaw channels add(hoặc onboarding kênh) khi vẫn đang dùng cấu hình kênh cấp cao nhất một tài khoản, OpenClaw trước tiên sẽ nâng cấp các giá trị một tài khoản cấp cao nhất có phạm vi tài khoản vào bản đồ tài khoản của kênh để tài khoản ban đầu tiếp tục hoạt động. Hầu hết các kênh chuyển chúng vàochannels.<channel>.accounts.default; Matrix có thể giữ lại một đích có tên/mặc định khớp hiện có thay vào đó. - Các binding chỉ theo kênh hiện có (không có
accountId) tiếp tục khớp với tài khoản mặc định; binding có phạm vi tài khoản vẫn là tùy chọn. openclaw doctor --fixcũng sửa các dạng trộn lẫn bằng cách di chuyển các giá trị một tài khoản cấp cao nhất có phạm vi tài khoản vào tài khoản được nâng cấp đã chọn cho kênh đó. Hầu hết các kênh dùngaccounts.default; Matrix có thể giữ lại một đích có tên/mặc định khớp hiện có thay vào đó.
Các kênh Plugin khác
Nhiều kênh Plugin được cấu hình dưới dạng channels.<id> và được ghi lại trong các trang kênh chuyên dụng của chúng (ví dụ Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat, và Twitch).
Xem chỉ mục kênh đầy đủ: Kênh.
Kiểm soát yêu cầu nhắc tên trong trò chuyện nhóm
Tin nhắn nhóm mặc định yêu cầu nhắc tên (nhắc tên metadata hoặc mẫu regex an toàn). Áp dụng cho trò chuyện nhóm WhatsApp, Telegram, Discord, Google Chat, và iMessage.
Các phản hồi hiển thị được kiểm soát riêng. Phòng nhóm/kênh mặc định là messages.groupChat.visibleReplies: "message_tool": OpenClaw vẫn xử lý lượt này, nhưng phản hồi cuối thông thường vẫn riêng tư và đầu ra phòng hiển thị yêu cầu message(action=send). Chỉ đặt "automatic" khi bạn muốn hành vi cũ, trong đó phản hồi thông thường được đăng lại vào phòng. Để áp dụng cùng hành vi phản hồi hiển thị chỉ qua công cụ cho cả trò chuyện trực tiếp, hãy đặt messages.visibleReplies: "message_tool"; Codex harness cũng dùng hành vi chỉ qua công cụ đó làm mặc định trò chuyện trực tiếp khi chưa đặt.
Phản hồi hiển thị chỉ qua công cụ yêu cầu model/runtime gọi công cụ một cách đáng tin cậy. Nếu
nhật ký phiên hiển thị văn bản của assistant với didSendViaMessagingTool: false, thì
model đã tạo câu trả lời cuối riêng tư thay vì gọi công cụ nhắn tin.
Chuyển sang model gọi công cụ mạnh hơn cho kênh đó, hoặc đặt
messages.groupChat.visibleReplies: "automatic" để khôi phục phản hồi cuối hiển thị
theo hành vi cũ.
Nếu công cụ nhắn tin không khả dụng theo chính sách công cụ đang hoạt động, OpenClaw sẽ chuyển dự phòng sang phản hồi hiển thị tự động thay vì âm thầm chặn phản hồi. openclaw doctor cảnh báo về điểm không khớp này.
Gateway tải nóng cấu hình messages sau khi tệp được lưu. Chỉ khởi động lại khi tính năng theo dõi tệp hoặc tải lại cấu hình bị tắt trong triển khai.
Loại nhắc đến:
- Nhắc đến bằng metadata: @-mention gốc của nền tảng. Bị bỏ qua trong chế độ tự trò chuyện WhatsApp.
- Mẫu văn bản: Mẫu regex an toàn trong
agents.list[].groupChat.mentionPatterns. Mẫu không hợp lệ và lặp lồng nhau không an toàn sẽ bị bỏ qua. - Việc chặn theo nhắc đến chỉ được thực thi khi có thể phát hiện (nhắc đến gốc hoặc ít nhất một mẫu).
{
messages: {
visibleReplies: "automatic", // global default for direct/source chats; Codex harness defaults unset direct chats to message_tool
groupChat: {
historyLimit: 50,
visibleReplies: "message_tool", // default; use "automatic" for legacy final replies
},
},
agents: {
list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
},
}
messages.groupChat.historyLimit đặt mặc định toàn cục. Các kênh có thể ghi đè bằng channels.<channel>.historyLimit (hoặc theo từng tài khoản). Đặt 0 để tắt.
messages.visibleReplies là mặc định toàn cục cho lượt nguồn; messages.groupChat.visibleReplies ghi đè giá trị đó cho các lượt nguồn nhóm/kênh. Khi messages.visibleReplies chưa được đặt, harness có thể cung cấp mặc định trực tiếp/nguồn của riêng nó; Codex harness mặc định là message_tool. Danh sách cho phép của kênh và chặn theo nhắc đến vẫn quyết định liệu một lượt có được xử lý hay không.
Giới hạn lịch sử DM
{
channels: {
telegram: {
dmHistoryLimit: 30,
dms: {
"123456789": { historyLimit: 50 },
},
},
},
}
Cách phân giải: ghi đè theo DM → mặc định của nhà cung cấp → không giới hạn (giữ lại tất cả).
Được hỗ trợ: telegram, whatsapp, discord, slack, signal, imessage, msteams.
Chế độ tự trò chuyện
Bao gồm số của chính bạn trong allowFrom để bật chế độ tự trò chuyện (bỏ qua @-mention gốc, chỉ phản hồi các mẫu văn bản):
{
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
agents: {
list: [
{
id: "main",
groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
},
],
},
}
Lệnh (xử lý lệnh trò chuyện)
{
commands: {
native: "auto", // register native commands when supported
nativeSkills: "auto", // register native skill commands when supported
text: true, // parse /commands in chat messages
bash: false, // allow ! (alias: /bash)
bashForegroundMs: 2000,
config: false, // allow /config
mcp: false, // allow /mcp
plugins: false, // allow /plugins
debug: false, // allow /debug
restart: true, // allow /restart + gateway restart tool
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw", // raw | hash
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
},
useAccessGroups: true,
},
}
Chi tiết lệnh
- Khối này cấu hình các bề mặt lệnh. Để xem danh mục lệnh tích hợp hiện tại + lệnh đi kèm, xem Lệnh Slash.
- Trang này là tham chiếu khóa cấu hình, không phải danh mục lệnh đầy đủ. Các lệnh thuộc sở hữu kênh/Plugin như QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, ghép đôi thiết bị/pair, bộ nhớ/dreaming, điều khiển điện thoại/phone, và Talk/voiceđược ghi tài liệu trong trang kênh/Plugin tương ứng cùng với Lệnh Slash. - Lệnh văn bản phải là tin nhắn độc lập bắt đầu bằng
/. native: "auto"bật lệnh gốc cho Discord/Telegram, giữ Slack tắt.nativeSkills: "auto"bật lệnh Skills gốc cho Discord/Telegram, giữ Slack tắt.- Ghi đè theo kênh:
channels.discord.commands.native(bool hoặc"auto"). Với Discord,falsebỏ qua đăng ký và dọn dẹp lệnh gốc trong quá trình khởi động. - Ghi đè đăng ký Skills gốc theo kênh bằng
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsthêm các mục menu bot Telegram bổ sung.bash: truebật! <cmd>cho shell máy chủ. Yêu cầutools.elevated.enabledvà người gửi nằm trongtools.elevated.allowFrom.<channel>.config: truebật/config(đọc/ghiopenclaw.json). Với các máy khách Gatewaychat.send, thao tác ghi/config set|unsetbền vững cũng yêu cầuoperator.admin;/config showchỉ đọc vẫn khả dụng cho máy khách operator phạm vi ghi thông thường.mcp: truebật/mcpcho cấu hình máy chủ MCP do OpenClaw quản lý trongmcp.servers.plugins: truebật/pluginscho khám phá Plugin, cài đặt, và điều khiển bật/tắt.channels.<provider>.configWriteschặn các thay đổi cấu hình theo kênh (mặc định: true).- Với kênh nhiều tài khoản,
channels.<provider>.accounts.<id>.configWritescũng chặn các thao tác ghi nhắm tới tài khoản đó (ví dụ/allowlist --config --account <id>hoặc/config set channels.<provider>.accounts.<id>...). restart: falsetắt/restartvà các thao tác công cụ khởi động lại Gateway. Mặc định:true.ownerAllowFromlà danh sách cho phép owner rõ ràng cho các lệnh/công cụ chỉ dành cho owner. Nó tách biệt vớiallowFrom.ownerDisplay: "hash"băm id owner trong system prompt. ĐặtownerDisplaySecretđể kiểm soát việc băm.allowFromáp dụng theo từng nhà cung cấp. Khi được đặt, đây là nguồn ủy quyền duy nhất (danh sách cho phép/ghép đôi kênh vàuseAccessGroupsbị bỏ qua).useAccessGroups: falsecho phép lệnh bỏ qua chính sách nhóm truy cập khiallowFromchưa được đặt.- Sơ đồ tài liệu lệnh:
- danh mục tích hợp + đi kèm: Lệnh Slash
- bề mặt lệnh theo kênh: Kênh
- lệnh QQ Bot: QQ Bot
- lệnh ghép đôi: Ghép đôi
- lệnh thẻ LINE: LINE
- memory dreaming: Dreaming
Liên quan
- Tham chiếu cấu hình — khóa cấp cao nhất
- Cấu hình — agents
- Tổng quan kênh