Ana içeriğe atla
channels.* altındaki kanal başına yapılandırma anahtarları. Slack, Discord, Telegram, WhatsApp, Matrix, iMessage ve diğer paketlenmiş kanal Plugin’leri için DM ve grup erişimini, çoklu hesap kurulumlarını, bahsetme geçitlemesini ve kanal başına anahtarları kapsar. Aracılar, 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 değilse).

DM ve grup erişimi

Tüm kanallar DM ilkelerini ve grup ilkelerini destekler:
DM ilkesiDavranış
pairing (varsayılan)Bilinmeyen göndericiler tek kullanımlık bir eşleştirme kodu alır; sahibin onaylaması gerekir
allowlistYalnızca allowFrom içindeki göndericiler (veya eşleştirilmiş izin deposu)
openTüm gelen DM’lere izin ver (şunu gerektirir: allowFrom: ["*"])
disabledTüm gelen DM’leri yok say
Grup ilkesiDavranış
allowlist (varsayılan)Yalnızca yapılandırılmış izin listesiyle eşleşen gruplar
openGrup izin listelerini atla (bahsetme geçitlemesi yine uygulanır)
disabledTüm grup/oda mesajlarını engelle
channels.defaults.groupPolicy, bir sağlayıcının groupPolicy değeri ayarlı değilse varsayılanı belirler. Eşleştirme kodlarının süresi 1 saat sonra dolar. Bekleyen DM eşleştirme istekleri kanal başına 3 ile sınırlıdır. Bir sağlayıcı bloğu tamamen eksikse (channels.<provider> yoksa), çalışma zamanı grup ilkesi başlangıç uyarısıyla allowlist (başarısızlığa kapalı) değerine geri döner.

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 takma adlarını kabul eder. Kanal eşlemesi, bir oturumun zaten bir model geçersiz kılması olmadığı zaman uygulanır (örneğin /model ile ayarlanmışsa).
{
  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 arasında 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üzeyindeki groupPolicy ayarlı değilse geri dönüş grup ilkesi.
  • channels.defaults.contextVisibility: tüm kanallar için varsayılan ek bağlam görünürlüğü modu. Değerler: all (varsayılan, alıntılanan/ileti dizisi/geçmiş bağlamının tümünü içerir), allowlist (yalnızca izin verilen göndericilerin bağlamını içerir), allowlist_quote (allowlist ile aynı ama açık alıntı/yanıt bağlamını korur). 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 eder.
  • channels.defaults.heartbeat.showAlerts: bozulmuş/hatalı durumları Heartbeat çıktısına dahil eder.
  • channels.defaults.heartbeat.useIndicator: kompakt gösterge tarzı Heartbeat çıktısı oluşturur.

WhatsApp

WhatsApp, gateway’in web kanalı (Baileys Web) üzerinden çalışır. Bağlı bir oturum mevcut olduğunda otomatik başlar.
{
  channels: {
    whatsapp: {
      dmPolicy: "pairing", // pairing | allowlist | open | disabled
      allowFrom: ["+15555550123", "+447700900123"],
      textChunkLimit: 4000,
      chunkMode: "length", // length | newline
      mediaMaxMb: 50,
      sendReadReceipts: true, // mavi tikler (self-chat modunda false)
      groups: {
        "*": { requireMention: true },
      },
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
    },
  },
  web: {
    enabled: true,
    heartbeatSeconds: 60,
    reconnect: {
      initialMs: 2000,
      maxMs: 120000,
      factor: 1.4,
      jitter: 0.2,
      maxAttempts: 0,
    },
  },
}
{
  channels: {
    whatsapp: {
      accounts: {
        default: {},
        personal: {},
        biz: {
          // authDir: "~/.openclaw/credentials/whatsapp/biz",
        },
      },
    },
  },
}
  • Giden komutlar, mevcutsa varsayılan olarak default hesabını; aksi halde yapılandırılmış ilk hesap kimliğini (sıralı) kullanır.
  • İ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 doctor tarafından whatsapp/default içine taşınır.
  • 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 oran sınırlarından kaçınmak için açıkça dahil olun)
      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",
      },
      proxy: "socks5://localhost:9050",
      webhookUrl: "https://example.com/telegram-webhook",
      webhookSecret: "secret",
      webhookPath: "/telegram-webhook",
    },
  },
}
  • Bot belirteci: channels.telegram.botToken veya channels.telegram.tokenFile (yalnızca normal dosya; sembolik bağlantılar reddedilir), varsayılan hesap için geri dönüş olarak TELEGRAM_BOT_TOKEN.
  • İ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.
  • Çoklu hesap kurulumlarında (2+ hesap kimliği), geri dönüş yönlendirmesinden kaçınmak için açık bir varsayılan ayarlayın (channels.telegram.defaultAccount veya channels.telegram.accounts.default); bu eksik veya geçersiz olduğunda openclaw doctor uyarı verir.
  • configWrites: false, Telegram tarafından başlatılan yapılandırma yazımlarını engeller (süper grup kimliği taşımaları, /config set|unset).
  • type: "acp" içeren üst düzey bindings[] girdileri, forum konuları için kalıcı ACP bağlamalarını yapılandırır (match.peer.id içinde kanonik chatId:topic:topicId kullanın). Alan anlamları ACP Aracıları içinde ortaktır.
  • Telegram akış önizlemeleri sendMessage + editMessageText kullanı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: "off", // off | partial | block | progress (progress, Discord'da partial olarak eşlenir)
      maxLinesPerMessage: 17,
      ui: {
        components: {
          accentColor: "#5865F2",
        },
      },
      threadBindings: {
        enabled: true,
        idleHours: 24,
        maxAgeHours: 0,
        spawnSubagentSessions: false, // sessions_spawn({ thread: true }) için isteğe bağlı dahil etme
      },
      voice: {
        enabled: true,
        autoJoin: [
          {
            guildId: "123456789012345678",
            channelId: "234567890123456789",
          },
        ],
        daveEncryption: true,
        decryptionFailureTolerance: 24,
        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,
      },
    },
  },
}
  • Belirteç: channels.discord.token; varsayılan hesap için geri dönüş olarak DISCORD_BOT_TOKEN.
  • Açık bir Discord token sağlayan doğrudan giden çağrılar, çağrı için bu belirteci kullanır; hesap yeniden deneme/ilke ayarları yine de etkin çalışma zamanı anlık görüntüsünde seçilen 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) veya channel:<id> (guild kanalı) kullanın; yalın sayısal kimlikler reddedilir.
  • Guild slug’ları küçük harflidir ve boşluklar - ile değiştirilir; kanal anahtarları slug’a dönüştürülmüş adı kullanır (# yok). Guild kimliklerini tercih edin.
  • Bot tarafından yazılan mesajlar varsayılan olarak yok sayılır. allowBots: true bunları etkinleştirir; yalnızca bottan bahseden bot mesajlarını kabul etmek için allowBots: "mentions" kullanın (kendi mesajları yine filtrelenir).
  • channels.discord.guilds.<id>.ignoreOtherMentions (ve kanal geçersiz kılmaları), başka bir kullanıcı veya rolden bahseden ama bottan bahsetmeyen mesajları düşürür (@everyone/@here hariç).
  • maxLinesPerMessage (varsayılan 17), mesajlar 2000 karakterin altında olsa bile uzun mesajları böler.
  • channels.discord.threadBindings, Discord ileti dizisine bağlı yönlendirmeyi kontrol eder:
    • enabled: ileti dizisine bağlı oturum özellikleri için Discord geçersiz kılması (/focus, /unfocus, /agents, /session idle, /session max-age ve bağlı teslimat/yönlendirme)
    • idleHours: saat cinsinden hareketsizlik nedeniyle otomatik odak kaldırma için Discord geçersiz kılması (0 devre dışı bırakır)
    • maxAgeHours: saat cinsinden katı azami yaş için Discord geçersiz kılması (0 devre dışı bırakır)
    • spawnSubagentSessions: sessions_spawn({ thread: true }) otomatik ileti dizisi oluşturma/bağlama için isteğe bağlı geçiş
  • type: "acp" içeren üst düzey bindings[] girdileri, kanallar ve ileti dizileri için kalıcı ACP bağlamalarını yapılandırır (match.peer.id içinde kanal/ileti dizisi kimliğini kullanın). Alan anlamları ACP Aracıları içinde ortaktır.
  • channels.discord.ui.components.accentColor, Discord components 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 + TTS geçersiz kılmalarını etkinleştirir.
  • channels.discord.voice.daveEncryption ve channels.discord.voice.decryptionFailureTolerance, @discordjs/voice DAVE seçeneklerine geçirilir (varsayılan olarak true ve 24).
  • OpenClaw ayrıca tekrarlanan şifre çözme başarısızlıklarından sonra bir ses oturumundan ayrılıp yeniden katılarak ses alımı kurtarmayı dener.
  • channels.discord.streaming, kanonik akış modu anahtarıdır. Eski streamMode ve boolean streaming değerleri otomatik taşınır.
  • channels.discord.autoPresence, çalışma zamanı kullanılabilirliğini bot varlık durumuna eşler (sağlıklı => online, bozulmuş => idle, tükenmiş => 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’a özgü exec onay teslimatı ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik modda exec onayları, onaylayıcılar approvers veya commands.ownerAllowFrom içinden çözümlenebildiğinde etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Discord kullanıcı kimlikleri. Atlandığında commands.ownerAllowFrom değerine geri döner.
    • agentFilter: isteğe bağlı aracı kimliği izin listesi. Tüm aracılar için onayları iletmek üzere atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı kalıpları (alt dize veya regex).
    • target: onay istemlerinin nereye gönderileceği. "dm" (varsayılan) onaylayıcı DM’lerine gönderir, "channel" kaynak kanala gönderir, "both" her ikisine gönderir. Hedef "channel" içerdiğinde, düğmeler yalnızca çözümlenmiş onaylayıcılar tarafından kullanılabilir.
    • cleanupAfterResolve: true olduğ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 (guilds.<id>.users içindeki tüm mesajlardan).

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 geri dönüşleri: GOOGLE_CHAT_SERVICE_ACCOUNT veya GOOGLE_CHAT_SERVICE_ACCOUNT_FILE.
  • Teslimat hedefleri için spaces/<spaceId> veya users/<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-...",
      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, // mode=partial olduğunda Slack yerel akış API'sini kullan
      },
      mediaMaxMb: 20,
      execApprovals: {
        enabled: "auto", // true | false | "auto"
        approvers: ["U123"],
        agentFilter: ["default"],
        sessionFilter: ["slack:"],
        target: "dm", // dm | channel | both
      },
    },
  },
}
  • Socket modu, hem botToken hem de appToken gerektirir (varsayılan hesap ortam geri dönüşü için SLACK_BOT_TOKEN + SLACK_APP_TOKEN).
  • HTTP modu, botToken artı signingSecret gerektirir (kök düzeyde veya hesap başına).
  • botToken, appToken, signingSecret ve userToken, düz metin dizeleri veya SecretRef nesnelerini kabul eder.
  • Slack hesap anlık görüntüleri, botTokenSource, botTokenStatus, appTokenStatus ve HTTP modunda signingSecretStatus gibi kimlik bilgisi başına 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 yazımları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ı kontrol eder. Eski streamMode, boolean streaming ve nativeStreaming değerleri otomatik taşınır.
  • Teslimat hedefleri için user:<id> (DM) veya channel:<id> kullanın.
