Discord (Bot API)
Статус: готовий для приватних повідомлень і каналів сервера через офіційний шлюз Discord.Підключення
Слеш-команди
Усунення проблем із каналом
Швидке налаштування
Вам потрібно створити новий застосунок із ботом, додати бота на свій сервер і підключити його до OpenClaw. Ми рекомендуємо додати бота на власний приватний сервер. Якщо у вас його ще немає, спочатку створіть сервер (виберіть Create My Own > For me and my friends).Створіть застосунок Discord і бота
Увімкніть привілейовані intents
- Message Content Intent (обов’язково)
- Server Members Intent (рекомендовано; потрібно для allowlist ролей і зіставлення імен з ID)
- Presence Intent (необов’язково; потрібне лише для оновлень присутності)
Скопіюйте токен бота
Згенеруйте URL-запрошення і додайте бота на свій сервер
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (необов’язково)
Увімкніть Developer Mode і зберіть свої ID
- Натисніть User Settings (іконка шестерні поруч із вашим аватаром) → Advanced → увімкніть Developer Mode
- Натисніть правою кнопкою миші на іконці сервера на бічній панелі → Copy Server ID
- Натисніть правою кнопкою миші на своєму аватарі → Copy User ID
Дозвольте DM від учасників сервера
Безпечно задайте токен бота (не надсилайте його в чат)
openclaw gateway run.Налаштуйте OpenClaw і виконайте підключення
- Запитайте свого агента
- CLI / config
“Я вже задав токен Discord бота в конфігурації. Будь ласка, заверши налаштування Discord з User ID<user_id>і Server ID<server_id>.”
Схваліть перше підключення через DM
- Запитайте свого агента
- CLI
“Схвали цей код підключення Discord: <CODE>”
DISCORD_BOT_TOKEN використовується лише для облікового запису за замовчуванням.
Для розширених вихідних викликів (дії message tool/channel) явний token для виклику використовується саме для цього виклику. Це стосується дій надсилання та дій у стилі читання/перевірки (наприклад read/search/fetch/thread/pins/permissions). Політика облікового запису й налаштування повторних спроб як і раніше беруться з вибраного облікового запису в активному знімку runtime.Рекомендовано: налаштуйте простір роботи сервера
Коли DM уже працюють, ви можете налаштувати свій Discord-сервер як повноцінний простір роботи, де кожен канал отримує власну сесію агента з власним контекстом. Це рекомендовано для приватних серверів, де є лише ви та ваш бот.Додайте свій сервер до allowlist серверів
- Запитайте свого агента
- Конфігурація
“Додай мій Discord Server ID <server_id> до allowlist серверів”
Дозвольте відповіді без @mention
- Запитайте свого агента
- Конфігурація
“Дозволь моєму агенту відповідати на цьому сервері без обов’язкової @mention”
Продумайте пам’ять у каналах сервера
- Запитайте свого агента
- Вручну
“Коли я ставлю запитання в каналах Discord, використовуй memory_search або memory_get, якщо тобі потрібен довготривалий контекст із MEMORY.md.”
#coding, #home, #research або будь-що, що відповідає вашому процесу роботи.
Модель runtime
- Підключенням до Discord керує шлюз.
- Маршрутизація відповідей детермінована: вхідні повідомлення Discord отримують відповіді назад у Discord.
- За замовчуванням (
session.dmScope=main) прямі чати використовують спільну основну сесію агента (agent:main:main). - Канали сервера мають ізольовані ключі сесій (
agent:<agentId>:discord:channel:<channelId>). - Групові DM ігноруються за замовчуванням (
channels.discord.dm.groupEnabled=false). - Власні слеш-команди запускаються в ізольованих командних сесіях (
agent:<agentId>:discord:slash:<userId>), водночас несучиCommandTargetSessionKeyдо спрямованої сесії розмови.
Канали форуму
Discord forum і media channels приймають лише публікації у тредах. OpenClaw підтримує два способи їх створення:- Надішліть повідомлення до батьківського форуму (
channel:<forumId>), щоб автоматично створити тред. Заголовок треду використовує перший непорожній рядок вашого повідомлення. - Використайте
openclaw message thread create, щоб створити тред безпосередньо. Не передавайте--message-idдля каналів форуму.
channel:<threadId>).
Інтерактивні компоненти
OpenClaw підтримує Discord components v2 containers для повідомлень агента. Використовуйте message tool з payloadcomponents. Результати взаємодії спрямовуються назад до агента як звичайні вхідні повідомлення та дотримуються наявних налаштувань 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 автоматично додає кнопку запуску
Керування доступом і маршрутизація
- Політика DM
- Політика сервера
- Згадки і групові DM
channels.discord.dmPolicy керує доступом до DM (застаріле: channels.discord.dm.policy):pairing(за замовчуванням)allowlistopen(потребує, щоб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>
Маршрутизація агентів за ролями
Використовуйтеbindings[].match.roles, щоб спрямовувати учасників Discord-сервера до різних агентів за ID ролі. Прив’язки за ролями приймають лише ID ролей і обчислюються після прив’язок peer або parent-peer та перед прив’язками лише за сервером. Якщо прив’язка також задає інші поля зіставлення (наприклад, peer + guildId + roles), мають збігатися всі налаштовані поля.
Налаштування Developer Portal
Створення застосунку і бота
Створення застосунку і бота
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- Скопіюйте токен бота
Привілейовані intents
Привілейовані intents
- Message Content Intent
- Server Members Intent (рекомендовано)
setPresence) не потребує ввімкнення оновлень присутності для учасників.OAuth scopes і базові дозволи
OAuth scopes і базові дозволи
- scopes:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (необов’язково)
Administrator, якщо це не потрібно явно.Копіювання ID
Копіювання ID
- ID сервера
- ID каналу
- ID користувача
Власні команди і авторизація команд
commands.nativeза замовчуванням має значення"auto"і ввімкнене для Discord.- Перевизначення для каналу:
channels.discord.commands.native. commands.native=falseявно очищає раніше зареєстровані власні команди Discord.- Авторизація власних команд використовує ті самі allowlist/політики Discord, що й звичайна обробка повідомлень.
- Команди все ще можуть бути видимі в UI Discord для користувачів, які не мають доступу; виконання однаково перевіряє авторизацію OpenClaw і повертає “not authorized”.
ephemeral: true
Деталі функцій
Теги відповіді і власні відповіді
Теги відповіді і власні відповіді
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(за замовчуванням)firstallbatched
off вимикає неявне розгалуження відповідей. Явні теги [[reply_to_*]] все одно враховуються.
first завжди прикріплює неявне власне посилання на відповідь до першого вихідного повідомлення Discord у поточному ході.
batched прикріплює неявне власне посилання Discord на відповідь лише тоді, коли
вхідний хід був відкладеним пакетом із кількох повідомлень. Це зручно,
коли власні відповіді потрібні переважно для неоднозначних чатів із частими серіями повідомлень, а не для кожного
окремого ходу з одним повідомленням.ID повідомлень додаються до контексту/історії, щоб агенти могли націлюватися на конкретні повідомлення.Попередній перегляд потоку в реальному часі
Попередній перегляд потоку в реальному часі
channels.discord.streamingкерує потоковим попереднім переглядом (off|partial|block|progress, за замовчуванням:off).- За замовчуванням лишається
off, бо редагування попереднього перегляду в Discord може швидко впиратися в обмеження частоти, особливо коли кілька ботів або шлюзів використовують той самий обліковий запис чи трафік сервера. progressприймається для узгодженості між каналами та в Discord зіставляється зpartial.channels.discord.streamMode— це застарілий псевдонім, який мігрується автоматично.partialредагує одне повідомлення попереднього перегляду в міру надходження токенів.blockвидає фрагменти розміру чернетки (розмір і точки розриву налаштовуються черезdraftChunk).
block (обмежуються channels.discord.textChunkLimit):Історія, контекст і поведінка тредів
Історія, контекст і поведінка тредів
channels.discord.historyLimitза замовчуванням20- резервне значення:
messages.groupChat.historyLimit 0вимикає
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord-треди спрямовуються як сесії каналів
- метадані батьківського треду можуть використовуватися для зв’язку з батьківською сесією
- конфігурація треду успадковує конфігурацію батьківського каналу, якщо немає запису, специфічного для треду
Сесії, прив’язані до тредів, для субагентів
Сесії, прив’язані до тредів, для субагентів
/focus <target>прив’язує поточний/новий тред до цілі субагента/сесії/unfocusприбирає поточну прив’язку треду/agentsпоказує активні запуски і стан прив’язки/session idle <duration|off>переглядає/оновлює автоматичне зняття фокуса через неактивність для сфокусованих прив’язок/session max-age <duration|off>переглядає/оновлює жорсткий максимальний вік для сфокусованих прив’язок
session.threadBindings.*задає глобальні значення за замовчуванням.channels.discord.threadBindings.*перевизначає поведінку Discord.spawnSubagentSessionsмає бути true, щоб автоматично створювати/прив’язувати треди дляsessions_spawn({ thread: true }).spawnAcpSessionsмає бути true, щоб автоматично створювати/прив’язувати треди для ACP (/acp spawn ... --thread ...абоsessions_spawn({ runtime: "acp", thread: true })).- Якщо прив’язки тредів вимкнено для облікового запису,
/focusі пов’язані операції прив’язки тредів недоступні.
Постійні ACP-прив’язки каналів
Постійні ACP-прив’язки каналів
bindings[]ізtype: "acp"іmatch.channel: "discord"
/acp spawn codex --bind hereприв’язує поточний канал або тред Discord на місці та зберігає маршрутизацію майбутніх повідомлень до тієї самої ACP-сесії.- Це все ще може означати “запустити нову ACP-сесію Codex”, але саме по собі не створює новий тред Discord. Наявний канал залишається поверхнею чату.
- Codex усе одно може працювати у власному
cwdабо робочому просторі backend на диску. Цей робочий простір є станом runtime, а не тредом Discord. - Повідомлення в треді можуть успадковувати ACP-прив’язку батьківського каналу.
- У прив’язаному каналі або треді
/newі/resetскидають ту саму ACP-сесію на місці. - Тимчасові прив’язки тредів як і раніше працюють і можуть перевизначати визначення цілі, поки активні.
spawnAcpSessionsпотрібне лише тоді, коли OpenClaw має створити/прив’язати дочірній тред через--thread auto|here. Воно не потрібне для/acp spawn ... --bind hereу поточному каналі.
Сповіщення про реакції
Сповіщення про реакції
offown(за замовчуванням)allallowlist(використовуєguilds.<id>.users)
Реакції-підтвердження
Реакції-підтвердження
ackReaction надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.Порядок визначення:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- резервне emoji ідентичності агента (
agents.list[].identity.emoji, інакше ”👀”)
- Discord приймає unicode emoji або назви кастомних emoji.
- Використовуйте
"", щоб вимкнути реакцію для каналу або облікового запису.
Запис конфігурації
Запис конфігурації
/config set|unset (коли функції команд увімкнено).Вимкнути:Проксі шлюзу
Проксі шлюзу
channels.discord.proxy.Підтримка PluralKit
Підтримка PluralKit
- allowlist можуть використовувати
pk:<memberId> - відображувані імена учасників зіставляються за name/slug лише коли
channels.discord.dangerouslyAllowNameMatching: true - пошук використовує ID початкового повідомлення й обмежується часовим вікном
- якщо пошук не вдається, проксовані повідомлення вважаються повідомленнями бота й відкидаються, якщо тільки не
allowBots=true
Конфігурація присутності
Конфігурація присутності
- 0: Playing
- 1: Streaming (потрібен
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (використовує текст активності як стан статусу; emoji необов’язкове)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(підтримує заповнювач{reason})
Погодження в Discord
Погодження в Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(необов’язково; за можливості резервно використовуєтьсяcommands.ownerAllowFrom)channels.discord.execApprovals.target(dm|channel|both, за замовчуванням:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled не задано або має значення "auto" і можна визначити принаймні одного затверджувача — або з execApprovals.approvers, або з commands.ownerAllowFrom. Discord не визначає затверджувачів виконання з allowFrom каналу, застарілого dm.allowFrom чи defaultTo прямих повідомлень. Установіть enabled: false, щоб явно вимкнути Discord як власний клієнт погоджень.Коли target має значення channel або both, запит на погодження видно в каналі. Лише визначені затверджувачі можуть використовувати кнопки; інші користувачі отримують ефемерну відмову. Запити на погодження містять текст команди, тому вмикайте доставку в канал лише в довірених каналах. Якщо ID каналу неможливо вивести з ключа сесії, OpenClaw повертається до доставки через DM.Discord також відображає спільні кнопки погодження, що використовуються іншими чат-каналами. Власний адаптер Discord головно додає маршрутизацію погоджень затверджувачам у DM і fanout у канал.
Коли ці кнопки присутні, вони є основним UX для погодження; OpenClaw
повинен включати ручну команду /approve лише тоді, коли результат інструмента каже,
що погодження в чаті недоступні або ручне погодження — єдиний шлях.Авторизація шлюзу для цього обробника використовує той самий спільний контракт визначення облікових даних, що й інші клієнти Gateway:- локальна авторизація env-first (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD, даліgateway.auth.*) - у локальному режимі
gateway.remote.*може використовуватися як резервний варіант лише колиgateway.auth.*не задано; налаштовані, але не визначені локальні SecretRef закриваються в безпечний режим відмови - підтримка remote-mode через
gateway.remote.*, де це застосовно - перевизначення URL безпечні щодо перевизначень: перевизначення CLI не повторно використовують неявні облікові дані, а перевизначення env використовують лише env-облікові дані
- ID з префіксом
plugin:визначаються черезplugin.approval.resolve. - Інші ID визначаються через
exec.approval.resolve. - Discord не робить тут додаткового резервного переходу exec-to-plugin; тип префікса ID визначає, який метод шлюзу буде викликано.
Інструменти і gate дій
Дії повідомлень Discord включають повідомлення, адміністрування каналів, модерацію, присутність і дії з метаданими. Основні приклади:- повідомлення:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - реакції:
react,reactions,emojiList - модерація:
timeout,kick,ban - присутність:
setPresence
channels.discord.actions.*.
Типова поведінка gate:
| Група дій | За замовчуванням |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | увімкнено |
| roles | вимкнено |
| moderation | вимкнено |
| presence | вимкнено |
UI Components v2
OpenClaw використовує Discord components v2 для погоджень виконання і маркерів між контекстами. Дії повідомлень Discord також можуть прийматиcomponents для власного UI (розширений сценарій; потребує побудови payload компонента через discord tool), тоді як застарілі embeds залишаються доступними, але не рекомендовані.
channels.discord.ui.components.accentColorзадає акцентний колір, який використовується контейнерами компонентів Discord (hex).- Для окремого облікового запису задається через
channels.discord.accounts.<id>.ui.components.accentColor. embedsігноруються, коли присутні components v2.
Голосові канали
OpenClaw може приєднуватися до голосових каналів Discord для розмов у реальному часі без перерв. Це окрема функція від вкладень голосових повідомлень. Вимоги:- Увімкніть власні команди (
commands.nativeабоchannels.discord.commands.native). - Налаштуйте
channels.discord.voice. - Бот повинен мати дозволи Connect + Speak у цільовому голосовому каналі.
/vc join|leave|status для керування сесіями. Команда використовує агента облікового запису за замовчуванням і дотримується тих самих правил allowlist і group policy, що й інші команди Discord.
Приклад автоматичного приєднання:
voice.ttsперевизначаєmessages.ttsлише для відтворення голосу.- Ходи транскрипції голосу визначають статус власника з Discord
allowFrom(абоdm.allowFrom); користувачі, які не є власниками, не можуть отримувати доступ до інструментів тільки для власника (наприкладgatewayіcron). - Голос увімкнено за замовчуванням; установіть
channels.discord.voice.enabled=false, щоб вимкнути його. voice.daveEncryptionіvoice.decryptionFailureToleranceнапряму передаються в параметри приєднання@discordjs/voice.- Якщо не задано,
@discordjs/voiceвикористовує значення за замовчуваннямdaveEncryption=trueіdecryptionFailureTolerance=24. - OpenClaw також відстежує помилки дешифрування під час прийому й автоматично відновлюється, виходячи з голосового каналу та повторно приєднуючись після повторних помилок у короткому вікні часу.
- Якщо журнали прийому неодноразово показують
DecryptionFailed(UnencryptedWhenPassthroughDisabled), це може бути висхідною помилкою прийому@discordjs/voice, яку відстежено в discord.js #11419.
Голосові повідомлення
Голосові повідомлення Discord відображають попередній перегляд форми хвилі й вимагають аудіо OGG/Opus разом із метаданими. OpenClaw генерує форму хвилі автоматично, але на хості шлюзу мають бути доступніffmpeg і ffprobe, щоб аналізувати й конвертувати аудіофайли.
Вимоги й обмеження:
- Вкажіть локальний шлях до файлу (URL відхиляються).
- Не додавайте текстовий вміст (Discord не дозволяє текст + голосове повідомлення в одному payload).
- Підтримується будь-який аудіоформат; OpenClaw за потреби конвертує його в OGG/Opus.
Усунення проблем
Використано заборонені intents або бот не бачить повідомлення сервера
Використано заборонені intents або бот не бачить повідомлення сервера
- увімкніть Message Content Intent
- увімкніть Server Members Intent, якщо ви залежите від визначення користувача/учасника
- перезапустіть шлюз після зміни intents
Повідомлення сервера неочікувано блокуються
Повідомлення сервера неочікувано блокуються
- перевірте
groupPolicy - перевірте allowlist серверів у
channels.discord.guilds - якщо існує мапа
channelsсервера, дозволені лише канали зі списку - перевірте поведінку
requireMentionі шаблони згадок
Потрібна згадка вимкнена, але все одно блокується
Потрібна згадка вимкнена, але все одно блокується
groupPolicy="allowlist"без відповідного allowlist сервера/каналуrequireMentionналаштовано в неправильному місці (має бути вchannels.discord.guildsабо в записі каналу)- відправника блокує allowlist
usersсервера/каналу
Довгі обробники завершуються за тайм-аутом або дублюють відповіді
Довгі обробники завершуються за тайм-аутом або дублюють відповіді
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- один обліковий запис:
channels.discord.eventQueue.listenerTimeout - кілька облікових записів:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- один обліковий запис:
channels.discord.inboundWorker.runTimeoutMs - кілька облікових записів:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - за замовчуванням:
1800000(30 хвилин); установіть0, щоб вимкнути
eventQueue.listenerTimeout для повільного налаштування listener, а inboundWorker.runTimeoutMs
лише якщо вам потрібен окремий запобіжник для черги ходів агента.Невідповідності аудиту дозволів
Невідповідності аудиту дозволів
channels status --probe працюють лише для числових ID каналів.Якщо ви використовуєте ключі slug, зіставлення в runtime усе ще може працювати, але probe не може повністю перевірити дозволи.Проблеми з DM і підключенням
Проблеми з DM і підключенням
- DM вимкнено:
channels.discord.dm.enabled=false - політика DM вимкнена:
channels.discord.dmPolicy="disabled"(застаріле:channels.discord.dm.policy) - очікується схвалення підключення в режимі
pairing
Цикли бот-до-бота
Цикли бот-до-бота
channels.discord.allowBots=true, використовуйте суворі правила згадок і allowlist, щоб уникнути циклічної поведінки.
Надавайте перевагу channels.discord.allowBots="mentions", щоб приймати лише повідомлення ботів, які згадують бота.Голосовий STT пропадає з DecryptionFailed(...)
Голосовий STT пропадає з DecryptionFailed(...)
- підтримуйте актуальну версію OpenClaw (
openclaw update), щоб була наявна логіка відновлення прийому голосу Discord - підтвердьте
channels.discord.voice.daveEncryption=true(за замовчуванням) - почніть із
channels.discord.voice.decryptionFailureTolerance=24(значення upstream за замовчуванням) і змінюйте лише за потреби - стежте за журналами:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- якщо помилки тривають після автоматичного повторного приєднання, зберіть журнали й порівняйте з discord.js #11419
Вказівники до довідника з конфігурації
Основний довідник: Ключові поля Discord:- запуск/авторизація:
enabled,token,accounts.*,allowBots - політика:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - команди:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - черга подій:
eventQueue.listenerTimeout(бюджет listener),eventQueue.maxQueueSize,eventQueue.maxConcurrency - inbound worker:
inboundWorker.runTimeoutMs - відповідь/історія:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - доставка:
textChunkLimit,chunkMode,maxLinesPerMessage - потокова передача:
streaming(застарілий псевдонім:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - медіа/повторні спроби:
mediaMaxMb,retrymediaMaxMbобмежує вихідні завантаження Discord (за замовчуванням:8MB)
- дії:
actions.* - присутність:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - функції:
threadBindings, верхньорівневіbindings[](type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Безпека і експлуатація
- Вважайте токени ботів секретами (
DISCORD_BOT_TOKENє бажаним варіантом у контрольованих середовищах). - Надавайте Discord дозволи за принципом найменших привілеїв.
- Якщо розгортання/стан команд застаріли, перезапустіть шлюз і повторно перевірте за допомогою
openclaw channels status --probe.