Gateway
Yapılandırma — kanallar
Kanal başına yapılandırma anahtarları channels.* altında yer alır. DM ve grup erişimini,
çok hesaplı kurulumları, bahsetme denetimini ve Slack, Discord,
Telegram, WhatsApp, Matrix, iMessage ve birlikte gelen diğer kanal Plugin'leri için kanal başına anahtarları kapsar.
Ajanlar, araçlar, gateway çalışma zamanı ve diğer üst düzey anahtarlar için bkz. Yapılandırma başvurusu.
Kanallar
Her kanal, yapılandırma bölümü mevcut olduğunda otomatik olarak başlar (enabled: false olmadıkça).
DM ve grup erişimi
Tüm kanallar DM ilkelerini ve grup ilkelerini destekler:
| DM ilkesi | Davranış |
|---|---|
pairing (varsayılan) |
Bilinmeyen gönderenler tek kullanımlık bir eşleştirme kodu alır; sahibin onaylaması gerekir |
allowlist |
Yalnızca allowFrom içindeki gönderenler (veya eşleştirilmiş izin deposu) |
open |
Tüm gelen DM'lere izin ver (allowFrom: ["*"] gerektirir) |
disabled |
Tüm gelen DM'leri yok say |
| Grup ilkesi | Davranış |
|---|---|
allowlist (varsayılan) |
Yalnızca yapılandırılmış izin listesiyle eşleşen gruplar |
open |
Grup izin listelerini atla (bahsetme denetimi yine de uygulanır) |
disabled |
Tüm grup/oda mesajlarını engelle |
Kanal model geçersiz kılmaları
Belirli kanal kimliklerini bir modele sabitlemek için channels.modelByChannel kullanın. Değerler provider/model veya yapılandırılmış model diğer adlarını kabul eder. Kanal eşlemesi, bir oturumda zaten bir model geçersiz kılması yoksa uygulanır (örneğin, /model aracılığıyla ayarlanmışsa uygulanmaz).
{
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",
},
},
},
}
Kanal varsayılanları ve Heartbeat
Sağlayıcılar genelinde paylaşılan grup ilkesi ve Heartbeat davranışı için channels.defaults kullanın:
{
channels: {
defaults: {
groupPolicy: "allowlist", // open | allowlist | disabled
contextVisibility: "all", // all | allowlist | allowlist_quote
heartbeat: {
showOk: false,
showAlerts: true,
useIndicator: true,
},
},
},
}
channels.defaults.groupPolicy: sağlayıcı düzeyindegroupPolicyayarlanmadığında geri dönüş grup ilkesi.channels.defaults.contextVisibility: tüm kanallar için varsayılan ek bağlam görünürlük modu. Değerler:all(varsayılan, alıntılanan/konu/geçmiş bağlamının tamamını dahil et),allowlist(yalnızca izin listesindeki gönderenlerden gelen bağlamı dahil et),allowlist_quote(izin listesiyle aynı, ancak açık alıntı/yanıt bağlamını koru). Kanal başına geçersiz kılma:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: sağlıklı kanal durumlarını Heartbeat çıktısına dahil et.channels.defaults.heartbeat.showAlerts: bozulmuş/hata durumlarını Heartbeat çıktısına dahil et.channels.defaults.heartbeat.useIndicator: kompakt gösterge tarzı Heartbeat çıktısı oluştur.
WhatsApp, Gateway'in web kanalı (Baileys Web) üzerinden çalışır. Bağlı bir oturum mevcut olduğunda otomatik olarak başlar.
{
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, // mavi tikler (kendiyle sohbet modunda false)
groups: {
"*": { requireMention: true },
},
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
},
}
Çok hesaplı WhatsApp
{
channels: {
whatsapp: {
accounts: {
default: {},
personal: {},
biz: {
// authDir: "~/.openclaw/credentials/whatsapp/biz",
},
},
},
},
}
- Giden komutlar, varsa varsayılan olarak
defaulthesabını kullanır; aksi takdirde ilk yapılandırılmış hesap kimliğini kullanır (sıralanmış). - İsteğe bağlı
channels.whatsapp.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde bu geri dönüş varsayılan hesap seçimini geçersiz kılar. - Eski tek hesaplı Baileys kimlik doğrulama dizini,
openclaw doctortarafındanwhatsapp/defaultiçine geçirilir. - Hesap başına geçersiz kılmalar:
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 (varsayılan: off; önizleme düzenleme hız sınırlarından kaçınmak için açıkça etkinleştirin)
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.botTokenveyachannels.telegram.tokenFile(yalnızca normal dosya; sembolik bağlantılar reddedilir), varsayılan hesap için geri dönüş olarakTELEGRAM_BOT_TOKEN. apiRootyalnızca Telegram Bot API köküdür.https://api.telegram.org/bot<TOKEN>değil,https://api.telegram.orgveya kendi barındırdığınız/proxy kökünüzü kullanın;openclaw doctor --fixyanlışlıkla eklenmiş sondaki/bot<TOKEN>sonekini kaldırır.- İsteğe bağlı
channels.telegram.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. - Çok hesaplı kurulumlarda (2+ hesap kimliği), geri dönüş yönlendirmesinden kaçınmak için açık bir varsayılan (
channels.telegram.defaultAccountveyachannels.telegram.accounts.default) ayarlayın; bu eksik veya geçersiz olduğundaopenclaw doctoruyarır. configWrites: false, Telegram tarafından başlatılan yapılandırma yazmalarını engeller (süper grup kimliği geçişleri,/config set|unset).type: "acp"içeren üst düzeybindings[]girişleri, forum konuları için kalıcı ACP bağlamalarını yapılandırır (match.peer.idiçinde kanonikchatId:topic:topicIdkullanın). Alan semantiği ACP Ajanları içinde paylaşılır.- Telegram akış önizlemeleri
sendMessage+editMessageTextkullanır (doğrudan ve grup sohbetlerinde çalışır). - Yeniden deneme ilkesi: bkz. Yeniden deneme ilkesi.
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 varsayılanı: 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; varsayılan hesap için yedek olarakDISCORD_BOT_TOKENkullanılır. - Açık bir Discord
tokensağlayan doğrudan giden çağrılar, çağrı için o token'ı kullanır; hesap yeniden deneme/politika ayarları yine etkin çalışma zamanı anlık görüntüsündeki seçili hesaptan gelir. - İsteğe bağlı
channels.discord.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. - Teslimat hedefleri için
user:<id>(DM) veyachannel:<id>(sunucu kanalı) kullanın; çıplak sayısal kimlikler reddedilir. - Sunucu slug'ları küçük harflidir ve boşluklar
-ile değiştirilir; kanal anahtarları slug yapılmış adı kullanır (#olmadan). Sunucu kimliklerini tercih edin. - Bot tarafından yazılmış mesajlar varsayılan olarak yok sayılır.
allowBots: truebunları etkinleştirir; yalnızca bottan bahseden bot mesajlarını kabul etmek içinallowBots: "mentions"kullanın (kendi mesajları yine filtrelenir). channels.discord.guilds.<id>.ignoreOtherMentions(ve kanal geçersiz kılmaları), başka bir kullanıcıdan veya rolden bahsedip bottan bahsetmeyen mesajları düşürür (@everyone/@here hariç).channels.discord.mentionAliases, geçici dizin önbelleği boş olsa bile bilinen ekip arkadaşlarından deterministik olarak bahsedilebilmesi için kararlı giden@handlemetnini göndermeden önce Discord kullanıcı kimliklerine eşler. Hesap başına geçersiz kılmalarchannels.discord.accounts.<accountId>.mentionAliasesaltında bulunur.maxLinesPerMessage(varsayılan 17), 2000 karakterin altında olsa bile uzun mesajları böler.channels.discord.threadBindings, Discord iş parçacığına bağlı yönlendirmeyi denetler:enabled: iş parçacığına bağlı oturum özellikleri için Discord geçersiz kılması (/focus,/unfocus,/agents,/session idle,/session max-ageve bağlı teslimat/yönlendirme)idleHours: saat cinsinden hareketsizlikte otomatik odak kaldırma için Discord geçersiz kılması (0devre dışı bırakır)maxAgeHours: saat cinsinden katı azami yaş için Discord geçersiz kılması (0devre dışı bırakır)spawnSessions:sessions_spawn({ thread: true })ve ACP iş parçacığı oluşturma otomatik iş parçacığı oluşturma/bağlama için anahtar (varsayılan:true)defaultSpawnContext: iş parçacığına bağlı oluşturmalarda yerel alt ajan bağlamı (varsayılan olarak"fork")
type: "acp"içeren üst düzeybindings[]girişleri, kanallar ve iş parçacıkları için kalıcı ACP bağlamaları yapılandırır (match.peer.idiçinde kanal/iş parçacığı kimliğini kullanın). Alan semantiği ACP Ajanları içinde paylaşılır.channels.discord.ui.components.accentColor, Discord bileşenleri v2 kapsayıcıları için vurgu rengini ayarlar.channels.discord.voice, Discord ses kanalı konuşmalarını ve isteğe bağlı otomatik katılma + LLM + TTS geçersiz kılmalarını etkinleştirir. Yalnızca metinli Discord yapılandırmaları sesi varsayılan olarak kapalı bırakır; katılmak içinchannels.discord.voice.enabled=trueayarlayın.channels.discord.voice.model, Discord ses kanalı yanıtları için kullanılan LLM modelini isteğe bağlı olarak geçersiz kılar.channels.discord.voice.daveEncryptionvechannels.discord.voice.decryptionFailureTolerance,@discordjs/voiceDAVE seçeneklerine aktarılır (varsayılan olaraktrueve24).channels.discord.voice.connectTimeoutMs,/vc joinve otomatik katılma denemeleri için başlangıç@discordjs/voiceReady beklemesini denetler (varsayılan olarak30000).channels.discord.voice.reconnectGraceMs, bağlantısı kesilmiş bir ses oturumunun OpenClaw onu yok etmeden önce yeniden bağlanma sinyaline girmesinin ne kadar sürebileceğini denetler (varsayılan olarak15000).- Discord ses oynatımı, başka bir kullanıcının konuşmaya başlama olayıyla kesintiye uğratılmaz. Geri besleme döngülerinden kaçınmak için OpenClaw, TTS oynatılırken yeni ses yakalamayı yok sayar.
- OpenClaw ayrıca yinelenen şifre çözme hatalarından sonra bir ses oturumundan ayrılıp yeniden katılarak ses alma kurtarması denemesi yapar.
channels.discord.streaming, kanonik akış modu anahtarıdır. Discord varsayılan olarakstreaming.mode: "progress"kullanır; böylece araç/iş ilerlemesi düzenlenen tek bir önizleme mesajında görünür; devre dışı bırakmak içinstreaming.mode: "off"ayarlayın. EskistreamModeve booleanstreamingdeğerleri çalışma zamanı takma adları olarak kalır; kalıcı yapılandırmayı yeniden yazmak içinopenclaw doctor --fixçalıştırın.channels.discord.autoPresence, çalışma zamanı kullanılabilirliğini bot varlığına eşler (healthy => online, degraded => idle, exhausted => dnd) ve isteğe bağlı durum metni geçersiz kılmalarına izin verir.channels.discord.dangerouslyAllowNameMatching, değişebilir ad/etiket eşleştirmesini yeniden etkinleştirir (acil durum uyumluluk modu).channels.discord.execApprovals: Discord yerel exec onayı teslimatı ve onaylayan yetkilendirmesi.enabled:true,falseveya"auto"(varsayılan). Otomatik modda exec onayları, onaylayanlarapproversveyacommands.ownerAllowFromüzerinden çözümlenebildiğinde etkinleşir.approvers: exec isteklerini onaylamasına izin verilen Discord kullanıcı kimlikleri. Atlandığındacommands.ownerAllowFromdeğerine geri döner.agentFilter: isteğe bağlı ajan kimliği izin listesi. Tüm ajanlar için onayları iletmek üzere atlayın.sessionFilter: isteğe bağlı oturum anahtarı desenleri (alt dize veya regex).target: onay istemlerinin nereye gönderileceği."dm"(varsayılan) onaylayan DM'lerine gönderir,"channel"kaynak kanala gönderir,"both"ikisine de gönderir. Hedef"channel"içerdiğinde düğmeler yalnızca çözümlenmiş onaylayanlar tarafından kullanılabilir.cleanupAfterResolve:trueolduğunda onay, ret veya zaman aşımından sonra onay DM'lerini siler.
Tepki bildirim modları: off (yok), own (botun mesajları, varsayılan), all (tüm mesajlar), allowlist (tüm mesajlarda guilds.<id>.users içinden).
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,
},
},
}
- Hizmet hesabı JSON'u: satır içi (
serviceAccount) veya dosya tabanlı (serviceAccountFile). - Hizmet hesabı SecretRef de desteklenir (
serviceAccountRef). - Ortam yedekleri:
GOOGLE_CHAT_SERVICE_ACCOUNTveyaGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Teslimat hedefleri için
spaces/<spaceId>veyausers/<userId>kullanın. channels.googlechat.dangerouslyAllowNameMatching, değişebilir e-posta principal eşleştirmesini yeniden etkinleştirir (acil durum uyumluluk modu).
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 modu hem
botTokenhem deappTokengerektirir (varsayılan hesap ortam yedeği içinSLACK_BOT_TOKEN+SLACK_APP_TOKEN). - HTTP modu,
botTokenile birliktesigningSecretgerektirir (kök düzeyde veya hesap başına). socketMode, Slack SDK Socket Mode taşıma ayarlarını genel Bolt receiver API'ye aktarır. Bunu yalnızca ping/pong zaman aşımı veya bayat websocket davranışını araştırırken kullanın.botToken,appToken,signingSecretveuserToken, düz metin dizelerini veya SecretRef nesnelerini kabul eder.- Slack hesap anlık görüntüleri, her kimlik bilgisi için
botTokenSource,botTokenStatus,appTokenStatusve HTTP modundasigningSecretStatusgibi kaynak/durum alanlarını açığa çıkarır.configured_unavailable, hesabın SecretRef üzerinden yapılandırıldığı ancak geçerli komut/çalışma zamanı yolunun gizli değeri çözemediği anlamına gelir. configWrites: false, Slack tarafından başlatılan yapılandırma yazmalarını engeller.- İsteğe bağlı
channels.slack.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. channels.slack.streaming.mode, kanonik Slack akış modu anahtarıdır.channels.slack.streaming.nativeTransport, Slack'in yerel akış taşımasını denetler. EskistreamMode, booleanstreamingvenativeStreamingdeğerleri çalışma zamanı takma adları olarak kalır; kalıcı yapılandırmayı yeniden yazmak içinopenclaw doctor --fixçalıştırın.- Teslimat hedefleri için
user:<id>(DM) veyachannel:<id>kullanın.
Tepki bildirim modları: off, own (varsayılan), all, allowlist (reactionAllowlist içinden).
İş parçacığı oturumu yalıtımı: thread.historyScope, iş parçacığı başına (varsayılan) veya kanal genelinde paylaşımlıdır. thread.inheritParent, üst kanal transkriptini yeni iş parçacıklarına kopyalar.
- Slack yerel akışı ile Slack asistan tarzı "is typing..." iş parçacığı durumu bir yanıt iş parçacığı hedefi gerektirir. Üst düzey DM'ler varsayılan olarak iş parçacığı dışında kalır; bu nedenle iş parçacığı tarzı yerel akış/durum önizlemesini göstermek yerine Slack taslak gönder-ve-düzenle önizlemeleri üzerinden akış yapmaya devam edebilirler.
typingReaction, bir yanıt çalışırken gelen Slack mesajına geçici bir tepki ekler, ardından tamamlandığında kaldırır."hourglass_flowing_sand"gibi bir Slack emoji kısa kodu kullanın.channels.slack.execApprovals: Slack yerel exec onayı teslimatı ve onaylayan yetkilendirmesi. Discord ile aynı şema:enabled(true/false/"auto"),approvers(Slack kullanıcı kimlikleri),agentFilter,sessionFiltervetarget("dm","channel"veya"both").
| Eylem grubu | Varsayılan | Notlar |
|---|---|---|
| reactions | etkin | Tepki ekle + tepkileri listele |
| messages | etkin | Oku/gönder/düzenle/sil |
| pins | etkin | Sabitle/sabitlemeyi kaldır/listele |
| memberInfo | etkin | Üye bilgisi |
| emojiList | etkin | Özel emoji listesi |
Mattermost
Mattermost, geçerli OpenClaw sürümlerinde birlikte gelen bir Plugin olarak sunulur. Daha eski veya
özel derlemeler geçerli bir npm paketini
openclaw plugins install @openclaw/mattermost ile kurabilir. Bir sürüm sabitlemeden önce geçerli dist-tag'ler için
npmjs.com/package/@openclaw/mattermost
sayfasını kontrol edin.
{
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",
},
},
}
Sohbet modları: oncall (@bahsetme olduğunda yanıt ver, varsayılan), onmessage (her mesaj), onchar (tetikleyici önekle başlayan mesajlar).
Mattermost yerel komutları etkinleştirildiğinde:
commands.callbackPathtam URL değil, bir yol olmalıdır (örneğin/api/channels/mattermost/command).commands.callbackUrl, OpenClaw Gateway uç noktasına çözümlenmeli ve Mattermost sunucusundan erişilebilir olmalıdır.- Yerel eğik çizgi geri çağrıları, eğik çizgi komutu kaydı sırasında Mattermost tarafından döndürülen komut başına token’larla kimlik doğrulaması yapar. Kayıt başarısız olursa veya hiçbir komut etkinleştirilmezse OpenClaw geri çağrıları
Unauthorized: invalid command token.ile reddeder. - Özel/tailnet/dahili geri çağrı konakları için Mattermost,
ServiceSettings.AllowedUntrustedInternalConnectionsdeğerinin geri çağrı konağını/alan adını içermesini gerektirebilir. Tam URL’ler değil, konak/alan adı değerleri kullanın. channels.mattermost.configWrites: Mattermost tarafından başlatılan yapılandırma yazmalarına izin ver veya bunları reddet.channels.mattermost.requireMention: kanallarda yanıt vermeden önce@mentiongerektir.channels.mattermost.groups.<channelId>.requireMention: kanal başına bahsetme geçidi geçersiz kılma ("*"varsayılan için).- İsteğe bağlı
channels.mattermost.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
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,
},
},
}
Tepki bildirimi modları: off, own (varsayılan), all, allowlist (reactionAllowlist üzerinden).
channels.signal.account: kanal başlangıcını belirli bir Signal hesap kimliğine sabitle.channels.signal.configWrites: Signal tarafından başlatılan yapılandırma yazmalarına izin ver veya bunları reddet.- İsteğe bağlı
channels.signal.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
BlueBubbles
BlueBubbles, eski iMessage köprüsüdür (Plugin destekli, channels.bluebubbles altında yapılandırılır). Mevcut kurulumlar desteklenmeye devam eder, ancak yeni OpenClaw iMessage dağıtımları, imsg Mesajlar konağında çalışabiliyorsa channels.imessage seçeneğini tercih etmelidir.
{
channels: {
bluebubbles: {
enabled: true,
dmPolicy: "pairing",
// serverUrl, password, webhookPath, group controls, and advanced actions:
// see /channels/bluebubbles
},
},
}
- Burada kapsanan çekirdek anahtar yolları:
channels.bluebubbles,channels.bluebubbles.dmPolicy. - İsteğe bağlı
channels.bluebubbles.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. type: "acp"içeren üst düzeybindings[]girdileri, BlueBubbles konuşmalarını kalıcı ACP oturumlarına bağlayabilir.match.peer.idiçinde bir BlueBubbles tanıtıcısı veya hedef dizesi (chat_id:*,chat_guid:*,chat_identifier:*) kullanın. Paylaşılan alan semantiği: ACP Agents.- Tam BlueBubbles kanal yapılandırması ve kullanımdan kaldırma gerekçesi BlueBubbles içinde belgelenmiştir.
iMessage
OpenClaw, imsg rpc çalıştırır (stdio üzerinden JSON-RPC). Daemon veya bağlantı noktası gerekmez. Bu, konak Mesajlar veritabanı ve Otomasyon izinlerini verebildiğinde yeni OpenClaw iMessage kurulumları için tercih edilen yoldur.
{
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",
},
},
}
-
İsteğe bağlı
channels.imessage.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. -
Mesajlar DB’sine Tam Disk Erişimi gerektirir.
-
chat_id:<id>hedeflerini tercih edin. Sohbetleri listelemek içinimsg chats --limit 20kullanın. -
cliPathbir SSH sarmalayıcısına işaret edebilir; SCP ek getirme içinremoteHost(hostveyauser@host) ayarlayın. -
attachmentRootsveremoteAttachmentRoots, gelen ek yollarını sınırlar (varsayılan:/Users/*/Library/Messages/Attachments). -
SCP sıkı konak anahtarı denetimi kullanır, bu nedenle aktarma konağı anahtarının
~/.ssh/known_hostsiçinde zaten bulunduğundan emin olun. -
channels.imessage.configWrites: iMessage tarafından başlatılan yapılandırma yazmalarına izin ver veya bunları reddet. -
type: "acp"içeren üst düzeybindings[]girdileri, iMessage konuşmalarını kalıcı ACP oturumlarına bağlayabilir.match.peer.idiçinde normalleştirilmiş bir tanıtıcı veya açık sohbet hedefi (chat_id:*,chat_guid:*,chat_identifier:*) kullanın. Paylaşılan alan semantiği: ACP Agents.
iMessage SSH sarmalayıcı örneği
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Matrix
Matrix, Plugin desteklidir ve channels.matrix altında yapılandırılır.
{
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",
},
},
},
},
}
- Token kimlik doğrulaması
accessTokenkullanır; parola kimlik doğrulamasıuserId+passwordkullanır. channels.matrix.proxy, Matrix HTTP trafiğini açık bir HTTP(S) proxy üzerinden yönlendirir. Adlandırılmış hesaplar bunuchannels.matrix.accounts.<id>.proxyile geçersiz kılabilir.channels.matrix.network.dangerouslyAllowPrivateNetwork, özel/dahili homeserver’lara izin verir.proxyve bu ağ katılım tercihi bağımsız denetimlerdir.channels.matrix.defaultAccount, çok hesaplı kurulumlarda tercih edilen hesabı seçer.channels.matrix.autoJoinvarsayılan olarakoffdeğerindedir; bu nedenle davet edilen odalar ve yeni DM tarzı davetler,autoJoinAllowlistileautoJoin: "allowlist"ya daautoJoin: "always"ayarlanana kadar yok sayılır.channels.matrix.execApprovals: Matrix’e özgü exec onayı teslimi ve onaylayıcı yetkilendirmesi.enabled:true,falseveya"auto"(varsayılan). Otomatik modda exec onayları, onaylayıcılarapproversveyacommands.ownerAllowFromüzerinden çözümlenebildiğinde etkinleşir.approvers: exec isteklerini onaylamasına izin verilen Matrix kullanıcı kimlikleri (örn.@owner:example.org).agentFilter: isteğe bağlı agent kimliği izin listesi. Tüm agent’lar için onayları iletmek üzere atlayın.sessionFilter: isteğe bağlı oturum anahtarı desenleri (alt dize veya regex).target: onay istemlerinin nereye gönderileceği."dm"(varsayılan),"channel"(kaynak oda) veya"both".- Hesap başına geçersiz kılmalar:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScope, Matrix DM’lerinin oturumlar halinde nasıl gruplandığını denetler:per-user(varsayılan) yönlendirilen eşe göre paylaşırken,per-roomher DM odasını yalıtır.- Matrix durum sondaları ve canlı dizin aramaları, çalışma zamanı trafiğiyle aynı proxy politikasını kullanır.
- Tam Matrix yapılandırması, hedefleme kuralları ve kurulum örnekleri Matrix içinde belgelenmiştir.
Microsoft Teams
Microsoft Teams, Plugin desteklidir ve channels.msteams altında yapılandırılır.
{
channels: {
msteams: {
enabled: true,
configWrites: true,
// appId, appPassword, tenantId, webhook, team/channel policies:
// see /channels/msteams
},
},
}
- Burada kapsanan temel anahtar yolları:
channels.msteams,channels.msteams.configWrites. - Tam Teams yapılandırması (kimlik bilgileri, webhook, DM/grup politikası, ekip/kanal başına geçersiz kılmalar) Microsoft Teams içinde belgelenmiştir.
IRC
IRC, Plugin desteklidir ve channels.irc altında yapılandırılır.
{
channels: {
irc: {
enabled: true,
dmPolicy: "pairing",
configWrites: true,
nickserv: {
enabled: true,
service: "NickServ",
password: "${IRC_NICKSERV_PASSWORD}",
register: false,
registerEmail: "[email protected]",
},
},
},
}
- Burada kapsanan temel anahtar yolları:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - İsteğe bağlı
channels.irc.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar. - Tam IRC kanal yapılandırması (host/port/TLS/kanallar/izin listeleri/bahsetme denetimi) IRC içinde belgelenmiştir.
Çok hesaplı (tüm kanallar)
Kanal başına birden çok hesabı çalıştırın (her birinin kendi accountId değeriyle):
{
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
accountIdatlandığındadefaultkullanılır (CLI + yönlendirme).- Env token’ları yalnızca varsayılan hesaba uygulanır.
- Temel kanal ayarları, hesap başına geçersiz kılınmadığı sürece tüm hesaplara uygulanır.
- Her hesabı farklı bir agent’a yönlendirmek için
bindings[].match.accountIdkullanın. - Tek hesaplı üst düzey kanal yapılandırmasındayken
openclaw channels add(veya kanal onboarding’i) üzerinden varsayılan olmayan bir hesap eklerseniz, OpenClaw önce hesap kapsamlı üst düzey tek hesap değerlerini kanal hesabı haritasına yükseltir; böylece özgün hesap çalışmaya devam eder. Çoğu kanal bunlarıchannels.<channel>.accounts.defaultiçine taşır; Matrix bunun yerine mevcut eşleşen adlandırılmış/varsayılan hedefi koruyabilir. - Mevcut yalnızca kanal bağlamaları (
accountIdyok) varsayılan hesapla eşleşmeye devam eder; hesap kapsamlı bağlamalar isteğe bağlı kalır. openclaw doctor --fix, hesap kapsamlı üst düzey tek hesap değerlerini o kanal için seçilen yükseltilmiş hesaba taşıyarak karışık şekilleri de onarır. Çoğu kanalaccounts.defaultkullanır; Matrix bunun yerine mevcut eşleşen adlandırılmış/varsayılan hedefi koruyabilir.
Diğer Plugin kanalları
Birçok Plugin kanalı channels.<id> olarak yapılandırılır ve kendilerine ayrılmış kanal sayfalarında belgelenir (örneğin Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat ve Twitch).
Tam kanal dizinine bakın: Kanallar.
Grup sohbeti bahsetme denetimi
Grup iletileri varsayılan olarak bahsetme gerektirir (metadata bahsetmesi veya güvenli regex desenleri). WhatsApp, Telegram, Discord, Google Chat ve iMessage grup sohbetleri için geçerlidir.
Görünür yanıtlar ayrı olarak denetlenir. Grup/kanal odaları varsayılan olarak messages.groupChat.visibleReplies: "message_tool" kullanır: OpenClaw yine de turu işler, ancak normal final yanıtları özel kalır ve görünür oda çıktısı için message(action=send) gerekir. Normal yanıtların odaya geri gönderildiği eski davranışı istediğinizde yalnızca "automatic" olarak ayarlayın. Aynı yalnızca araçla görünür-yanıt davranışını doğrudan sohbetlere de uygulamak için messages.visibleReplies: "message_tool" olarak ayarlayın; Codex harness da bu yalnızca araç davranışını ayarlanmamış doğrudan sohbet varsayılanı olarak kullanır.
Yalnızca araçla görünür yanıtlar, araçları güvenilir biçimde çağıran bir model/runtime gerektirir. Oturum günlüğü didSendViaMessagingTool: false ile asistan metni gösteriyorsa, model mesaj aracını çağırmak yerine özel bir final yanıtı üretmiştir. O kanal için daha güçlü bir araç çağırma modeline geçin veya eski görünür final yanıtlarını geri getirmek için messages.groupChat.visibleReplies: "automatic" olarak ayarlayın.
Mesaj aracı etkin araç ilkesi altında kullanılamıyorsa, OpenClaw yanıtı sessizce bastırmak yerine otomatik görünür yanıtlara geri döner. openclaw doctor bu uyumsuzluk konusunda uyarır.
Gateway, dosya kaydedildikten sonra messages yapılandırmasını hot-reload ile yeniden yükler. Yalnızca dağıtımda dosya izleme veya yapılandırma yeniden yükleme devre dışıysa yeniden başlatın.
Bahsetme türleri:
- Metadata bahsetmeleri: Yerel platform @-bahsetmeleri. WhatsApp kendiyle sohbet modunda yok sayılır.
- Metin desenleri:
agents.list[].groupChat.mentionPatternsiçinde güvenli regex desenleri. Geçersiz desenler ve güvenli olmayan iç içe yinelemeler yok sayılır. - Bahsetme kapısı yalnızca algılama mümkün olduğunda uygulanır (yerel bahsetmeler veya en az bir desen).
{
messages: {
visibleReplies: "automatic", // direct/source sohbetler için küresel varsayılan; Codex harness, ayarlanmamış doğrudan sohbetleri varsayılan olarak message_tool yapar
groupChat: {
historyLimit: 50,
visibleReplies: "message_tool", // varsayılan; eski final yanıtları için "automatic" kullanın
},
},
agents: {
list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
},
}
messages.groupChat.historyLimit küresel varsayılanı ayarlar. Kanallar channels.<channel>.historyLimit (veya hesap başına) ile geçersiz kılabilir. Devre dışı bırakmak için 0 olarak ayarlayın.
messages.visibleReplies küresel source-turn varsayılanıdır; messages.groupChat.visibleReplies grup/kanal source turn'leri için bunu geçersiz kılar. messages.visibleReplies ayarlanmamışsa, bir harness kendi direct/source varsayılanını sağlayabilir; Codex harness varsayılan olarak message_tool kullanır. Kanal izin listeleri ve bahsetme kapısı yine de bir turun işlenip işlenmeyeceğine karar verir.
DM geçmiş sınırları
{
channels: {
telegram: {
dmHistoryLimit: 30,
dms: {
"123456789": { historyLimit: 50 },
},
},
},
}
Çözümleme: DM başına geçersiz kılma → sağlayıcı varsayılanı → sınır yok (tümü saklanır).
Desteklenenler: telegram, whatsapp, discord, slack, signal, imessage, msteams.
Kendiyle sohbet modu
Kendiyle sohbet modunu etkinleştirmek için kendi numaranızı allowFrom içine ekleyin (yerel @-bahsetmeleri yok sayar, yalnızca metin desenlerine yanıt verir):
{
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
agents: {
list: [
{
id: "main",
groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
},
],
},
}
Komutlar (sohbet komutu işleme)
{
commands: {
native: "auto", // desteklendiğinde yerel komutları kaydet
nativeSkills: "auto", // desteklendiğinde yerel skill komutlarını kaydet
text: true, // sohbet mesajlarında /commands ayrıştır
bash: false, // ! kullanımına izin ver (takma ad: /bash)
bashForegroundMs: 2000,
config: false, // /config kullanımına izin ver
mcp: false, // /mcp kullanımına izin ver
plugins: false, // /plugins kullanımına izin ver
debug: false, // /debug kullanımına izin ver
restart: true, // /restart + gateway restart aracına izin ver
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw", // raw | hash
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
},
useAccessGroups: true,
},
}
Komut ayrıntıları
- Bu blok komut yüzeylerini yapılandırır. Geçerli yerleşik + paketlenmiş komut kataloğu için bkz. Slash Commands.
- Bu sayfa tam komut kataloğu değil, bir config-key referansıdır. QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, cihaz eşleme/pair, bellek/dreaming, telefon denetimi/phoneve Talk/voicegibi kanal/Plugin sahipli komutlar kendi kanal/Plugin sayfalarında ve ayrıca Slash Commands içinde belgelenmiştir. - Metin komutları başında
/bulunan bağımsız mesajlar olmalıdır. native: "auto"Discord/Telegram için yerel komutları açar, Slack kapalı kalır.nativeSkills: "auto"Discord/Telegram için yerel skill komutlarını açar, Slack kapalı kalır.- Kanal başına geçersiz kılma:
channels.discord.commands.native(bool veya"auto"). Discord içinfalse, başlangıç sırasında yerel komut kaydını ve temizliği atlar. - Yerel skill kaydını kanal başına
channels.<provider>.commands.nativeSkillsile geçersiz kılın. channels.telegram.customCommandsek Telegram bot menüsü girdileri ekler.bash: true, host shell için! <cmd>etkinleştirir.tools.elevated.enabledve gönderenintools.elevated.allowFrom.<channel>içinde olmasını gerektirir.config: true,/configetkinleştirir (openclaw.jsonokur/yazar). Gatewaychat.sendistemcileri için kalıcı/config set|unsetyazmaları ayrıcaoperator.admingerektirir; salt okunur/config show, normal yazma kapsamlı operator istemcileri için kullanılabilir kalır.mcp: true,mcp.serversaltında OpenClaw tarafından yönetilen MCP sunucu yapılandırması için/mcpetkinleştirir.plugins: true, Plugin keşfi, kurulum ve etkinleştirme/devre dışı bırakma denetimleri için/pluginsetkinleştirir.channels.<provider>.configWrites, kanal başına yapılandırma değişikliklerini kapılar (varsayılan: true).- Çok hesaplı kanallar için
channels.<provider>.accounts.<id>.configWrites, o hesabı hedefleyen yazmaları da kapılar (örneğin/allowlist --config --account <id>veya/config set channels.<provider>.accounts.<id>...). restart: false,/restartve Gateway yeniden başlatma aracı eylemlerini devre dışı bırakır. Varsayılan:true.ownerAllowFrom, yalnızca sahibin kullanabildiği komutlar/araçlar için açık sahip izin listesidir.allowFromöğesinden ayrıdır.ownerDisplay: "hash", sistem isteminde sahip kimliklerini hash'ler. Hashlemeyi denetlemek içinownerDisplaySecretayarlayın.allowFrom, sağlayıcı başınadır. Ayarlandığında tek yetkilendirme kaynağıdır (kanal izin listeleri/eşleme veuseAccessGroupsyok sayılır).useAccessGroups: false,allowFromayarlanmamışken komutların erişim grubu ilkelerini atlamasına izin verir.- Komut dokümanları haritası:
- yerleşik + paketlenmiş katalog: Slash Commands
- kanala özgü komut yüzeyleri: Kanallar
- QQ Bot komutları: QQ Bot
- eşleme komutları: Eşleme
- LINE kart komutu: LINE
- bellek dreaming: Dreaming
İlgili
- Yapılandırma referansı — üst düzey anahtarlar
- Yapılandırma — agents
- Kanallara genel bakış