Платформы для обмена сообщениями

Discord

Статус: готов к работе в личных сообщениях и каналах гильдии через официальный Discord Gateway.

Быстрая настройка

Вам нужно создать новое приложение с ботом, добавить бота на ваш сервер и подключить его к OpenClaw. Мы рекомендуем добавить бота на ваш собственный приватный сервер. Если у вас его еще нет, сначала создайте его (выберите Create My Own > For me and my friends).

Шаг 1: Создайте приложение и бота Discord

Перейдите в Discord Developer Portal и нажмите New Application. Назовите его, например, "OpenClaw". Нажмите Bot на боковой панели. Установите Username на то, как вы называете своего агента OpenClaw.

Шаг 2: Включите привилегированные интенты

Оставаясь на странице Bot, прокрутите вниз до Privileged Gateway Intents и включите:

  • Message Content Intent (обязательно)
  • Server Members Intent (рекомендуется; требуется для списков разрешенных ролей и сопоставления имени с ID)
  • Presence Intent (опционально; нужно только для обновлений статуса)

Шаг 3: Скопируйте токен вашего бота

Прокрутите обратно вверх на странице Bot и нажмите Reset Token.

ℹ️ Несмотря на название, это генерирует ваш первый токен — ничего не "сбрасывается".

Скопируйте токен и сохраните его. Это ваш Bot Token, и он скоро понадобится.

Шаг 4: Сгенерируйте URL для приглашения и добавьте бота на ваш сервер

Нажмите OAuth2 на боковой панели. Вы сгенерируете URL для приглашения с правильными разрешениями, чтобы добавить бота на ваш сервер. Прокрутите вниз до OAuth2 URL Generator и включите:

  • bot
  • applications.commands

Ниже появится раздел Bot Permissions. Включите:

  • View Channels
  • Send Messages
  • Read Message History
  • Embed Links
  • Attach Files
  • Add Reactions (опционально)

Скопируйте сгенерированный URL внизу, вставьте его в браузер, выберите ваш сервер и нажмите Continue, чтобы подключить. Теперь вы должны увидеть своего бота на сервере Discord.

Шаг 5: Включите режим разработчика и соберите ваши ID

Вернитесь в приложение Discord, вам нужно включить Developer Mode, чтобы можно было копировать внутренние ID.

  1. Нажмите User Settings (значок шестеренки рядом с аватаром) → Advanced → переключите Developer Mode в положение "вкл."
  2. Щелкните правой кнопкой мыши по иконке вашего сервера на боковой панели → Copy Server ID
  3. Щелкните правой кнопкой мыши по своему аватаруCopy User ID

Сохраните ваш Server ID и User ID вместе с Bot Token — все три значения вы отправите OpenClaw на следующем шаге.

Шаг 6: Разрешите личные сообщения от участников сервера

Для работы подключения Discord должен разрешить вашему боту отправлять вам личные сообщения. Щелкните правой кнопкой мыши по иконке вашего сервераPrivacy Settings → переключите Direct Messages в положение "вкл.". Это позволяет участникам сервера (включая ботов) отправлять вам личные сообщения. Оставьте это включенным, если хотите использовать личные сообщения Discord с OpenClaw. Если вы планируете использовать только каналы гильдии, вы можете отключить личные сообщения после подключения.

Шаг 7: Шаг 0: Безопасно установите токен вашего бота (не отправляйте его в чат)

Токен вашего Discord бота — это секрет (как пароль). Установите его на машине, где запущен OpenClaw, прежде чем отправлять сообщения вашему агенту.

openclaw config set channels.discord.token '"YOUR_BOT_TOKEN"' --json
openclaw config set channels.discord.enabled true --json
openclaw gateway

Если OpenClaw уже запущен как фоновая служба, используйте вместо этого openclaw gateway restart.

Шаг 8: Настройте OpenClaw и выполните подключение

Общайтесь с вашим агентом OpenClaw на любом существующем канале (например, Telegram) и скажите ему. Если Discord — ваш первый канал, используйте вместо этого CLI / вкладку config.

“I already set my Discord bot token in config. Please finish Discord setup with User ID <user_id> and Server ID <server_id>.”

Шаг 9: Подтвердите первое подключение через личные сообщения

Дождитесь, пока шлюз запустится, затем напишите вашему боту в личные сообщения Discord. Он ответит с кодом подключения.

