Gateway
การกำหนดค่า — ช่องทาง
คีย์การกำหนดค่ารายช่องภายใต้ channels.* ครอบคลุมการเข้าถึง DM และกลุ่ม
การตั้งค่าหลายบัญชี การกำหนดให้ต้องเมนชัน และคีย์รายช่องสำหรับ Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage และ Plugin ช่องที่รวมมาด้วยอื่นๆ
สำหรับ agents, tools, runtime ของ gateway และคีย์ระดับบนสุดอื่นๆ โปรดดู ข้อมูลอ้างอิงการกำหนดค่า
ช่อง
แต่ละช่องจะเริ่มทำงานโดยอัตโนมัติเมื่อมีส่วนการกำหนดค่าของช่องนั้นอยู่ (เว้นแต่ enabled: false)
การเข้าถึง DM และกลุ่ม
ทุกช่องรองรับนโยบาย DM และนโยบายกลุ่ม:
| นโยบาย DM | พฤติกรรม |
|---|---|
pairing (ค่าเริ่มต้น) |
ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่แบบใช้ครั้งเดียว เจ้าของต้องอนุมัติ |
allowlist |
เฉพาะผู้ส่งใน allowFrom (หรือ store อนุญาตที่จับคู่แล้ว) |
open |
อนุญาต DM ขาเข้าทั้งหมด (ต้องมี allowFrom: ["*"]) |
disabled |
ไม่สนใจ DM ขาเข้าทั้งหมด |
| นโยบายกลุ่ม | พฤติกรรม |
|---|---|
allowlist (ค่าเริ่มต้น) |
เฉพาะกลุ่มที่ตรงกับ allowlist ที่กำหนดค่าไว้ |
open |
ข้าม allowlist ของกลุ่ม (การกำหนดให้ต้องเมนชันยังคงมีผล) |
disabled |
บล็อกข้อความกลุ่ม/ห้องทั้งหมด |
การแทนที่โมเดลของช่อง
ใช้ channels.modelByChannel เพื่อตรึง ID ช่องเฉพาะกับโมเดล ค่ารับรูปแบบ provider/model หรือนามแฝงโมเดลที่กำหนดค่าไว้ การแมปช่องจะมีผลเมื่อ session ยังไม่มีการแทนที่โมเดลอยู่แล้ว (เช่น ตั้งค่าผ่าน /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",
},
},
},
}
ค่าเริ่มต้นของช่องและ Heartbeat
ใช้ channels.defaults สำหรับพฤติกรรมนโยบายกลุ่มและ Heartbeat ที่ใช้ร่วมกันข้าม provider:
{
channels: {
defaults: {
groupPolicy: "allowlist", // open | allowlist | disabled
contextVisibility: "all", // all | allowlist | allowlist_quote
heartbeat: {
showOk: false,
showAlerts: true,
useIndicator: true,
},
},
},
}
channels.defaults.groupPolicy: นโยบายกลุ่มสำรองเมื่อไม่ได้ตั้งค่าgroupPolicyระดับ providerchannels.defaults.contextVisibility: โหมดการมองเห็นบริบทเสริมค่าเริ่มต้นสำหรับทุกช่อง ค่า:all(ค่าเริ่มต้น รวมบริบทที่อ้างอิง/thread/ประวัติทั้งหมด),allowlist(รวมเฉพาะบริบทจากผู้ส่งที่อยู่ใน allowlist),allowlist_quote(เหมือน allowlist แต่คงบริบท quote/reply ที่ระบุชัดเจนไว้) การแทนที่รายช่อง:channels.<channel>.contextVisibilitychannels.defaults.heartbeat.showOk: รวมสถานะช่องที่ปกติในเอาต์พุต Heartbeatchannels.defaults.heartbeat.showAlerts: รวมสถานะที่เสื่อมคุณภาพ/ผิดพลาดในเอาต์พุต Heartbeatchannels.defaults.heartbeat.useIndicator: แสดงเอาต์พุต Heartbeat แบบตัวบ่งชี้กะทัดรัด
WhatsApp ทำงานผ่านช่อง web ของ gateway (Baileys Web) โดยจะเริ่มทำงานอัตโนมัติเมื่อมี session ที่เชื่อมโยงอยู่
{
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"],
},
},
}
Multi-account WhatsApp
{
channels: {
whatsapp: {
accounts: {
default: {},
personal: {},
biz: {
// authDir: "~/.openclaw/credentials/whatsapp/biz",
},
},
},
},
}
- คำสั่งขาออกจะใช้บัญชี
defaultเป็นค่าเริ่มต้นหากมีอยู่ มิฉะนั้นจะใช้ id บัญชีแรกที่กำหนดค่าไว้ (เรียงลำดับแล้ว) channels.whatsapp.defaultAccountแบบไม่บังคับจะแทนที่การเลือกบัญชีค่าเริ่มต้นสำรองนั้นเมื่อค่าตรงกับ id บัญชีที่กำหนดค่าไว้- auth dir ของ Baileys แบบบัญชีเดียวเดิมจะถูกย้ายโดย
openclaw doctorไปยังwhatsapp/default - การแทนที่รายบัญชี:
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",
},
},
}
- Bot token:
channels.telegram.botTokenหรือchannels.telegram.tokenFile(ต้องเป็นไฟล์ปกติเท่านั้น ปฏิเสธ symlink) โดยใช้TELEGRAM_BOT_TOKENเป็นค่าสำรองสำหรับบัญชีค่าเริ่มต้น apiRootคือ root ของ Telegram Bot API เท่านั้น ใช้https://api.telegram.orgหรือ root แบบ self-hosted/proxy ของคุณ ไม่ใช่https://api.telegram.org/bot<TOKEN>;openclaw doctor --fixจะลบ suffix/bot<TOKEN>ที่เผลอต่อท้ายออกchannels.telegram.defaultAccountแบบไม่บังคับจะแทนที่การเลือกบัญชีค่าเริ่มต้นเมื่อค่าตรงกับ id บัญชีที่กำหนดค่าไว้- ในการตั้งค่าหลายบัญชี (id บัญชี 2 รายการขึ้นไป) ให้ตั้งค่า default อย่างชัดเจน (
channels.telegram.defaultAccountหรือchannels.telegram.accounts.default) เพื่อหลีกเลี่ยงการกำหนดเส้นทางสำรอง;openclaw doctorจะเตือนเมื่อค่านี้หายไปหรือไม่ถูกต้อง configWrites: falseบล็อกการเขียน config ที่เริ่มจาก Telegram (การย้าย ID ของ supergroup,/config set|unset)- รายการ
bindings[]ระดับบนสุดที่มีtype: "acp"กำหนดค่า ACP bindings แบบคงอยู่สำหรับหัวข้อ forum (ใช้chatId:topic:topicIdแบบ canonical ในmatch.peer.id) ความหมายของฟิลด์ใช้ร่วมกันใน ACP Agents - ตัวอย่างสตรีมของ Telegram ใช้
sendMessage+editMessageText(ทำงานได้ในแชตโดยตรงและแชตกลุ่ม) - นโยบาย retry: ดู นโยบาย retry
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,
},
},
},
}
- โทเค็น:
channels.discord.tokenโดยใช้DISCORD_BOT_TOKENเป็น fallback สำหรับบัญชีเริ่มต้น. - การเรียกออกโดยตรงที่ระบุ Discord
tokenอย่างชัดเจนจะใช้โทเค็นนั้นสำหรับการเรียกนั้น ส่วนการตั้งค่าการลองซ้ำ/นโยบายของบัญชียังคงมาจากบัญชีที่เลือกในสแนปช็อตรันไทม์ที่ใช้งานอยู่. channels.discord.defaultAccountแบบไม่บังคับจะแทนที่การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ id ของบัญชีที่กำหนดค่าไว้.- ใช้
user:<id>(DM) หรือchannel:<id>(ช่องกิลด์) สำหรับเป้าหมายการส่ง; ID ตัวเลขล้วนจะถูกปฏิเสธ. - สลักกิลด์เป็นตัวพิมพ์เล็กและแทนที่ช่องว่างด้วย
-; คีย์ช่องใช้ชื่อที่แปลงเป็นสลักแล้ว (ไม่มี#). ควรใช้ ID กิลด์. - ข้อความที่บอตเขียนจะถูกละเว้นตามค่าเริ่มต้น.
allowBots: trueเปิดใช้งานข้อความเหล่านั้น; ใช้allowBots: "mentions"เพื่อยอมรับเฉพาะข้อความจากบอตที่กล่าวถึงบอตเท่านั้น (ยังคงกรองข้อความของตัวเองออก). channels.discord.guilds.<id>.ignoreOtherMentions(และการแทนที่ระดับช่อง) จะทิ้งข้อความที่กล่าวถึงผู้ใช้หรือบทบาทอื่นแต่ไม่ได้กล่าวถึงบอต (ยกเว้น @everyone/@here).channels.discord.mentionAliasesแมปข้อความ@handleขาออกที่เสถียรไปยัง ID ผู้ใช้ Discord ก่อนส่ง เพื่อให้กล่าวถึงเพื่อนร่วมทีมที่รู้จักได้อย่างกำหนดแน่นอนแม้แคชไดเรกทอรีชั่วคราวจะว่างอยู่. การแทนที่ต่อบัญชีอยู่ใต้channels.discord.accounts.<accountId>.mentionAliases.maxLinesPerMessage(ค่าเริ่มต้น 17) จะแยกข้อความที่สูงมากแม้อยู่ต่ำกว่า 2000 อักขระ.channels.discord.threadBindingsควบคุมการกำหนดเส้นทาง Discord ที่ผูกกับเธรด:enabled: การแทนที่ Discord สำหรับฟีเจอร์เซสชันที่ผูกกับเธรด (/focus,/unfocus,/agents,/session idle,/session max-ageและการส่ง/การกำหนดเส้นทางแบบผูก)idleHours: การแทนที่ Discord สำหรับการเลิกโฟกัสอัตโนมัติเมื่อไม่มีกิจกรรมเป็นชั่วโมง (0ปิดใช้งาน)maxAgeHours: การแทนที่ Discord สำหรับอายุสูงสุดแบบบังคับเป็นชั่วโมง (0ปิดใช้งาน)spawnSessions: สวิตช์สำหรับsessions_spawn({ thread: true })และการสร้าง/ผูกเธรดอัตโนมัติของ ACP thread-spawn (ค่าเริ่มต้น:true)defaultSpawnContext: บริบท subagent เนทีฟสำหรับการสร้างที่ผูกกับเธรด (ค่าเริ่มต้นคือ"fork")
- รายการ
bindings[]ระดับบนสุดที่มีtype: "acp"กำหนดค่า ACP bindings แบบถาวรสำหรับช่องและเธรด (ใช้ id ช่อง/เธรดในmatch.peer.id). ความหมายของฟิลด์ใช้ร่วมกันใน ACP Agents. channels.discord.ui.components.accentColorตั้งค่าสีเน้นสำหรับคอนเทนเนอร์ Discord components v2.channels.discord.voiceเปิดใช้งานการสนทนาในช่องเสียง Discord และการแทนที่ auto-join + LLM + TTS แบบไม่บังคับ. การกำหนดค่า Discord แบบข้อความเท่านั้นจะปิดเสียงไว้ตามค่าเริ่มต้น; ตั้งค่าchannels.discord.voice.enabled=trueเพื่อเลือกเปิดใช้.channels.discord.voice.modelแทนที่โมเดล LLM ที่ใช้สำหรับคำตอบในช่องเสียง Discord ได้แบบไม่บังคับ.channels.discord.voice.daveEncryptionและchannels.discord.voice.decryptionFailureToleranceส่งผ่านไปยังตัวเลือก DAVE ของ@discordjs/voice(trueและ24ตามค่าเริ่มต้น).channels.discord.voice.connectTimeoutMsควบคุมการรอ Ready เริ่มต้นของ@discordjs/voiceสำหรับ/vc joinและความพยายาม auto-join (30000ตามค่าเริ่มต้น).channels.discord.voice.reconnectGraceMsควบคุมระยะเวลาที่เซสชันเสียงที่ตัดการเชื่อมต่ออาจใช้เพื่อเข้าสู่สัญญาณการเชื่อมต่อใหม่ ก่อนที่ OpenClaw จะทำลายเซสชันนั้น (15000ตามค่าเริ่มต้น).- การเล่นเสียง Discord จะไม่ถูกขัดจังหวะโดยเหตุการณ์เริ่มพูดของผู้ใช้อื่น. เพื่อหลีกเลี่ยงลูปเสียงย้อนกลับ OpenClaw จะละเว้นการจับเสียงใหม่ขณะ TTS กำลังเล่น.
- OpenClaw ยังพยายามกู้คืนการรับเสียงโดยออกจาก/เข้าร่วมเซสชันเสียงใหม่หลังจากถอดรหัสล้มเหลวซ้ำ.
channels.discord.streamingคือคีย์โหมดสตรีมมาตรฐาน. Discord มีค่าเริ่มต้นเป็นstreaming.mode: "progress"เพื่อให้ความคืบหน้าของเครื่องมือ/งานปรากฏในข้อความพรีวิวที่แก้ไขข้อความเดียว; ตั้งค่าstreaming.mode: "off"เพื่อปิดใช้งาน. ค่าเดิมstreamModeและค่าstreamingแบบบูลีนยังคงเป็นนามแฝงรันไทม์; รันopenclaw doctor --fixเพื่อเขียนการกำหนดค่าที่บันทึกไว้ใหม่.channels.discord.autoPresenceแมปความพร้อมใช้งานของรันไทม์ไปยังสถานะบอต (healthy => online, degraded => idle, exhausted => dnd) และอนุญาตการแทนที่ข้อความสถานะแบบไม่บังคับ.channels.discord.dangerouslyAllowNameMatchingเปิดใช้งานการจับคู่ชื่อ/แท็กที่เปลี่ยนแปลงได้อีกครั้ง (โหมดความเข้ากันได้กรณีฉุกเฉิน).channels.discord.execApprovals: การส่งคำอนุมัติ exec แบบเนทีฟของ Discord และการให้สิทธิ์ผู้อนุมัติ.enabled:true,falseหรือ"auto"(ค่าเริ่มต้น). ในโหมดอัตโนมัติ คำอนุมัติ exec จะเปิดใช้งานเมื่อสามารถระบุผู้อนุมัติจากapproversหรือcommands.ownerAllowFromได้.approvers: ID ผู้ใช้ Discord ที่อนุญาตให้อนุมัติคำขอ exec. fallback ไปยังcommands.ownerAllowFromเมื่อไม่ได้ระบุ.agentFilter: allowlist ID เอเจนต์แบบไม่บังคับ. ละไว้เพื่อส่งต่อคำอนุมัติสำหรับเอเจนต์ทั้งหมด.sessionFilter: รูปแบบคีย์เซสชันแบบไม่บังคับ (สตริงย่อยหรือ regex).target: ตำแหน่งที่จะส่งพรอมป์อนุมัติ."dm"(ค่าเริ่มต้น) ส่งไปยัง DM ของผู้อนุมัติ,"channel"ส่งไปยังช่องต้นทาง,"both"ส่งไปทั้งสองที่. เมื่อ target มี"channel"ปุ่มจะใช้ได้เฉพาะผู้อนุมัติที่ระบุได้เท่านั้น.cleanupAfterResolve: เมื่อเป็นtrueจะลบ DM อนุมัติหลังจากอนุมัติ ปฏิเสธ หรือหมดเวลา.
โหมดการแจ้งเตือนรีแอ็กชัน: off (ไม่มี), own (ข้อความของบอต, ค่าเริ่มต้น), all (ข้อความทั้งหมด), allowlist (จาก guilds.<id>.users ในข้อความทั้งหมด).
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 ของบัญชีบริการ: แบบอินไลน์ (
serviceAccount) หรือแบบอิงไฟล์ (serviceAccountFile). - รองรับ SecretRef ของบัญชีบริการด้วย (
serviceAccountRef). - Env fallback:
GOOGLE_CHAT_SERVICE_ACCOUNTหรือGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - ใช้
spaces/<spaceId>หรือusers/<userId>สำหรับเป้าหมายการส่ง. channels.googlechat.dangerouslyAllowNameMatchingเปิดใช้งานการจับคู่ principal อีเมลที่เปลี่ยนแปลงได้อีกครั้ง (โหมดความเข้ากันได้กรณีฉุกเฉิน).
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
},
},
},
}
- โหมด Socket ต้องมีทั้ง
botTokenและappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENสำหรับ env fallback ของบัญชีเริ่มต้น). - โหมด HTTP ต้องมี
botTokenพร้อมsigningSecret(ที่รากหรือรายบัญชี). socketModeส่งผ่านการปรับแต่งการขนส่ง Socket Mode ของ Slack SDK ไปยัง Bolt receiver API สาธารณะ. ใช้เฉพาะเมื่อกำลังตรวจสอบปัญหา ping/pong timeout หรือพฤติกรรม websocket ค้าง.botToken,appToken,signingSecretและuserTokenรับสตริงข้อความธรรมดา หรืออ็อบเจกต์ SecretRef.- สแนปช็อตบัญชี Slack เปิดเผยฟิลด์แหล่งที่มา/สถานะต่อข้อมูลรับรอง เช่น
botTokenSource,botTokenStatus,appTokenStatusและในโหมด HTTP คือsigningSecretStatus.configured_unavailableหมายความว่าบัญชีถูก กำหนดค่าผ่าน SecretRef แต่เส้นทางคำสั่ง/รันไทม์ปัจจุบันไม่สามารถ resolve ค่าความลับได้. configWrites: falseบล็อกการเขียนการกำหนดค่าที่เริ่มจาก Slack.channels.slack.defaultAccountแบบไม่บังคับจะแทนที่การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ id ของบัญชีที่กำหนดค่าไว้.channels.slack.streaming.modeคือคีย์โหมดสตรีมมาตรฐานของ Slack.channels.slack.streaming.nativeTransportควบคุมการขนส่งสตรีมมิงเนทีฟของ Slack. ค่าเดิมstreamMode, ค่าstreamingแบบบูลีน และค่าnativeStreamingยังคงเป็นนามแฝงรันไทม์; รันopenclaw doctor --fixเพื่อเขียนการกำหนดค่าที่บันทึกไว้ใหม่.- ใช้
user:<id>(DM) หรือchannel:<id>สำหรับเป้าหมายการส่ง.
โหมดการแจ้งเตือนรีแอ็กชัน: off, own (ค่าเริ่มต้น), all, allowlist (จาก reactionAllowlist).
การแยกเซสชันเธรด: thread.historyScope เป็นแบบต่อเธรด (ค่าเริ่มต้น) หรือใช้ร่วมกันทั้งช่อง. thread.inheritParent คัดลอกทรานสคริปต์ของช่องแม่ไปยังเธรดใหม่.
- สตรีมมิงเนทีฟของ Slack ร่วมกับสถานะเธรดแบบผู้ช่วยของ Slack ที่ว่า "is typing..." ต้องมีเป้าหมายเธรดสำหรับตอบกลับ. DM ระดับบนสุดจะอยู่นอกเธรดตามค่าเริ่มต้น จึงยังสามารถสตรีมผ่านพรีวิวแบบโพสต์ฉบับร่างแล้วแก้ไขของ Slack แทนการแสดงพรีวิวสตรีม/สถานะแบบเนทีฟสไตล์เธรด.
typingReactionเพิ่มรีแอ็กชันชั่วคราวให้กับข้อความ Slack ขาเข้าขณะกำลังสร้างคำตอบ แล้วลบออกเมื่อเสร็จสิ้น. ใช้ชอร์ตโค้ดอีโมจิ Slack เช่น"hourglass_flowing_sand".channels.slack.execApprovals: การส่งคำอนุมัติ exec แบบเนทีฟของ Slack และการให้สิทธิ์ผู้อนุมัติ. ใช้สคีมาเดียวกับ Discord:enabled(true/false/"auto"),approvers(ID ผู้ใช้ Slack),agentFilter,sessionFilterและtarget("dm","channel"หรือ"both").
| กลุ่มการดำเนินการ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
| reactions | เปิดใช้งาน | รีแอ็กชัน + แสดงรายการรีแอ็กชัน |
| messages | เปิดใช้งาน | อ่าน/ส่ง/แก้ไข/ลบ |
| pins | เปิดใช้งาน | ปักหมุด/เลิกปักหมุด/แสดงรายการ |
| memberInfo | เปิดใช้งาน | ข้อมูลสมาชิก |
| emojiList | เปิดใช้งาน | รายการอีโมจิกำหนดเอง |
Mattermost
Mattermost มาพร้อมเป็น Plugin แบบ bundled ใน OpenClaw รุ่นปัจจุบัน. บิลด์ที่เก่ากว่าหรือ
บิลด์แบบกำหนดเองสามารถติดตั้งแพ็กเกจ npm ปัจจุบันด้วย
openclaw plugins install @openclaw/mattermost. ตรวจสอบ
npmjs.com/package/@openclaw/mattermost
สำหรับ dist-tags ปัจจุบันก่อนตรึงเวอร์ชัน.
{
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",
},
},
}
โหมดแชท: oncall (ตอบเมื่อมี @-mention, ค่าเริ่มต้น), onmessage (ทุกข้อความ), onchar (ข้อความที่ขึ้นต้นด้วยคำนำหน้าทริกเกอร์)
เมื่อเปิดใช้คำสั่งเนทีฟของ Mattermost:
commands.callbackPathต้องเป็นพาธ (เช่น/api/channels/mattermost/command) ไม่ใช่ URL แบบเต็มcommands.callbackUrlต้อง resolve ไปยัง endpoint ของ OpenClaw Gateway และต้องเข้าถึงได้จากเซิร์ฟเวอร์ Mattermost- callback แบบ slash เนทีฟจะยืนยันตัวตนด้วยโทเค็นต่อคำสั่งที่ Mattermost ส่งกลับ
ระหว่างการลงทะเบียนคำสั่ง slash หากการลงทะเบียนล้มเหลวหรือไม่มีการเปิดใช้งาน
คำสั่งใด OpenClaw จะปฏิเสธ callback ด้วย
Unauthorized: invalid command token. - สำหรับโฮสต์ callback แบบส่วนตัว/tailnet/internal Mattermost อาจต้องกำหนดให้
ServiceSettings.AllowedUntrustedInternalConnectionsรวมโฮสต์/โดเมนของ callback ใช้ค่าโฮสต์/โดเมน ไม่ใช่ URL แบบเต็ม channels.mattermost.configWrites: อนุญาตหรือปฏิเสธการเขียนค่ากำหนดที่เริ่มจาก Mattermostchannels.mattermost.requireMention: ต้องมี@mentionก่อนตอบกลับในช่องchannels.mattermost.groups.<channelId>.requireMention: การ override การกั้นด้วย mention รายช่อง ("*"สำหรับค่าเริ่มต้น)channels.mattermost.defaultAccountแบบไม่บังคับจะ override การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ ID บัญชีที่กำหนดค่าไว้
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,
},
},
}
โหมดการแจ้งเตือน reaction: off, own (ค่าเริ่มต้น), all, allowlist (จาก reactionAllowlist)
channels.signal.account: ตรึงการเริ่มต้นช่องกับตัวตนบัญชี Signal ที่ระบุchannels.signal.configWrites: อนุญาตหรือปฏิเสธการเขียนค่ากำหนดที่เริ่มจาก Signalchannels.signal.defaultAccountแบบไม่บังคับจะ override การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ ID บัญชีที่กำหนดค่าไว้
BlueBubbles
BlueBubbles คือบริดจ์ iMessage แบบเดิม (รองรับด้วย Plugin, กำหนดค่าภายใต้ channels.bluebubbles) การตั้งค่าที่มีอยู่ยังคงรองรับอยู่ แต่การ deploy OpenClaw iMessage ใหม่ควรใช้ channels.imessage เมื่อ imsg สามารถทำงานบนโฮสต์ Messages ได้
{
channels: {
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
// serverUrl, password, webhookPath, group controls, and advanced actions:
// see /channels/bluebubbles
},
},
}
- พาธคีย์หลักที่ครอบคลุมที่นี่:
channels.bluebubbles,channels.bluebubbles.dmPolicy channels.bluebubbles.defaultAccountแบบไม่บังคับจะ override การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ ID บัญชีที่กำหนดค่าไว้- รายการ
bindings[]ระดับบนสุดที่มีtype: "acp"สามารถผูกบทสนทนา BlueBubbles กับเซสชัน ACP แบบคงอยู่ ใช้ handle ของ BlueBubbles หรือสตริงเป้าหมาย (chat_id:*,chat_guid:*,chat_identifier:*) ในmatch.peer.idความหมายของฟิลด์ที่ใช้ร่วมกัน: ACP Agents - ค่ากำหนดช่อง BlueBubbles แบบเต็มและเหตุผลในการเลิกใช้มีบันทึกไว้ใน BlueBubbles
iMessage
OpenClaw สร้าง imsg rpc (JSON-RPC ผ่าน stdio) ไม่ต้องใช้ daemon หรือพอร์ต นี่คือเส้นทางที่แนะนำสำหรับการตั้งค่า OpenClaw iMessage ใหม่เมื่อโฮสต์สามารถให้สิทธิ์ฐานข้อมูล Messages และ 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.defaultAccountแบบไม่บังคับจะ override การเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ ID บัญชีที่กำหนดค่าไว้ -
ต้องใช้ Full Disk Access สำหรับฐานข้อมูล Messages
-
แนะนำให้ใช้เป้าหมาย
chat_id:<id>ใช้imsg chats --limit 20เพื่อแสดงรายการแชท -
cliPathสามารถชี้ไปยัง wrapper ของ SSH ได้; ตั้งค่าremoteHost(hostหรือuser@host) สำหรับการดึงไฟล์แนบผ่าน SCP -
attachmentRootsและremoteAttachmentRootsจำกัดพาธไฟล์แนบขาเข้า (ค่าเริ่มต้น:/Users/*/Library/Messages/Attachments) -
SCP ใช้การตรวจสอบ host-key แบบเข้มงวด ดังนั้นตรวจสอบให้แน่ใจว่าคีย์ของโฮสต์ relay มีอยู่แล้วใน
~/.ssh/known_hosts -
channels.imessage.configWrites: อนุญาตหรือปฏิเสธการเขียนค่ากำหนดที่เริ่มจาก iMessage -
รายการ
bindings[]ระดับบนสุดที่มีtype: "acp"สามารถผูกบทสนทนา iMessage กับเซสชัน ACP แบบคงอยู่ ใช้ handle ที่ normalize แล้วหรือเป้าหมายแชทแบบระบุชัดเจน (chat_id:*,chat_guid:*,chat_identifier:*) ในmatch.peer.idความหมายของฟิลด์ที่ใช้ร่วมกัน: ACP Agents
ตัวอย่าง iMessage SSH wrapper
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Matrix
Matrix รองรับโดย Plugin และกำหนดค่าใต้ 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",
},
},
},
},
}
- การยืนยันตัวตนด้วยโทเค็นใช้
accessToken; การยืนยันตัวตนด้วยรหัสผ่านใช้userId+password channels.matrix.proxyจะส่งทราฟฟิก HTTP ของ Matrix ผ่านพร็อกซี HTTP(S) ที่ระบุอย่างชัดเจน บัญชีที่มีชื่อสามารถเขียนทับได้ด้วยchannels.matrix.accounts.<id>.proxychannels.matrix.network.dangerouslyAllowPrivateNetworkอนุญาต homeserver ส่วนตัว/ภายในproxyและการเลือกใช้เครือข่ายนี้เป็นตัวควบคุมที่แยกจากกันchannels.matrix.defaultAccountเลือกบัญชีที่ต้องการใช้ในการตั้งค่าแบบหลายบัญชีchannels.matrix.autoJoinมีค่าเริ่มต้นเป็นoffดังนั้นห้องที่เชิญเข้ามาและคำเชิญแบบ DM ใหม่จะถูกละเว้นจนกว่าคุณจะตั้งค่าautoJoin: "allowlist"พร้อมautoJoinAllowlistหรือautoJoin: "always"channels.matrix.execApprovals: การส่งมอบการอนุมัติ exec แบบเนทีฟของ Matrix และการอนุญาตผู้อนุมัติenabled:true,falseหรือ"auto"(ค่าเริ่มต้น) ในโหมดอัตโนมัติ การอนุมัติ exec จะเปิดใช้งานเมื่อสามารถระบุผู้อนุมัติได้จากapproversหรือcommands.ownerAllowFromapprovers: ID ผู้ใช้ Matrix (เช่น@owner:example.org) ที่ได้รับอนุญาตให้อนุมัติคำขอ execagentFilter: allowlist ID ของ agent แบบไม่บังคับ ละไว้เพื่อส่งต่อการอนุมัติสำหรับทุก agentsessionFilter: รูปแบบคีย์ session แบบไม่บังคับ (substring หรือ regex)target: ตำแหน่งที่จะส่งพรอมป์การอนุมัติ"dm"(ค่าเริ่มต้น),"channel"(ห้องต้นทาง) หรือ"both"- การเขียนทับรายบัญชี:
channels.matrix.accounts.<id>.execApprovals
channels.matrix.dm.sessionScopeควบคุมวิธีที่ DM ของ Matrix ถูกจัดกลุ่มเป็น session:per-user(ค่าเริ่มต้น) แชร์ตาม peer ที่ถูก route ส่วนper-roomแยกแต่ละห้อง DM ออกจากกัน- การ probe สถานะ Matrix และการค้นหาไดเรกทอรีแบบ live ใช้นโยบายพร็อกซีเดียวกับทราฟฟิก runtime
- การกำหนดค่า Matrix ทั้งหมด กฎการกำหนดเป้าหมาย และตัวอย่างการตั้งค่ามีเอกสารอยู่ใน Matrix
Microsoft Teams
Microsoft Teams รองรับโดย Plugin และกำหนดค่าใต้ channels.msteams
{
channels: {
msteams: {
enabled: true,
configWrites: true,
// appId, appPassword, tenantId, webhook, team/channel policies:
// see /channels/msteams
},
},
}
- พาธคีย์หลักที่ครอบคลุมที่นี่:
channels.msteams,channels.msteams.configWrites - การกำหนดค่า Teams ทั้งหมด (credentials, Webhook, นโยบาย DM/กลุ่ม, การเขียนทับรายทีม/รายช่อง) มีเอกสารอยู่ใน Microsoft Teams
IRC
IRC รองรับโดย Plugin และกำหนดค่าใต้ channels.irc
{
channels: {
irc: {
enabled: true,
dmPolicy: "pairing",
configWrites: true,
nickserv: {
enabled: true,
service: "NickServ",
password: "${IRC_NICKSERV_PASSWORD}",
register: false,
registerEmail: "[email protected]",
},
},
},
}
- พาธคีย์หลักที่ครอบคลุมที่นี่:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.* channels.irc.defaultAccountแบบไม่บังคับจะเขียนทับการเลือกบัญชีเริ่มต้นเมื่อค่าตรงกับ id ของบัญชีที่กำหนดค่าไว้- การกำหนดค่าช่อง IRC ทั้งหมด (host/port/TLS/channels/allowlists/mention gating) มีเอกสารอยู่ใน IRC
หลายบัญชี (ทุกช่อง)
เรียกใช้หลายบัญชีต่อช่อง (แต่ละบัญชีมี accountId ของตัวเอง):
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
defaultจะถูกใช้เมื่อไม่ได้ระบุaccountId(CLI + routing)- โทเค็นจาก env ใช้กับบัญชี default เท่านั้น
- การตั้งค่าช่องพื้นฐานใช้กับทุกบัญชี เว้นแต่จะถูกเขียนทับรายบัญชี
- ใช้
bindings[].match.accountIdเพื่อ route แต่ละบัญชีไปยัง agent ที่ต่างกัน - หากคุณเพิ่มบัญชีที่ไม่ใช่ค่าเริ่มต้นผ่าน
openclaw channels add(หรือการ onboarding ช่อง) ขณะที่ยังใช้การกำหนดค่าช่องระดับบนแบบบัญชีเดียว OpenClaw จะเลื่อนค่าบัญชีเดียวระดับบนที่อยู่ในขอบเขตบัญชีเข้าไปในแผนที่บัญชีของช่องก่อน เพื่อให้บัญชีเดิมยังทำงานต่อไปได้ ช่องส่วนใหญ่จะย้ายค่าเหล่านี้ไปยังchannels.<channel>.accounts.default; Matrix สามารถคง target ที่มีชื่อ/ค่าเริ่มต้นซึ่งตรงกันอยู่แล้วแทนได้ - binding ที่มีอยู่เฉพาะช่อง (ไม่มี
accountId) จะยังจับคู่กับบัญชีเริ่มต้นต่อไป; binding ที่อยู่ในขอบเขตบัญชียังคงเป็นแบบไม่บังคับ openclaw doctor --fixยังซ่อมแซมรูปแบบที่ผสมกันด้วยการย้ายค่าบัญชีเดียวระดับบนที่อยู่ในขอบเขตบัญชีเข้าไปในบัญชีที่ถูกเลื่อนระดับซึ่งเลือกไว้สำหรับช่องนั้น ช่องส่วนใหญ่ใช้accounts.default; Matrix สามารถคง target ที่มีชื่อ/ค่าเริ่มต้นซึ่งตรงกันอยู่แล้วแทนได้
ช่อง Plugin อื่นๆ
ช่อง Plugin จำนวนมากกำหนดค่าเป็น channels.<id> และมีเอกสารอยู่ในหน้าช่องเฉพาะของตัวเอง (ตัวอย่างเช่น Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat และ Twitch)
ดูดัชนีช่องทั้งหมด: Channels
การควบคุมการกล่าวถึงในแชตกลุ่ม
ข้อความกลุ่มมีค่าเริ่มต้นเป็น ต้องมีการกล่าวถึง (metadata mention หรือรูปแบบ regex ที่ปลอดภัย) ใช้กับแชตกลุ่มของ WhatsApp, Telegram, Discord, Google Chat และ iMessage
การตอบกลับที่มองเห็นได้จะถูกควบคุมแยกต่างหาก ห้องกลุ่ม/ช่องมีค่าเริ่มต้นเป็น messages.groupChat.visibleReplies: "message_tool": OpenClaw ยังคงประมวลผลรอบนั้น แต่การตอบกลับสุดท้ายตามปกติจะยังเป็นส่วนตัว และเอาต์พุตในห้องที่มองเห็นได้ต้องใช้ message(action=send) ตั้งค่า "automatic" เฉพาะเมื่อคุณต้องการพฤติกรรมเดิมที่การตอบกลับตามปกติถูกโพสต์กลับไปยังห้อง หากต้องการใช้พฤติกรรมการตอบกลับที่มองเห็นได้แบบใช้เครื่องมือเท่านั้นกับแชตโดยตรงด้วย ให้ตั้งค่า messages.visibleReplies: "message_tool"; ฮาร์เนส Codex ยังใช้พฤติกรรมแบบใช้เครื่องมือเท่านั้นนั้นเป็นค่าเริ่มต้นของแชตโดยตรงเมื่อไม่ได้ตั้งค่าเช่นกัน
การตอบกลับที่มองเห็นได้แบบใช้เครื่องมือเท่านั้นต้องใช้โมเดล/รันไทม์ที่เรียกใช้เครื่องมือได้อย่างเชื่อถือได้ หาก
บันทึกเซสชันแสดงข้อความของผู้ช่วยพร้อม didSendViaMessagingTool: false
แปลว่าโมเดลสร้างคำตอบสุดท้ายแบบส่วนตัวแทนที่จะเรียกเครื่องมือส่งข้อความ
เปลี่ยนไปใช้โมเดลที่เรียกเครื่องมือได้ดีกว่าสำหรับช่องนั้น หรือกำหนด
messages.groupChat.visibleReplies: "automatic" เพื่อคืนค่าการตอบกลับสุดท้ายที่มองเห็นได้แบบเดิม
หากเครื่องมือส่งข้อความไม่พร้อมใช้งานภายใต้นโยบายเครื่องมือที่ใช้งานอยู่ OpenClaw จะถอยกลับไปใช้การตอบกลับที่มองเห็นได้แบบอัตโนมัติแทนที่จะระงับการตอบสนองอย่างเงียบ ๆ openclaw doctor จะเตือนเกี่ยวกับความไม่ตรงกันนี้
Gateway จะโหลดการกำหนดค่า messages ใหม่แบบ hot-reload หลังจากบันทึกไฟล์แล้ว รีสตาร์ทเฉพาะเมื่อการเฝ้าดูไฟล์หรือการโหลดการกำหนดค่าใหม่ถูกปิดใช้งานในการปรับใช้
ประเภทการกล่าวถึง:
- การกล่าวถึงจากเมทาดาทา: การ @-mention แบบเนทีฟของแพลตฟอร์ม จะถูกละเว้นในโหมดแชตกับตัวเองของ WhatsApp
- รูปแบบข้อความ: รูปแบบ regex ที่ปลอดภัยใน
agents.list[].groupChat.mentionPatternsรูปแบบที่ไม่ถูกต้องและการทำซ้ำแบบซ้อนที่ไม่ปลอดภัยจะถูกละเว้น - การกั้นด้วยการกล่าวถึงจะถูกบังคับใช้เฉพาะเมื่อสามารถตรวจจับได้เท่านั้น (การกล่าวถึงแบบเนทีฟหรือมีรูปแบบอย่างน้อยหนึ่งรายการ)
{
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 ตั้งค่าเริ่มต้นส่วนกลาง ช่องสามารถแทนที่ได้ด้วย channels.<channel>.historyLimit (หรือรายบัญชี) ตั้งค่าเป็น 0 เพื่อปิดใช้งาน
messages.visibleReplies คือค่าเริ่มต้นส่วนกลางสำหรับรอบจากต้นทาง; messages.groupChat.visibleReplies จะแทนที่ค่านี้สำหรับรอบจากต้นทางแบบกลุ่ม/ช่อง เมื่อไม่ได้ตั้งค่า messages.visibleReplies ฮาร์เนสสามารถให้ค่าเริ่มต้นของตนเองสำหรับโดยตรง/ต้นทางได้; ฮาร์เนส Codex มีค่าเริ่มต้นเป็น message_tool รายการอนุญาตของช่องและการกั้นด้วยการกล่าวถึงยังคงเป็นตัวตัดสินว่ารอบหนึ่งจะถูกประมวลผลหรือไม่
ขีดจำกัดประวัติ DM
{
channels: {
telegram: {
dmHistoryLimit: 30,
dms: {
"123456789": { historyLimit: 50 },
},
},
},
}
การตัดสินค่า: การแทนที่ราย DM → ค่าเริ่มต้นของผู้ให้บริการ → ไม่มีขีดจำกัด (เก็บไว้ทั้งหมด)
รองรับ: telegram, whatsapp, discord, slack, signal, imessage, msteams
โหมดแชตกับตัวเอง
ใส่หมายเลขของคุณเองใน allowFrom เพื่อเปิดใช้งานโหมดแชตกับตัวเอง (ละเว้น @-mention แบบเนทีฟ ตอบกลับเฉพาะรูปแบบข้อความ):
{
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
agents: {
list: [
{
id: "main",
groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
},
],
},
}
คำสั่ง (การจัดการคำสั่งแชต)
{
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,
},
}
รายละเอียดคำสั่ง
- บล็อกนี้กำหนดค่าพื้นผิวคำสั่ง สำหรับแค็ตตาล็อกคำสั่งในตัว + ที่บันเดิลมาในปัจจุบัน โปรดดู คำสั่ง Slash
- หน้านี้เป็น ข้อมูลอ้างอิงคีย์การกำหนดค่า ไม่ใช่แค็ตตาล็อกคำสั่งทั้งหมด คำสั่งที่ช่อง/Plugin เป็นเจ้าของ เช่น QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, device-pair/pair, memory/dreaming, phone-control/phoneและ Talk/voiceมีเอกสารในหน้าช่อง/Plugin ของตัวเองรวมถึง คำสั่ง Slash - คำสั่งข้อความต้องเป็นข้อความแบบ เดี่ยวล้วน ที่ขึ้นต้นด้วย
/ native: "auto"เปิดคำสั่งเนทีฟสำหรับ Discord/Telegram และปล่อย Slack ปิดไว้nativeSkills: "auto"เปิดคำสั่ง Skills แบบเนทีฟสำหรับ Discord/Telegram และปล่อย Slack ปิดไว้- แทนที่รายช่อง:
channels.discord.commands.native(บูลีนหรือ"auto") สำหรับ Discord,falseจะข้ามการลงทะเบียนคำสั่งเนทีฟและการล้างข้อมูลระหว่างเริ่มต้น - แทนที่การลงทะเบียน Skills แบบเนทีฟรายช่องด้วย
channels.<provider>.commands.nativeSkills channels.telegram.customCommandsเพิ่มรายการเมนูบอต Telegram เพิ่มเติมbash: trueเปิดใช้! <cmd>สำหรับเชลล์โฮสต์ ต้องใช้tools.elevated.enabledและผู้ส่งต้องอยู่ในtools.elevated.allowFrom.<channel>config: trueเปิดใช้/config(อ่าน/เขียนopenclaw.json) สำหรับไคลเอนต์ Gatewaychat.sendการเขียนถาวรของ/config set|unsetยังต้องใช้operator.admin;/config showแบบอ่านอย่างเดียวยังคงพร้อมใช้งานสำหรับไคลเอนต์ตัวดำเนินการที่มีขอบเขตเขียนตามปกติmcp: trueเปิดใช้/mcpสำหรับการกำหนดค่าเซิร์ฟเวอร์ MCP ที่ OpenClaw จัดการภายใต้mcp.serversplugins: trueเปิดใช้/pluginsสำหรับการค้นพบ ติดตั้ง และควบคุมการเปิด/ปิด Pluginchannels.<provider>.configWritesกั้นการเปลี่ยนแปลงการกำหนดค่าตามช่อง (ค่าเริ่มต้น: true)- สำหรับช่องหลายบัญชี
channels.<provider>.accounts.<id>.configWritesจะกั้นการเขียนที่กำหนดเป้าหมายบัญชีนั้นด้วย (เช่น/allowlist --config --account <id>หรือ/config set channels.<provider>.accounts.<id>...) restart: falseปิดใช้งาน/restartและการกระทำของเครื่องมือรีสตาร์ท Gateway ค่าเริ่มต้น:trueownerAllowFromคือรายการอนุญาตเจ้าของแบบชัดเจนสำหรับคำสั่ง/เครื่องมือเฉพาะเจ้าของ แยกจากallowFromownerDisplay: "hash"แฮชรหัสเจ้าของในพรอมป์ต์ระบบ ตั้งค่าownerDisplaySecretเพื่อควบคุมการแฮชallowFromเป็นรายผู้ให้บริการ เมื่อตั้งค่าแล้ว จะเป็นแหล่งการอนุญาต เพียงแหล่งเดียว (รายการอนุญาต/การจับคู่ของช่องและuseAccessGroupsจะถูกละเว้น)useAccessGroups: falseอนุญาตให้คำสั่งข้ามนโยบายกลุ่มการเข้าถึงเมื่อไม่ได้ตั้งค่าallowFrom- แผนที่เอกสารคำสั่ง:
- แค็ตตาล็อกในตัว + ที่บันเดิลมา: คำสั่ง Slash
- พื้นผิวคำสั่งเฉพาะช่อง: ช่อง
- คำสั่ง QQ Bot: QQ Bot
- คำสั่งการจับคู่: การจับคู่
- คำสั่งการ์ด LINE: LINE
- memory dreaming: Dreaming
ที่เกี่ยวข้อง
- ข้อมูลอ้างอิงการกำหนดค่า — คีย์ระดับบนสุด
- การกำหนดค่า — agents
- ภาพรวมช่อง