Перейти до основного вмісту

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

OpenClaw обробляє групові чати узгоджено на всіх поверхнях: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.

Вступ для початківців (2 хвилини)

OpenClaw “живе” у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає. Якщо ви є в групі, OpenClaw може бачити цю групу й відповідати в ній. Типова поведінка:
  • Групи обмежені (groupPolicy: "allowlist").
  • Відповіді потребують згадки, якщо ви явно не вимкнули перевірку згадки.
  • Звичайні фінальні відповіді в групах/каналах за замовчуванням приватні. Видимий вивід у кімнату використовує інструмент message.
Інакше кажучи: дозволені відправники можуть запускати OpenClaw, згадавши його.
Коротко
  • Доступ до DM керується *.allowFrom.
  • Доступ до груп керується *.groupPolicy + списками дозволів (*.groups, *.groupAllowFrom).
  • Запуск відповіді керується перевіркою згадки (requireMention, /activation).
Швидкий потік (що відбувається з груповим повідомленням):
groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply

Видимі відповіді

Для групових/канальних кімнат OpenClaw за замовчуванням використовує messages.groupChat.visibleReplies: "message_tool". openclaw doctor --fix записує це типове значення в конфігурації налаштованих каналів, де його пропущено. Це означає, що агент усе ще обробляє хід і може оновлювати стан пам’яті/сесії, але його звичайна фінальна відповідь не публікується автоматично назад у кімнату. Щоб говорити видимо, агент використовує message(action=send). Це типове значення залежить від моделі/середовища виконання, які надійно викликають інструменти. Якщо журнали показують текст асистента, але didSendViaMessagingTool: false, модель відповіла приватно замість того, щоб викликати інструмент повідомлень. Це не збій надсилання Discord/Slack/Telegram. Використовуйте модель із надійними викликами інструментів для групових/канальних сесій або встановіть messages.groupChat.visibleReplies: "automatic", щоб відновити застарілі видимі фінальні відповіді. Якщо інструмент повідомлень недоступний за активною політикою інструментів, OpenClaw повертається до автоматичних видимих відповідей замість того, щоб мовчки пригнічувати відповідь. openclaw doctor попереджає про цю невідповідність. Для прямих чатів і будь-якого іншого джерела ходу використовуйте messages.visibleReplies: "message_tool", щоб застосувати таку саму поведінку видимих відповідей лише через інструмент глобально. Середовища також можуть вибрати це як своє типове значення, якщо воно не задане; середовище Codex робить це для прямих чатів у режимі Codex. messages.groupChat.visibleReplies залишається конкретнішим перевизначенням для групових/канальних кімнат. Це замінює старий шаблон примусового налаштування моделі відповідати NO_REPLY для більшості ходів у режимі спостереження. У режимі лише через інструмент відсутність видимої дії просто означає, що інструмент повідомлень не викликається. Індикатори набору тексту все ще надсилаються, поки агент працює в режимі лише через інструмент. Типовий режим набору тексту для груп підвищується з “message” до “instant” для цих ходів, бо звичайного тексту повідомлення асистента може взагалі не бути до того, як агент вирішить, чи викликати інструмент повідомлень. Явна конфігурація режиму набору тексту все одно має пріоритет. Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат:
{
  messages: {
    groupChat: {
      visibleReplies: "automatic",
    },
  },
}
Gateway гаряче перезавантажує конфігурацію messages після збереження файла. Перезапускайте лише тоді, коли спостереження за файлами або перезавантаження конфігурації вимкнене в розгортанні. Щоб вимагати, аби видимий вивід для кожного вихідного чату проходив через інструмент повідомлень:
{
  messages: {
    visibleReplies: "message_tool",
  },
}
Нативні слеш-команди (Discord, Telegram та інші поверхні з підтримкою нативних команд) обходять visibleReplies: "message_tool" і завжди відповідають видимо, щоб канал-рідний інтерфейс команд отримував очікувану відповідь. Це застосовується лише до перевірених нативних ходів команд; набрані текстом команди /... і звичайні ходи чату й надалі дотримуються налаштованого типового значення для груп.

Видимість контексту та списки дозволів

У безпеці груп беруть участь два різні елементи керування:
  • Авторизація запуску: хто може запускати агента (groupPolicy, groups, groupAllowFrom, списки дозволів для конкретних каналів).
  • Видимість контексту: який додатковий контекст вставляється в модель (текст відповіді, цитати, історія треду, метадані пересилання).