Отправьте код подключения вашему агенту на существующем канале:

“Approve this Discord pairing code: <CODE>

Коды подключения истекают через 1 час. Теперь вы должны иметь возможность общаться с вашим агентом в Discord через личные сообщения.

ℹ️ Разрешение токена учитывает аккаунт. Значения токена из конфига имеют приоритет над резервным значением из переменной окружения. DISCORD_BOT_TOKEN используется только для аккаунта по умолчанию.

Рекомендуется: Настройте рабочее пространство гильдии

Как только личные сообщения работают, вы можете настроить ваш сервер Discord как полноценное рабочее пространство, где каждый канал получает свою собственную сессию агента со своим контекстом. Это рекомендуется для приватных серверов, где есть только вы и ваш бот.

Шаг 1: Добавьте ваш сервер в список разрешенных гильдий

Это позволяет вашему агенту отвечать в любом канале на вашем сервере, а не только в личных сообщениях.

“Add my Discord Server ID <server_id> to the guild allowlist”

Шаг 2: Разрешите ответы без упоминания @

По умолчанию ваш агент отвечает в каналах гильдии только когда его @упоминают. Для приватного сервера вы, вероятно, хотите, чтобы он отвечал на каждое сообщение.

“Allow my agent to respond on this server without having to be @mentioned”

Шаг 3: Планируйте использование памяти в каналах гильдии

По умолчанию долговременная память (MEMORY.md) загружается только в сессиях личных сообщений. Каналы гильдии не загружают MEMORY.md автоматически.

“When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from MEMORY.md.”

Теперь создайте несколько каналов на вашем сервере Discord и начните общаться. Ваш агент видит название канала, и каждый канал получает свою изолированную сессию — так что вы можете настроить #coding, #home, #research или что угодно, что подходит вашему рабочему процессу.

Модель выполнения

  • Шлюз владеет подключением к Discord.
  • Маршрутизация ответов детерминирована: входящие сообщения из Discord возвращаются обратно в Discord.
  • По умолчанию (session.dmScope=main) прямые чаты используют основную сессию агента (agent:main:main).
  • Каналы гильдии имеют изолированные ключи сессий (agent:<agentId>:discord:channel:<channelId>).
  • Групповые личные сообщения игнорируются по умолчанию (channels.discord.dm.groupEnabled=false).
  • Нативные слэш-команды выполняются в изолированных командных сессиях (agent:<agentId>:discord:slash:<userId>), при этом все еще передавая CommandTargetSessionKey в маршрутизированную сессию разговора.

Форумные каналы

Форумные и медиа-каналы Discord принимают только сообщения в ветках. OpenClaw поддерживает два способа их создания:

  • Отправьте сообщение в родительский форум (channel:<forumId>), чтобы автоматически создать ветку. Заголовок ветки использует первую непустую строку вашего сообщения.
  • Используйте openclaw message thread create, чтобы создать ветку напрямую. Не передавайте --message-id для форумных каналов.

Пример: отправка в родительский форум для создания ветки

openclaw message send --channel discord --target channel:<forumId> \
  --message "Topic title\nBody of the post"

Пример: явное создание ветки форума

openclaw message thread create --channel discord --target channel:<forumId> \
  --thread-name "Topic title" --message "Body of the post"

Родительские форумы не принимают Discord компоненты. Если вам нужны компоненты, отправляйте в саму ветку (channel:<threadId>).

Интерактивные компоненты

OpenClaw поддерживает контейнеры Discord components v2 для сообщений агента. Используйте инструмент сообщений с полезной нагрузкой components. Результаты взаимодействия маршрутизируются обратно к агенту как обычные входящие сообщения и следуют существующим настройкам Discord replyToMode. Поддерживаемые блоки:

  • text, section, separator, actions, media-gallery, file
  • Ряды действий позволяют до 5 кнопок или одно выпадающее меню
  • Типы выбора: string, user, role, mentionable, channel