Tepki bildirim modları: off, own (varsayılan), all, allowlist (reactionAllowlist içinden). İleti dizisi oturum yalıtımı: thread.historyScope, ileti dizisi başına (varsayılan) veya kanal genelinde paylaşımlıdır. thread.inheritParent, üst kanal dökümünü yeni ileti dizilerine kopyalar.
  • Slack yerel akışı ve Slack asistan tarzı “is typing…” ileti dizisi durumu, bir yanıt ileti dizisi hedefi gerektirir. Üst düzey DM’ler varsayılan olarak ileti dizisi dışıdır; bu yüzden ileti dizisi tarzı önizleme yerine typingReaction veya normal teslimat kullanırlar.
  • typingReaction, bir yanıt çalışırken gelen Slack mesajına geçici bir tepki ekler, sonra tamamlanınca kaldırır. "hourglass_flowing_sand" gibi bir Slack emoji kısa kodu kullanın.
  • channels.slack.execApprovals: Slack’e özgü exec onay teslimatı ve onaylayıcı yetkilendirmesi. Discord ile aynı şema: enabled (true/false/"auto"), approvers (Slack kullanıcı kimlikleri), agentFilter, sessionFilter ve target ("dm", "channel" veya "both").
Eylem grubuVarsayılanNotlar
reactionsetkinTepki ver + tepkileri listele
messagesetkinOku/gönder/düzenle/sil
pinsetkinSabitle/sabiti kaldır/listele
memberInfoetkinÜye bilgisi
emojiListetkinÖzel emoji listesi