За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й зберігає контекст переважно таким, яким його отримано. Це означає, що списки дозволів передусім визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого чи історичного фрагмента.
  • Деякі канали вже застосовують фільтрацію на основі відправника для додаткового контексту в конкретних шляхах (наприклад, заповнення тредів Slack, пошуки відповідей/тредів Matrix).
  • Інші канали все ще передають контекст цитат/відповідей/пересилань таким, яким його отримано.
  • contextVisibility: "all" (типово) зберігає поточну поведінку «як отримано».
  • contextVisibility: "allowlist" фільтрує додатковий контекст до дозволених відправників.
  • contextVisibility: "allowlist_quote" — це allowlist плюс один явний виняток для цитати/відповіді.
Поки цю модель посилення захисту не впроваджено узгоджено в усіх каналах, очікуйте відмінності між поверхнями.
Потік групових повідомлень Якщо ви хочете…
МетаЩо встановити
Дозволити всі групи, але відповідати лише на @згадкиgroups: { "*": { requireMention: true } }
Вимкнути всі групові відповідіgroupPolicy: "disabled"
Лише конкретні групиgroups: { "<group-id>": { ... } } (без ключа "*")
Лише ви можете запускати в групахgroupPolicy: "allowlist", groupAllowFrom: ["+1555..."]
Повторно використовувати один набір довірених відправників у різних каналахgroupAllowFrom: ["accessGroup:operators"]
Про багаторазові списки дозволених відправників дивіться Групи доступу.

Ключі сесій

  • Групові сесії використовують ключі сесій agent:<agentId>:<channel>:group:<id> (кімнати/канали використовують agent:<agentId>:<channel>:channel:<id>).
  • Теми форуму Telegram додають :topic:<threadId> до ідентифікатора групи, щоб кожна тема мала власну сесію.
  • Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо налаштовано).
  • Heartbeat пропускаються для групових сесій.

Шаблон: особисті DM + публічні групи (один агент)

Так — це добре працює, якщо ваш “особистий” трафік — це DM, а ваш “публічний” трафік — це групи. Чому: у режимі одного агента DM зазвичай потрапляють в основний ключ сесії (agent:main:main), тоді як групи завжди використовують неосновні ключі сесій (agent:main:<channel>:group:<id>). Якщо ви вмикаєте ізоляцію з mode: "non-main", ці групові сесії запускаються в налаштованому бекенді пісочниці, тоді як ваша основна DM-сесія залишається на хості. Docker є типовим бекендом, якщо ви не вибрали інший. Це дає вам один “мозок” агента (спільний робочий простір + пам’ять), але два режими виконання:
  • DM: повні інструменти (хост)
  • Групи: пісочниця + обмежені інструменти
Якщо вам потрібні справді окремі робочі простори/персони (“особисте” і “публічне” ніколи не мають змішуватися), використовуйте другого агента + прив’язки. Дивіться Маршрутизація кількох агентів.
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // groups/channels are non-main -> sandboxed
        scope: "session", // strongest isolation (one container per group/channel)
        workspaceAccess: "none",
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        // If allow is non-empty, everything else is blocked (deny still wins).
        allow: ["group:messaging", "group:sessions"],
        deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
      },
    },
  },
}
Пов’язане:

Відображувані мітки

  • Мітки UI використовують displayName, коли він доступний, у форматі <channel>:<token>.
  • #room зарезервовано для кімнат/каналів; групові чати використовують g-<slug> (нижній регістр, пробіли -> -, зберігати #@+._-).

Політика груп

