Групповые чаты

OpenClaw поддерживает групповые чаты во всех каналах: Telegram, WhatsApp, Discord, Slack, Signal, Matrix, iMessage, MS Teams, Zalo.

Как обрабатывается групповое сообщение

groupPolicy? disabled -> отклонено
groupPolicy? allowlist -> группа в allowlist? нет -> отклонено
requireMention? да -> упомянут? нет -> сохранить для контекста, не отвечать
иначе -> ответить

Три уровня контроля

1. Какие группы разрешены (groups):

{
  channels: {
    telegram: {
      groups: {
        "-1001234567890": { allow: true },  // конкретная группа
        // или "*": { allow: true }          // все группы
      },
    },
  },
}

2. Кто может триггерить бота (groupPolicy + groupAllowFrom):

{
  channels: {
    telegram: {
      groupPolicy: "allowlist",  // open | allowlist | disabled
      groupAllowFrom: ["123456789", "987654321"],
    },
  },
}

3. Требование упоминания (requireMention):

{
  channels: {
    telegram: {
      groups: { "*": { requireMention: true } },
    },
  },
}
DM pairing ≠ group auth

Pairing работает только для DM. Одобрение pairing НЕ даёт доступ к группам.

Для групп нужно явно настраивать groupAllowFrom или groupPolicy: "open".

Если groupAllowFrom не задан — Telegram падает обратно на allowFrom (из конфига, не из pairing store).

Упоминания

Два способа:

  • Нативные@botusername в Telegram, @bot в Discord
  • Текстовые паттерны — настройка в конфиге:
  • {
      agents: {
        list: [{
          id: "main",
          groupChat: {
            mentionPatterns: ["@openclaw", "openclaw"],
            historyLimit: 50,  // сколько сообщений для контекста
          },
        }],
      },
    }
    

    Команды в чате:

  • /activation always — бот отвечает на всё (в сессии)
  • /activation mention — только по упоминанию (в сессии)
  • Сессии

  • Каждая группа = отдельная сессия (agent:::group:)
  • Telegram форум-топики: :topic: — каждый топик = своя сессия
  • Heartbeats пропускаются для групповых сессий
  • Команды (/verbose, /think, /activation) привязаны к сессии группы
  • Context injection

    Непрочитанные сообщения из группы (по умолчанию 50) добавляются в контекст:

    [Chat messages since your last reply - for context]
    Alice: давайте встретимся завтра
    Bob: согласен
    
    [Current message - respond to this]
    Charlie: @openclaw что думаешь?
    

    Каждое сообщение в контексте заканчивается [from: Имя (+ID)].

    Паттерн: DM на хосте, группы в sandbox

    DM использует main-сессию (на хосте), группы — non-main (в sandbox). Один «мозг», две среды исполнения:

    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main",  // группы в sandbox
            scope: "session",  // один контейнер на группу
          },
        },
      },
    }
    

    Per-channel настройки

    Канал groupAllowFrom Примечания
    Telegram числовые ID `telegram:` / `tg:` префиксы допускаются
    WhatsApp E.164 номера `mentionedJids` + regex паттерны
    Discord через `guilds` `channels.discord.guilds..channels`
    Slack через `channels` `channels.slack.channels.#general`
    Matrix `@user:server` `channels.matrix.groups`
    MS Teams email `user@org.com`

    System prompt для группы

    При первом сообщении в группе OpenClaw.injectирует контекст:

    > You are replying inside the WhatsApp group «Название». Group members: Alice (+44…), Bob (+43…). Activation: trigger-only. Address the specific sender noted in the message context.

    Что дальше

  • Telegram — настройка групп в Telegram
  • Google Chat — spaces в Google Chat
  • Troubleshooting каналов — диагностика