Mattermost

Mattermost bir Plugin olarak gelir: openclaw plugins install @openclaw/mattermost.
{
  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, // isteğe bağlı dahil etme
        nativeSkills: true,
        callbackPath: "/api/channels/mattermost/command",
        // Ters proxy/herkese açık dağıtımlar için isteğe bağlı açık URL
        callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
      },
      textChunkLimit: 4000,
      chunkMode: "length",
    },
  },
}
Sohbet modları: oncall (@-mention ile yanıt ver, varsayılan), onmessage (her mesaj), onchar (tetikleyici önekle başlayan mesajlar). Mattermost yerel komutları etkinleştirildiğinde:
  • commands.callbackPath bir yol olmalıdır (örneğin /api/channels/mattermost/command), tam URL değil.
  • commands.callbackUrl, OpenClaw gateway uç noktasına çözülmeli ve Mattermost sunucusundan erişilebilir olmalıdır.
  • Yerel slash geri çağrıları, Mattermost tarafından slash komut kaydı sırasında döndürülen komut başına belirteçlerle kimlik doğrulanır. Kayıt başarısız olursa veya komutlar etkinleştirilmezse, OpenClaw geri çağrıları Unauthorized: invalid command token. ile reddeder.
  • Özel/tailnet/dahili geri çağrı ana makineleri için Mattermost, ServiceSettings.AllowedUntrustedInternalConnections içinde geri çağrı ana makinesinin/alan adının yer almasını isteyebilir. Tam URL değil, ana makine/alan adı değerleri kullanın.
  • channels.mattermost.configWrites: Mattermost tarafından başlatılan yapılandırma yazımlarına izin verir veya engeller.
  • channels.mattermost.requireMention: kanallarda yanıt vermeden önce @mention gerektirir.
  • channels.mattermost.groups.<channelId>.requireMention: kanal başına bahsetme geçitlemesi geçersiz kılması (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", // isteğe bağlı hesap bağlama
      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 bildirim modları: off, own (varsayılan), all, allowlist (reactionAllowlist içinden).
  • channels.signal.account: kanal başlatmayı belirli bir Signal hesap kimliğine sabitler.
  • channels.signal.configWrites: Signal tarafından başlatılan yapılandırma yazımlarına izin verir veya engeller.
  • İ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, önerilen iMessage yoludur (Plugin desteklidir, channels.bluebubbles altında yapılandırılır).
{
  channels: {
    bluebubbles: {
      enabled: true,
      dmPolicy: "pairing",
      // serverUrl, password, webhookPath, grup denetimleri ve gelişmiş eylemler:
      // bkz. /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üzey bindings[] girdileri, BlueBubbles konuşmalarını kalıcı ACP oturumlarına bağlayabilir. match.peer.id içinde bir BlueBubbles handle’ı veya hedef dizesi (chat_id:*, chat_guid:*, chat_identifier:*) kullanın. Paylaşılan alan anlamları: ACP Aracıları.
  • Tam BlueBubbles kanal yapılandırması BlueBubbles içinde belgelenmiştir.

iMessage

OpenClaw, imsg rpc’yi (stdio üzerinden JSON-RPC) başlatır. Daemon veya port gerekmez.
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "imsg",
      dbPath: "~/Library/Messages/chat.db",
      remoteHost: "user@gateway-host",
      dmPolicy: "pairing",
      allowFrom: ["+15555550123", "user@example.com", "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.
  • Messages DB için Full Disk Access gerekir.
  • chat_id:<id> hedeflerini tercih edin. Sohbetleri listelemek için imsg chats --limit 20 kullanın.
  • cliPath, bir SSH sarmalayıcısına işaret edebilir; SCP ek dosyası getirme için remoteHost (host veya user@host) ayarlayın.
  • attachmentRoots ve remoteAttachmentRoots, gelen ek dosya yollarını sınırlar (varsayılan: /Users/*/Library/Messages/Attachments).
  • SCP katı ana makine anahtarı denetimi kullanır; bu nedenle aktarma ana makinesi anahtarının zaten ~/.ssh/known_hosts içinde bulunduğundan emin olun.
  • channels.imessage.configWrites: iMessage tarafından başlatılan yapılandırma yazımlarına izin verir veya engeller.
  • type: "acp" içeren üst düzey bindings[] girdileri, iMessage konuşmalarını kalıcı ACP oturumlarına bağlayabilir. match.peer.id içinde normalize edilmiş bir handle veya açık bir sohbet hedefi (chat_id:*, chat_guid:*, chat_identifier:*) kullanın. Paylaşılan alan anlamları: ACP Aracıları.
#!/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",
        },
      },
    },
  },
}
  • Belirteç kimlik doğrulaması accessToken kullanır; parola kimlik doğrulaması userId + password kullanır.
  • channels.matrix.proxy, Matrix HTTP trafiğini açık bir HTTP(S) proxy üzerinden yönlendirir. Adlandırılmış hesaplar bunu channels.matrix.accounts.<id>.proxy ile geçersiz kılabilir.
  • channels.matrix.network.dangerouslyAllowPrivateNetwork, özel/dahili homeserver’lara izin verir. proxy ve bu ağa katılım ayarı birbirinden bağımsız denetimlerdir.
  • channels.matrix.defaultAccount, çoklu hesap kurulumlarında tercih edilen hesabı seçer.
  • channels.matrix.autoJoin varsayılan olarak off durumundadır; bu nedenle davet edilen odalar ve yeni DM tarzı davetler, autoJoin: "allowlist" ile autoJoinAllowlist veya autoJoin: "always" ayarlanana kadar yok sayılır.
  • channels.matrix.execApprovals: Matrix’e özgü exec onay teslimatı ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik modda exec onayları, onaylayıcılar approvers veya commands.ownerAllowFrom içinden çözümlenebildiğinde etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Matrix kullanıcı kimlikleri (ör. @owner:example.org).
    • agentFilter: isteğe bağlı aracı kimliği izin listesi. Tüm aracılar için onayları iletmek üzere atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı kalıpları (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 gruplanacağını kontrol eder: per-user (varsayılan) yönlendirilen eşe göre paylaşır, per-room ise her DM odasını yalıtır.
  • Matrix durum yoklamaları ve canlı dizin sorguları, çalışma zamanı trafiğiyle aynı proxy ilkesini 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 çekirdek anahtar yolları: channels.msteams, channels.msteams.configWrites.
  • Tam Teams yapılandırması (kimlik bilgileri, Webhook, DM/grup ilkesi, takım/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: "bot@example.com",
      },
    },
  },
}
  • Burada kapsanan çekirdek 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 geçitlemesi) IRC içinde belgelenmiştir.

Çoklu hesap (tüm kanallar)

Kanal başına birden çok hesap çalıştırın (her biri kendi accountId değeriyle):
{
  channels: {
    telegram: {
      accounts: {
        default: {
          name: "Primary bot",
          botToken: "123456:ABC...",
        },
        alerts: {
          name: "Alerts bot",
          botToken: "987654:XYZ...",
        },
      },
    },
  },
}
  • accountId atlandığında default kullanılır (CLI + yönlendirme).
  • Ortam belirteçleri yalnızca default hesabına uygulanır.
  • Temel kanal ayarları, hesap başına geçersiz kılınmadıkça tüm hesaplara uygulanır.
  • Her hesabı farklı bir aracıya yönlendirmek için bindings[].match.accountId kullanın.
  • Varsayılan olmayan bir hesabı openclaw channels add (veya kanal ilk katılımı) ile eklerken hâlâ tek hesaplı üst düzey kanal yapılandırmasındaysanız, OpenClaw önce hesap kapsamlı üst düzey tek hesap değerlerini kanal hesap eşlemine yükseltir; böylece özgün hesap çalışmaya devam eder. Çoğu kanal bunları channels.<channel>.accounts.default içine taşır; Matrix bunun yerine mevcut eşleşen adlandırılmış/varsayılan hedefi koruyabilir.
  • Mevcut yalnızca kanal düzeyindeki bağlamalar (accountId yok) 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 kanal accounts.default kullanı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 dizini için bkz.: Kanallar.

Grup sohbeti bahsetme geçitlemesi

Grup mesajları varsayılan olarak bahsetme gerektirir (üst veri bahsetmesi veya güvenli regex kalıpları). WhatsApp, Telegram, Discord, Google Chat ve iMessage grup sohbetlerine uygulanır. Bahsetme türleri:
  • Üst veri bahsetmeleri: Yerel platform @-bahsetmeleri. WhatsApp self-chat modunda yok sayılır.
  • Metin kalıpları: agents.list[].groupChat.mentionPatterns içindeki güvenli regex kalıpları. Geçersiz kalıplar ve güvenli olmayan iç içe tekrarlar yok sayılır.
  • Bahsetme geçitlemesi yalnızca algılama mümkün olduğunda uygulanır (yerel bahsetmeler veya en az bir kalıp).
{
  messages: {
    groupChat: { historyLimit: 50 },
  },
  agents: {
    list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
  },
}
messages.groupChat.historyLimit, genel varsayılanı ayarlar. Kanallar bunu channels.<channel>.historyLimit ile (veya hesap başına) geçersiz kılabilir. Devre dışı bırakmak için 0 ayarlayın.

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ü tutulur). Desteklenenler: telegram, whatsapp, discord, slack, signal, imessage, msteams.

Self-chat modu

Self-chat modunu etkinleştirmek için kendi numaranızı allowFrom içine ekleyin (yerel @-bahsetmeleri yok sayar, yalnızca metin kalıplarına 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, // ! komutuna izin ver (takma ad: /bash)
    bashForegroundMs: 2000,
    config: false, // /config komutuna izin ver
    mcp: false, // /mcp komutuna izin ver
    plugins: false, // /plugins komutuna izin ver
    debug: false, // /debug komutuna 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,
  },
}
  • Bu blok komut yüzeylerini yapılandırır. Geçerli yerleşik + paketlenmiş komut kataloğu için bkz. Slash Commands.
  • Bu sayfa bir yapılandırma anahtarı başvurusudur, tam komut kataloğu değildir. QQ Bot /bot-ping /bot-help /bot-logs, LINE /card, device-pair /pair, memory /dreaming, phone-control /phone ve Talk /voice gibi kanala/Plugin’e ait komutlar kendi kanal/Plugin sayfalarında ve Slash Commands içinde belgelenmiştir.
  • Metin komutları başında / olan bağımsız mesajlar olmalıdır.
  • native: "auto", Discord/Telegram için yerel komutları açar, Slack’i kapalı bırakır.
  • nativeSkills: "auto", Discord/Telegram için yerel skill komutlarını açar, Slack’i kapalı bırakır.
  • Kanal başına geçersiz kılma: channels.discord.commands.native (bool veya "auto"). false, daha önce kaydedilmiş komutları temizler.
  • Yerel skill kaydını kanal başına channels.<provider>.commands.nativeSkills ile geçersiz kılın.
  • channels.telegram.customCommands, ek Telegram bot menü girdileri ekler.
  • bash: true, ana makine kabuğu için ! <cmd> komutunu etkinleştirir. tools.elevated.enabled ve göndericinin tools.elevated.allowFrom.<channel> içinde bulunmasını gerektirir.
  • config: true, /config komutunu etkinleştirir (openclaw.json okur/yazar). Gateway chat.send istemcileri için kalıcı /config set|unset yazımları ayrıca operator.admin gerektirir; salt okunur /config show normal yazma kapsamlı operatör istemcileri için kullanılabilir kalır.
  • mcp: true, mcp.servers altındaki OpenClaw tarafından yönetilen MCP sunucu yapılandırması için /mcp komutunu etkinleştirir.
  • plugins: true, Plugin keşfi, kurulum ve etkinleştirme/devre dışı bırakma denetimleri için /plugins komutunu etkinleştirir.
  • channels.<provider>.configWrites, kanal başına yapılandırma değişikliklerini geçitler (varsayılan: true).
  • Çoklu hesaplı kanallar için channels.<provider>.accounts.<id>.configWrites da o hesabı hedefleyen yazımları geçitler (örneğin /allowlist --config --account <id> veya /config set channels.<provider>.accounts.<id>...).
  • restart: false, /restart ve gateway restart araç eylemlerini devre dışı bırakır. Varsayılan: true.
  • ownerAllowFrom, yalnızca sahibine özel komutlar/araçlar için açık sahip izin listesidir. allowFrom değerinden ayrıdır.
  • ownerDisplay: "hash", sistem isteminde sahip kimliklerini hashler. Hashlemeyi kontrol etmek için ownerDisplaySecret ayarlayın.
  • allowFrom, sağlayıcı başınadır. Ayarlandığında tek yetkilendirme kaynağı olur (kanal izin listeleri/eşleştirme ve useAccessGroups yok sayılır).
  • useAccessGroups: false, allowFrom ayarlı değilse komutların erişim grubu ilkelerini atlamasına izin verir.
  • Komut belge eşlemesi:

İlgili