Керуйте тим, як обробляються групові повідомлення/повідомлення кімнат для кожного каналу:
{
  channels: {
    whatsapp: {
      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
      groupAllowFrom: ["+15551234567"],
    },
    telegram: {
      groupPolicy: "disabled",
      groupAllowFrom: ["123456789"], // numeric Telegram user id (wizard can resolve @username)
    },
    signal: {
      groupPolicy: "disabled",
      groupAllowFrom: ["+15551234567"],
    },
    imessage: {
      groupPolicy: "disabled",
      groupAllowFrom: ["chat_id:123"],
    },
    msteams: {
      groupPolicy: "disabled",
      groupAllowFrom: ["user@org.com"],
    },
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        GUILD_ID: { channels: { help: { allow: true } } },
      },
    },
    slack: {
      groupPolicy: "allowlist",
      channels: { "#general": { allow: true } },
    },
    matrix: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["@owner:example.org"],
      groups: {
        "!roomId:example.org": { enabled: true },
        "#alias:example.org": { enabled: true },
      },
    },
  },
}
ПолітикаПоведінка
"open"Групи обходять списки дозволів; перевірка згадки все одно застосовується.
"disabled"Повністю блокувати всі групові повідомлення.
"allowlist"Дозволяти лише групи/кімнати, які відповідають налаштованому списку дозволів.
  • groupPolicy відокремлено від фільтрації за згадками (яка потребує @mentions).
  • WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте groupAllowFrom (резервний варіант: явний allowFrom).
  • Signal: groupAllowFrom може збігатися або з вхідним ідентифікатором групи Signal, або з телефоном/UUID відправника.
  • Схвалення прив’язування DM (записи сховища *-allowFrom) застосовуються лише до доступу DM; авторизація відправника в групі залишається явно заданою через списки дозволених груп.
  • Discord: список дозволених використовує channels.discord.guilds.<id>.channels.
  • Slack: список дозволених використовує channels.slack.channels.
  • Matrix: список дозволених використовує channels.matrix.groups. Надавайте перевагу ідентифікаторам або псевдонімам кімнат; пошук назв приєднаних кімнат виконується за найкращою спробою, а нерозпізнані назви ігноруються під час виконання. Використовуйте channels.matrix.groupAllowFrom, щоб обмежити відправників; також підтримуються покімнатні списки дозволених users.
  • Групові DM керуються окремо (channels.discord.dm.*, channels.slack.dm.*).
  • Список дозволених Telegram може збігатися з ідентифікаторами користувачів ("123456789", "telegram:123456789", "tg:123456789") або іменами користувачів ("@alice" чи "alice"); префікси не чутливі до регістру.
  • Типове значення — groupPolicy: "allowlist"; якщо ваш список дозволених груп порожній, групові повідомлення блокуються.
  • Безпека під час виконання: коли блок провайдера повністю відсутній (channels.<provider> відсутній), політика груп повертається до режиму із закриттям у разі помилки (зазвичай allowlist) замість успадкування channels.defaults.groupPolicy.
Коротка ментальна модель (порядок оцінювання для групових повідомлень):
1

groupPolicy

groupPolicy (open/disabled/allowlist).
2

Списки дозволених груп

Списки дозволених груп (*.groups, *.groupAllowFrom, список дозволених для конкретного каналу).
3

Фільтрація за згадками

Фільтрація за згадками (requireMention, /activation).

Фільтрація за згадками (типово)

Групові повідомлення потребують згадки, якщо це не перевизначено для групи. Типові значення зберігаються для кожної підсистеми в *.groups."*". Відповідь на повідомлення бота рахується як неявна згадка, коли канал підтримує метадані відповіді. Цитування повідомлення бота також може рахуватися як неявна згадка в каналах, які надають метадані цитати. Поточні вбудовані випадки включають Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
        "123@g.us": { requireMention: false },
      },
    },
    telegram: {
      groups: {
        "*": { requireMention: true },
        "123456789": { requireMention: false },
      },
    },
    imessage: {
      groups: {
        "*": { requireMention: true },
        "123": { requireMention: false },
      },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
          historyLimit: 50,
        },
      },
    ],
  },
}
  • mentionPatterns — це безпечні regex-шаблони без чутливості до регістру; недійсні шаблони та небезпечні форми вкладених повторень ігноруються.
  • Поверхні, які надають явні згадки, усе одно проходять; шаблони є резервним варіантом.
  • Перевизначення для агента: agents.list[].groupChat.mentionPatterns (корисно, коли кілька агентів спільно використовують групу).
  • Фільтрація за згадками застосовується лише тоді, коли можливе виявлення згадок (налаштовані нативні згадки або mentionPatterns).
  • Додавання групи чи відправника до списку дозволених не вимикає фільтрацію за згадками; встановіть для цієї групи requireMention у false, коли всі повідомлення мають запускати обробку.
  • Контекст підказки групового чату передає розв’язану інструкцію тихої відповіді в кожному ході; файли робочого простору не повинні дублювати механіку NO_REPLY.
  • Групи, у яких дозволені тихі відповіді, трактують чисті порожні або лише reasoning-ходи моделі як тихі, еквівалентні NO_REPLY. Прямі чати роблять те саме лише тоді, коли прямі тихі відповіді явно дозволені; інакше порожні відповіді залишаються невдалими ходами агента.
  • Типові значення Discord зберігаються в channels.discord.guilds."*" (можна перевизначити для гільдії/каналу).
  • Контекст історії груп однаково обгортається в усіх каналах. Групи з фільтрацією за згадками зберігають очікувані пропущені повідомлення; групи, що завжди активні, також можуть зберігати нещодавні оброблені повідомлення кімнати, коли канал це підтримує. Використовуйте messages.groupChat.historyLimit для глобального типового значення та channels.<channel>.historyLimit (або channels.<channel>.accounts.*.historyLimit) для перевизначень. Встановіть 0, щоб вимкнути.