По умолчанию компоненты одноразовые. Установите components.reusable=true, чтобы разрешить кнопкам, выпадающим меню и формам использоваться многократно до истечения срока. Чтобы ограничить, кто может нажать кнопку, установите allowedUsers для этой кнопки (ID пользователей Discord, теги или *). При настройке неавторизованные пользователи получают эфемерный отказ. Слэш-команды /model и /models открывают интерактивный выбор модели с выпадающими списками провайдера и модели, а также шагом Submit. Ответ выбора эфемерный, и использовать его может только вызвавший пользователь. Вложения файлов:

  • Блоки file должны указывать на ссылку вложения (attachment://<filename>)
  • Предоставьте вложение через media/path/filePath (один файл); используйте media-gallery для нескольких файлов
  • Используйте filename, чтобы переопределить имя загрузки, когда оно должно совпадать со ссылкой на вложение

Модальные формы:

  • Добавьте components.modal с до 5 полей
  • Типы полей: text, checkbox, radio, select, role-select, user-select
  • OpenClaw автоматически добавляет кнопку-триггер

Пример:

{
  channel: "discord",
  action: "send",
  to: "channel:123456789012345678",
  message: "Optional fallback text",
  components: {
    reusable: true,
    text: "Choose a path",
    blocks: [
      {
        type: "actions",
        buttons: [
          {
            label: "Approve",
            style: "success",
            allowedUsers: ["123456789012345678"],
          },
          { label: "Decline", style: "danger" },
        ],
      },
      {
        type: "actions",
        select: {
          type: "string",
          placeholder: "Pick an option",
          options: [
            { label: "Option A", value: "a" },
            { label: "Option B", value: "b" },
          ],
        },
      },
    ],
    modal: {
      title: "Details",
      triggerLabel: "Open form",
      fields: [
        { type: "text", label: "Requester" },
        {
          type: "select",
          label: "Priority",
          options: [
            { label: "Low", value: "low" },
            { label: "High", value: "high" },
          ],
        },
      ],
    },
  },
}

Контроль доступа и маршрутизация

channels.discord.dmPolicy контролирует доступ к личным сообщениям (устаревшее: channels.discord.dm.policy):

  • pairing (по умолчанию)
  • allowlist
  • open (требует, чтобы channels.discord.allowFrom включал "*"; устаревшее: channels.discord.dm.allowFrom)
  • disabled

Если политика личных сообщений не открыта, неизвестные пользователи блокируются (или получают запрос на подключение в режиме pairing). Приоритетность для нескольких аккаунтов:

  • channels.discord.accounts.default.allowFrom применяется только к аккаунту default.
  • Именованные аккаунты наследуют channels.discord.allowFrom, когда их собственный allowFrom не установлен.
  • Именованные аккаунты не наследуют channels.discord.accounts.default.allowFrom.

Формат цели для доставки в личные сообщения:

  • user:<id>
  • Упоминание <@id>

Голые числовые ID неоднозначны и отклоняются, если не указан явный вид цели user/channel.

Маршрутизация агентов на основе ролей

Используйте bindings[].match.roles, чтобы направлять участников гильдии Discord к разным агентам по ID роли. Привязки на основе ролей принимают только ID ролей и оцениваются после привязок peer или parent-peer и до привязок только для гильдии. Если привязка также устанавливает другие поля соответствия (например, peer + guildId + roles), все настроенные поля должны совпадать.

{
  bindings: [
    {
      agentId: "opus",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
        roles: ["111111111111111111"],
      },
    },
    {
      agentId: "sonnet",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
      },
    },
  ],
}

Настройка в Developer Portal

Нативные команды и авторизация команд

  • commands.native по умолчанию "auto" и включен для Discord.
  • Переопределение для канала: channels.discord.commands.native.
  • commands.native=false явно очищает ранее зарегистрированные нативные команды Discord.
  • Авторизация нативных команд использует те же списки разрешений/политики Discord, что и обычная обработка сообщений.
  • Команды все еще могут быть видны в интерфейсе Discord для пользователей, которые не авторизованы; выполнение все равно применяет авторизацию OpenClaw и возвращает "not authorized".

См. Слэш-команды для каталога команд и поведения. Настройки слэш-команд по умолчанию:

  • ephemeral: true

Детали функций

Безопасность и эксплуатация

  • Относитесь к токенам бота как к секретам (DISCORD_BOT_TOKEN предпочтителен в контролируемых средах).
  • Предоставляйте наименьшие привилегии Discord.
  • Если развертывание команд/состояние устарело, перезапустите шлюз и проверьте снова с помощью openclaw channels status --probe.

Связанное