Обмеження інструментів для груп/каналів (необов’язково)

Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні всередині конкретної групи/кімнати/каналу.
  • tools: дозволити/заборонити інструменти для всієї групи.
  • toolsBySender: перевизначення для окремих відправників у межах групи. Використовуйте явні префікси ключів: channel:<channelId>:<senderId>, id:<senderId>, e164:<phone>, username:<handle>, name:<displayName> і шаблон "*". Ідентифікатори каналів використовують канонічні ідентифікатори каналів OpenClaw; псевдоніми на кшталт teams нормалізуються до msteams. Застарілі ключі без префікса все ще приймаються та зіставляються лише як id:.
Порядок розв’язання (перемагає найконкретніше):
1

Group toolsBySender

Збіг toolsBySender групи/каналу.
2

Інструменти групи

tools групи/каналу.
3

Default toolsBySender

Збіг типового ("*") toolsBySender.
4

Типові інструменти

Типові ("*") tools.
Приклад (Telegram):
{
  channels: {
    telegram: {
      groups: {
        "*": { tools: { deny: ["exec"] } },
        "-1001234567890": {
          tools: { deny: ["exec", "read", "write"] },
          toolsBySender: {
            "id:123456789": { alsoAllow: ["exec"] },
          },
        },
      },
    },
  },
}
Обмеження інструментів для груп/каналів застосовуються додатково до глобальної політики інструментів/політики інструментів агента (заборона все одно перемагає). Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord guilds.*.channels.*, Slack channels.*, Microsoft Teams teams.*.channels.*).

Списки дозволених груп

Коли налаштовано channels.whatsapp.groups, channels.telegram.groups або channels.imessage.groups, ключі діють як список дозволених груп. Використовуйте "*", щоб дозволити всі групи й водночас задати типову поведінку згадок.
Поширене непорозуміння: схвалення прив’язування DM — це не те саме, що авторизація групи. Для каналів, які підтримують прив’язування DM, сховище прив’язування розблоковує лише DM. Групові команди все ще потребують явної авторизації відправника групи зі списків дозволених у конфігурації, таких як groupAllowFrom, або задокументованого резервного варіанта конфігурації для цього каналу.
Поширені наміри (скопіюйте/вставте):
{
  channels: { whatsapp: { groupPolicy: "disabled" } },
}

Активація (лише власник)

Власники груп можуть перемикати активацію для окремої групи:
  • /activation mention
  • /activation always
Власник визначається за channels.whatsapp.allowFrom (або за власним E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують /activation.

Поля контексту

Вхідні групові корисні навантаження задають:
  • ChatType=group
  • GroupSubject (якщо відомо)
  • GroupMembers (якщо відомо)
  • WasMentioned (результат фільтрації за згадками)
  • Теми форуму Telegram також включають MessageThreadId і IsForum.
Системна підказка агента включає вступ про групу на першому ході нової групової сесії. Вона нагадує моделі відповідати як людина, уникати Markdown-таблиць, мінімізувати порожні рядки й дотримуватися звичайних інтервалів чату, а також не вводити буквальні послідовності \n. Назви груп і мітки учасників, отримані з каналів, відображаються як огороджені недовірені метадані, а не як вбудовані системні інструкції.

Особливості iMessage

  • Надавайте перевагу chat_id:<id> під час маршрутизації або додавання до списку дозволених.
  • Перелік чатів: imsg chats --limit 20.
  • Групові відповіді завжди повертаються до того самого chat_id.

Системні підказки WhatsApp

Див. WhatsApp для канонічних правил системних підказок WhatsApp, включно з розв’язанням групових і прямих підказок, поведінкою шаблона та семантикою перевизначення облікового запису.

Особливості WhatsApp

Див. Групові повідомлення для поведінки лише WhatsApp (вставлення історії, подробиці обробки згадок).

Пов’язане