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

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.

Готове до production-використання для DM і каналів через інтеграції застосунку Slack. Типовий режим — Socket Mode; також підтримуються URL-адреси HTTP-запитів.

Створення пари

DM у Slack типово використовують режим створення пари.

Slash-команди

Нативна поведінка команд і каталог команд.

Усунення несправностей каналів

Кросканальна діагностика та інструкції з відновлення.

Вибір Socket Mode або URL-адрес HTTP-запитів

Обидва транспорти готові до production-використання й мають паритет функцій для повідомлень, slash-команд, App Home та інтерактивності. Обирайте за формою розгортання, а не за функціями.
АспектSocket Mode (типово)URL-адреси HTTP-запитів
Публічна URL-адреса GatewayНе потрібнаПотрібна (DNS, TLS, reverse proxy або тунель)
Вихідна мережаМає бути доступний вихідний WSS до wss-primary.slack.comБез вихідного WS; лише вхідний HTTPS
Потрібні токениBot token (xoxb-...) + App-Level Token (xapp-...) з connections:writeBot token (xoxb-...) + Signing Secret
Ноутбук розробника / за firewallПрацює як єПотрібен публічний тунель (ngrok, Cloudflare Tunnel, Tailscale Funnel) або staging Gateway
Горизонтальне масштабуванняОдин сеанс Socket Mode на застосунок на хост; для кількох Gateway потрібні окремі застосунки SlackStateless POST-обробник; кілька реплік Gateway можуть спільно використовувати один застосунок за load balancer
Кілька акаунтів на одному GatewayПідтримується; кожен акаунт відкриває власний WSПідтримується; кожному акаунту потрібен унікальний webhookPath (типово /slack/events), щоб реєстрації не конфліктували
Транспорт slash-командДоставляється через WS-з’єднання; slash_commands[].url ігноруєтьсяSlack надсилає POST на slash_commands[].url; поле потрібне для dispatch команди
Підписування запитівНе використовується (автентифікація — це App-Level Token)Slack підписує кожен запит; OpenClaw перевіряє через signingSecret
Відновлення після розриву з’єднанняSlack SDK автоматично перепідключається; застосовується налаштування pong-timeout транспорту gatewayНемає постійного з’єднання, яке може розірватися; повторні спроби виконуються для кожного запиту від Slack
Оберіть Socket Mode для хостів з одним Gateway, ноутбуків розробників і on-prem мереж, які можуть підключатися до *.slack.com назовні, але не можуть приймати вхідний HTTPS.Оберіть URL-адреси HTTP-запитів, коли запускаєте кілька реплік Gateway за load balancer, коли вихідний WSS заблоковано, але вхідний HTTPS дозволено, або коли ви вже завершуєте Slack webhooks на reverse proxy.

Швидке налаштування

1

Створіть новий застосунок Slack

Відкрийте api.slack.com/appsCreate New AppFrom a manifest → виберіть свій workspace → вставте один із наведених нижче маніфестів → NextCreate.
{
  "display_information": {
    "name": "OpenClaw",
    "description": "Slack connector for OpenClaw"
  },
  "features": {
    "bot_user": { "display_name": "OpenClaw", "always_online": true },
    "app_home": {
      "home_tab_enabled": true,
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "app_mentions:read",
        "assistant:write",
        "channels:history",
        "channels:read",
        "chat:write",
        "commands",
        "emoji:read",
        "files:read",
        "files:write",
        "groups:history",
        "groups:read",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "pins:read",
        "pins:write",
        "reactions:read",
        "reactions:write",
        "usergroups:read",
        "users:read"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_home_opened",
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed",
        "reaction_added",
        "reaction_removed"
      ]
    }
  }
}
Рекомендовано відповідає повному набору функцій вбудованого Slack Plugin: App Home, slash-команди, файли, реакції, закріплення, групові DM, а також читання emoji/usergroup. Оберіть Мінімальний, коли політика workspace обмежує scopes — він покриває DM, історію каналів/груп, згадки та slash-команди, але прибирає файли, реакції, закріплення, group-DM (mpim:*), emoji:read і usergroups:read. Див. контрольний список маніфесту та scopes для обґрунтування кожного scope і додаткових опцій, як-от додаткові slash-команди.
Після того як Slack створить застосунок:
  • Basic Information → App-Level Tokens → Generate Token and Scopes: додайте connections:write, збережіть, скопіюйте значення xapp-....
  • Install App → Install to Workspace: скопіюйте xoxb-... Bot User OAuth Token.
2

Налаштуйте OpenClaw

Рекомендоване налаштування SecretRef:
export SLACK_APP_TOKEN=xapp-...
export SLACK_BOT_TOKEN=xoxb-...
cat > slack.socket.patch.json5 <<'JSON5'
{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" },
      botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" },
    },
  },
}
JSON5
openclaw config patch --file ./slack.socket.patch.json5 --dry-run
openclaw config patch --file ./slack.socket.patch.json5
Резервний варіант через env (лише типовий акаунт):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
3

Запустіть gateway

openclaw gateway

Налаштування транспорту Socket Mode

OpenClaw типово встановлює для клієнта Slack SDK тайм-аут pong у 15 секунд для Socket Mode. Перевизначайте налаштування транспорту лише тоді, коли потрібне налаштування під конкретний робочий простір або хост:
{
  channels: {
    slack: {
      mode: "socket",
      socketMode: {
        clientPingTimeout: 20000,
        serverPingTimeout: 30000,
        pingPongLoggingEnabled: false,
      },
    },
  },
}
Використовуйте це лише для робочих просторів Socket Mode, які журналюють тайм-аути Slack websocket pong/server-ping, або працюють на хостах із відомим блокуванням event loop. clientPingTimeout — це час очікування pong після того, як SDK надсилає клієнтський ping; serverPingTimeout — час очікування ping від сервера Slack. Повідомлення й події застосунку залишаються станом застосунку, а не сигналами життєздатності транспорту.

Контрольний список маніфесту й областей доступу

Базовий маніфест застосунку Slack однаковий для Socket Mode і HTTP Request URLs. Відрізняється лише блок settingsurl slash-команди). Базовий маніфест (типово Socket Mode):
{
  "display_information": {
    "name": "OpenClaw",
    "description": "Slack connector for OpenClaw"
  },
  "features": {
    "bot_user": { "display_name": "OpenClaw", "always_online": true },
    "app_home": {
      "home_tab_enabled": true,
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "app_mentions:read",
        "assistant:write",
        "channels:history",
        "channels:read",
        "chat:write",
        "commands",
        "emoji:read",
        "files:read",
        "files:write",
        "groups:history",
        "groups:read",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "pins:read",
        "pins:write",
        "reactions:read",
        "reactions:write",
        "usergroups:read",
        "users:read"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_home_opened",
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed",
        "reaction_added",
        "reaction_removed"
      ]
    }
  }
}
Для режиму HTTP Request URLs замініть settings на HTTP-варіант і додайте url до кожної slash-команди. Потрібен публічний URL:
{
  "features": {
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false,
        "url": "https://gateway-host.example.com/slack/events"
      }
    ]
  },
  "settings": {
    "event_subscriptions": {
      "request_url": "https://gateway-host.example.com/slack/events",
      "bot_events": [
        "app_home_opened",
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed",
        "reaction_added",
        "reaction_removed"
      ]
    },
    "interactivity": {
      "is_enabled": true,
      "request_url": "https://gateway-host.example.com/slack/events",
      "message_menu_options_url": "https://gateway-host.example.com/slack/events"
    }
  }
}

Додаткові налаштування маніфесту

Відкрийте різні функції, що розширюють наведені вище типові значення. Типовий маніфест вмикає вкладку Slack App Home Home і підписується на app_home_opened. Коли учасник робочого простору відкриває вкладку Home, OpenClaw публікує безпечний типовий Home view через views.publish; payload розмови або приватна конфігурація не включаються. Вкладка Messages залишається ввімкненою для Slack DM.
Можна використовувати кілька нативних slash-команд замість однієї налаштованої команди, з такими нюансами:
  • Використовуйте /agentstatus замість /status, оскільки команда /status зарезервована.
  • Одночасно можна зробити доступними не більше ніж 25 slash-команд.
Замініть наявний розділ features.slash_commands підмножиною доступних команд:
{
  "slash_commands": [
    {
      "command": "/new",
      "description": "Start a new session",
      "usage_hint": "[model]"
    },
    {
      "command": "/reset",
      "description": "Reset the current session"
    },
    {
      "command": "/compact",
      "description": "Compact the session context",
      "usage_hint": "[instructions]"
    },
    {
      "command": "/stop",
      "description": "Stop the current run"
    },
    {
      "command": "/session",
      "description": "Manage thread-binding expiry",
      "usage_hint": "idle <duration|off> or max-age <duration|off>"
    },
    {
      "command": "/think",
      "description": "Set the thinking level",
      "usage_hint": "<level>"
    },
    {
      "command": "/verbose",
      "description": "Toggle verbose output",
      "usage_hint": "on|off|full"
    },
    {
      "command": "/fast",
      "description": "Show or set fast mode",
      "usage_hint": "[status|on|off]"
    },
    {
      "command": "/reasoning",
      "description": "Toggle reasoning visibility",
      "usage_hint": "[on|off|stream]"
    },
    {
      "command": "/elevated",
      "description": "Toggle elevated mode",
      "usage_hint": "[on|off|ask|full]"
    },
    {
      "command": "/exec",
      "description": "Show or set exec defaults",
      "usage_hint": "host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>"
    },
    {
      "command": "/model",
      "description": "Show or set the model",
      "usage_hint": "[name|#|status]"
    },
    {
      "command": "/models",
      "description": "List providers/models",
      "usage_hint": "[provider] [page] [limit=<n>|size=<n>|all]"
    },
    {
      "command": "/help",
      "description": "Show the short help summary"
    },
    {
      "command": "/commands",
      "description": "Show the generated command catalog"
    },
    {
      "command": "/tools",
      "description": "Show what the current agent can use right now",
      "usage_hint": "[compact|verbose]"
    },
    {
      "command": "/agentstatus",
      "description": "Show runtime status, including provider usage/quota when available"
    },
    {
      "command": "/tasks",
      "description": "List active/recent background tasks for the current session"
    },
    {
      "command": "/context",
      "description": "Explain how context is assembled",
      "usage_hint": "[list|detail|json]"
    },
    {
      "command": "/whoami",
      "description": "Show your sender identity"
    },
    {
      "command": "/skill",
      "description": "Run a skill by name",
      "usage_hint": "<name> [input]"
    },
    {
      "command": "/btw",
      "description": "Ask a side question without changing session context",
      "usage_hint": "<question>"
    },
    {
      "command": "/side",
      "description": "Ask a side question without changing session context",
      "usage_hint": "<question>"
    },
    {
      "command": "/usage",
      "description": "Control the usage footer or show cost summary",
      "usage_hint": "off|tokens|full|cost"
    }
  ]
}
Додайте область бота chat:write.customize, якщо хочете, щоб вихідні повідомлення використовували ідентичність активного агента (власне ім’я користувача та іконку) замість типової ідентичності застосунку Slack.Якщо ви використовуєте іконку emoji, Slack очікує синтаксис :emoji_name:.
Якщо ви налаштовуєте channels.slack.userToken, типові області читання такі:
  • channels:history, groups:history, im:history, mpim:history
  • channels:read, groups:read, im:read, mpim:read
  • users:read
  • reactions:read
  • pins:read
  • emoji:read
  • search:read (якщо ви покладаєтеся на читання пошуку Slack)

Модель токенів

  • botToken + appToken обов’язкові для Socket Mode.
  • HTTP-режим потребує botToken + signingSecret.
  • botToken, appToken, signingSecret і userToken приймають текстові рядки або об’єкти SecretRef.
  • Токени конфігурації перевизначають резервні значення env.
  • Резервні значення env SLACK_BOT_TOKEN / SLACK_APP_TOKEN застосовуються лише до типового облікового запису.
  • userToken (xoxp-...) налаштовується лише через конфігурацію (без резервного env) і типово має поведінку лише для читання (userTokenReadOnly: true).
Поведінка знімка стану:
  • Перевірка облікового запису Slack відстежує для кожних облікових даних поля *Source і *Status (botToken, appToken, signingSecret, userToken).
  • Стан може бути available, configured_unavailable або missing.
  • configured_unavailable означає, що обліковий запис налаштовано через SecretRef або інше неінлайнове джерело секретів, але поточна команда чи шлях виконання не змогли отримати фактичне значення.
  • У HTTP-режимі включено signingSecretStatus; у Socket Mode обов’язковою парою є botTokenStatus + appTokenStatus.
Для дій і читання каталогу токен користувача може мати перевагу, коли його налаштовано. Для запису перевагу все одно має токен бота; записи через токен користувача дозволені лише коли userTokenReadOnly: false і токен бота недоступний.

Дії та шлюзи

Дії Slack керуються через channels.slack.actions.*. Доступні групи дій у поточних інструментах Slack:
ГрупаТипово
messagesувімкнено
reactionsувімкнено
pinsувімкнено
memberInfoувімкнено
emojiListувімкнено
Поточні дії повідомлень Slack включають send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info і emoji-list. download-file приймає ID файлів Slack, показані у вхідних заповнювачах файлів, і повертає попередні перегляди зображень для зображень або локальні метадані файлів для інших типів файлів.

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

channels.slack.dmPolicy керує доступом DM. channels.slack.allowFrom є канонічним списком дозволених DM.
  • pairing (типово)
  • allowlist
  • open (потребує, щоб channels.slack.allowFrom містив "*")
  • disabled
Прапорці DM:
  • dm.enabled (типово true)
  • channels.slack.allowFrom
  • dm.allowFrom (застаріле)
  • dm.groupEnabled (групові DM типово false)
  • dm.groupChannels (необов’язковий список дозволених MPIM)
Пріоритет для кількох облікових записів:
  • channels.slack.accounts.default.allowFrom застосовується лише до облікового запису default.
  • Іменовані облікові записи успадковують channels.slack.allowFrom, коли їхній власний allowFrom не задано.
  • Іменовані облікові записи не успадковують channels.slack.accounts.default.allowFrom.
Застарілі channels.slack.dm.policy і channels.slack.dm.allowFrom все ще читаються для сумісності. openclaw doctor --fix переносить їх у dmPolicy і allowFrom, коли може зробити це без зміни доступу.Сполучення в DM використовує openclaw pairing approve slack <code>.

Треди, сесії та теги відповіді

  • DM маршрутизуються як direct; канали як channel; MPIM як group.
  • Прив’язки маршрутів Slack приймають сирі ID співрозмовників, а також форми цілей Slack, як-от channel:C12345678, user:U12345678 і <@U12345678>.
  • З типовим session.dmScope=main DM Slack згортаються до основної сесії агента.
  • Сесії каналів: agent:<agentId>:slack:channel:<channelId>.
  • Відповіді в тредах можуть створювати суфікси сесій тредів (:thread:<threadTs>), коли це застосовно.
  • У каналах, де OpenClaw обробляє повідомлення верхнього рівня без вимоги явної згадки, не-off replyToMode маршрутизує кожен оброблений кореневий елемент у agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>, щоб видимий тред Slack від першого ходу відповідав одній сесії OpenClaw.
  • Типове значення channels.slack.thread.historyScopethread; типове значення thread.inheritParentfalse.
  • channels.slack.thread.initialHistoryLimit керує тим, скільки наявних повідомлень треду завантажується, коли починається нова сесія треду (типово 20; задайте 0, щоб вимкнути).
  • channels.slack.thread.requireExplicitMention (типово false): коли true, пригнічує неявні згадки в треді, щоб бот відповідав лише на явні згадки @bot усередині тредів, навіть коли бот уже брав участь у треді. Без цього відповіді в треді, де брав участь бот, обходять шлюз requireMention.
Засоби керування відповідями в тредах:
  • channels.slack.replyToMode: off|first|all|batched (типово off)
  • channels.slack.replyToModeByChatType: для кожного direct|group|channel
  • застарілий резервний варіант для прямих чатів: channels.slack.dm.replyToMode
Підтримуються ручні теги відповіді:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
Для явних відповідей у тредах Slack з інструмента message задайте replyBroadcast: true з action: "send" і threadId або replyTo, щоб попросити Slack також транслювати відповідь треду в батьківський канал. Це зіставляється з прапорцем reply_broadcast Slack chat.postMessage і підтримується лише для текстових або Block Kit надсилань, не для завантажень медіа. Коли виклик інструмента message виконується всередині треду Slack і націлений на той самий канал, OpenClaw зазвичай успадковує поточний тред Slack відповідно до replyToMode. Задайте topLevel: true для action: "send" або action: "upload-file", щоб натомість примусово створити нове повідомлення в батьківському каналі. threadId: null приймається як такий самий вихід на верхній рівень.
replyToMode="off" вимикає всі треди відповідей у Slack, включно з явними тегами [[reply_to_*]]. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі "off". Треди Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими inline.

Реакції підтвердження

ackReaction надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення. Порядок розв’язання:
  • channels.slack.accounts.<accountId>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • резервний emoji ідентичності агента (agents.list[].identity.emoji, інакше ”👀”)
Примітки:
  • Slack очікує shortcodes (наприклад, "eyes").
  • Використовуйте "", щоб вимкнути реакцію для облікового запису Slack або глобально.

Потокове передавання тексту

channels.slack.streaming керує поведінкою live preview:
  • off: вимкнути потокове передавання live preview.
  • partial (типово): замінювати текст попереднього перегляду найновішим частковим виводом.
  • block: додавати порційні оновлення попереднього перегляду.
  • progress: показувати текст стану перебігу під час генерації, потім надсилати фінальний текст.
  • streaming.preview.toolProgress: коли активний чернетковий попередній перегляд, спрямовувати оновлення інструментів/перебігу в те саме редаговане повідомлення попереднього перегляду (типово: true). Задайте false, щоб зберігати окремі повідомлення інструментів/перебігу.
  • streaming.preview.commandText / streaming.progress.commandText: задайте status, щоб зберігати компактні рядки перебігу інструментів, приховуючи сирий текст command/exec (типово: raw).
Приховати сирий текст command/exec, зберігаючи компактні рядки перебігу:
{
  "channels": {
    "slack": {
      "streaming": {
        "mode": "progress",
        "progress": {
          "toolProgress": true,
          "commandText": "status"
        }
      }
    }
  }
}
channels.slack.streaming.nativeTransport керує нативним потоковим передаванням тексту Slack, коли channels.slack.streaming.mode має значення partial (типово: true).
  • Ланцюжок відповіді має бути доступний, щоб з’являлися нативне потокове передавання тексту та статус ланцюжка помічника Slack. Вибір ланцюжка все одно відповідає replyToMode.
  • Корені каналів, групових чатів і DM верхнього рівня все ще можуть використовувати звичайний попередній перегляд чернетки, коли нативне потокове передавання недоступне або ланцюжка відповіді не існує.
  • DM Slack верхнього рівня за замовчуванням залишаються поза ланцюжками, тому вони не показують нативний потоковий перегляд/перегляд статусу у стилі ланцюжків Slack; натомість OpenClaw публікує та редагує попередній перегляд чернетки в DM.
  • Медіа та нетекстові корисні навантаження повертаються до звичайної доставки.
  • Фінальні медіа/помилки скасовують очікувані редагування попереднього перегляду; придатні фінальні текстові/блокові повідомлення скидаються лише тоді, коли можуть редагувати попередній перегляд на місці.
  • Якщо потокове передавання переривається посеред відповіді, OpenClaw повертається до звичайної доставки для решти корисних навантажень.
Використовуйте попередній перегляд чернетки замість нативного потокового передавання тексту Slack:
{
  channels: {
    slack: {
      streaming: {
        mode: "partial",
        nativeTransport: false,
      },
    },
  },
}
Застарілі ключі:
  • channels.slack.streamMode (replace | status_final | append) є застарілим runtime-псевдонімом для channels.slack.streaming.mode.
  • булевий channels.slack.streaming є застарілим runtime-псевдонімом для channels.slack.streaming.mode і channels.slack.streaming.nativeTransport.
  • застарілий channels.slack.nativeStreaming є runtime-псевдонімом для channels.slack.streaming.nativeTransport.
  • Запустіть openclaw doctor --fix, щоб переписати збережену конфігурацію потокового передавання Slack на канонічні ключі.

Резервна реакція набору тексту

typingReaction додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення запуску. Це найкорисніше поза відповідями у ланцюжках, які використовують стандартний індикатор статусу “is typing…”. Порядок визначення:
  • channels.slack.accounts.<accountId>.typingReaction
  • channels.slack.typingReaction
Примітки:
  • Slack очікує короткі коди (наприклад, "hourglass_flowing_sand").
  • Реакція виконується за принципом best-effort, а очищення автоматично виконується після завершення відповіді або шляху помилки.

Медіа, розбиття на частини та доставка

Файлові вкладення Slack завантажуються з приватних URL, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, коли отримання успішне й обмеження розміру це дозволяють. Заповнювачі файлів містять Slack fileId, щоб агенти могли отримати оригінальний файл через download-file.Завантаження використовують обмежені тайм-аути простою та загальні тайм-аути. Якщо отримання файлу Slack зависає або завершується помилкою, OpenClaw продовжує обробляти повідомлення та повертається до заповнювача файлу.Runtime-обмеження розміру вхідних даних за замовчуванням становить 20MB, якщо його не перевизначено через channels.slack.mediaMaxMb.
  • текстові частини використовують channels.slack.textChunkLimit (за замовчуванням 4000)
  • channels.slack.chunkMode="newline" вмикає розбиття з пріоритетом абзаців
  • надсилання файлів використовує API завантаження Slack і може включати відповіді у ланцюжках (thread_ts)
  • обмеження вихідних медіа відповідає channels.slack.mediaMaxMb, коли його налаштовано; інакше надсилання каналом використовує MIME-типові значення за замовчуванням із медіаконвеєра
Бажані явні цілі:
  • user:<id> для DM
  • channel:<id> для каналів
DM Slack лише з текстом/блоками можуть публікуватися безпосередньо в ID користувачів; завантаження файлів і надсилання у ланцюжках спочатку відкривають DM через API розмов Slack, оскільки ці шляхи потребують конкретного ID розмови.

Команди та поведінка слеш-команд

Слеш-команди відображаються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте channels.slack.slashCommand, щоб змінити стандартні параметри команд:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
/openclaw /help
Нативні команди потребують додаткових налаштувань маніфесту у вашому застосунку Slack і натомість вмикаються через channels.slack.commands.native: true або commands.native: true у глобальних конфігураціях.
  • Автоматичний режим нативних команд вимкнено для Slack, тому commands.native: "auto" не вмикає нативні команди Slack.
/help
Нативні меню аргументів використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед надсиланням вибраного значення параметра:
  • до 5 параметрів: блоки кнопок
  • 6-100 параметрів: статичне меню вибору
  • понад 100 параметрів: зовнішній вибір з асинхронною фільтрацією параметрів, коли доступні обробники параметрів інтерактивності
  • перевищено обмеження Slack: закодовані значення параметрів повертаються до кнопок
/think
Сеанси слеш-команд використовують ізольовані ключі на кшталт agent:<agentId>:slack:slash:<userId> і все одно спрямовують виконання команд до цільового сеансу розмови за допомогою CommandTargetSessionKey.

Інтерактивні відповіді

Slack може відтворювати інтерактивні елементи керування відповідями, створені агентом, але ця функція за замовчуванням вимкнена. Увімкніть її глобально:
{
  channels: {
    slack: {
      capabilities: {
        interactiveReplies: true,
      },
    },
  },
}
Або увімкніть її лише для одного облікового запису Slack:
{
  channels: {
    slack: {
      accounts: {
        ops: {
          capabilities: {
            interactiveReplies: true,
          },
        },
      },
    },
  },
}
Коли ввімкнено, агенти можуть видавати директиви відповідей лише для Slack:
  • [[slack_buttons: Approve:approve, Reject:reject]]
  • [[slack_select: Choose a target | Canary:canary, Production:production]]
Ці директиви компілюються у Slack Block Kit і маршрутизують кліки або вибори назад через наявний шлях подій взаємодії Slack. Примітки:
  • Це UI, специфічний для Slack. Інші канали не перетворюють директиви Slack Block Kit на власні системи кнопок.
  • Значення інтерактивних зворотних викликів є непрозорими токенами, згенерованими OpenClaw, а не сирими значеннями, створеними агентом.
  • Якщо згенеровані інтерактивні блоки перевищили б ліміти Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання недійсного payload блоків.

Підтвердження виконання у Slack

Slack може діяти як нативний клієнт підтверджень з інтерактивними кнопками та взаємодіями, замість повернення до Web UI або термінала.
  • Підтвердження виконання використовують channels.slack.execApprovals.* для нативної маршрутизації DM/каналу.
  • Підтвердження Plugin все ще можуть вирішуватися через ту саму нативну для Slack поверхню кнопок, коли запит уже потрапляє у Slack і тип ідентифікатора підтвердження є plugin:.
  • Авторизація затверджувачів усе ще застосовується: лише користувачі, визначені як затверджувачі, можуть схвалювати або відхиляти запити через Slack.
Це використовує ту саму спільну поверхню кнопок підтвердження, що й інші канали. Коли interactivity увімкнено в налаштуваннях вашого застосунку Slack, запити підтвердження відображаються як кнопки Block Kit безпосередньо в розмові. Коли ці кнопки присутні, вони є основним інтерфейсом підтвердження; OpenClaw має додавати ручну команду /approve лише тоді, коли результат інструмента вказує, що підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом. Шлях конфігурації:
  • channels.slack.execApprovals.enabled
  • channels.slack.execApprovals.approvers (необов’язково; за можливості повертається до commands.ownerAllowFrom)
  • channels.slack.execApprovals.target (dm | channel | both, стандартно: dm)
  • agentFilter, sessionFilter
Slack автоматично вмикає нативні підтвердження виконання, коли enabled не задано або має значення "auto" і вдається визначити принаймні одного затверджувача. Задайте enabled: false, щоб явно вимкнути Slack як нативний клієнт підтверджень. Задайте enabled: true, щоб примусово ввімкнути нативні підтвердження, коли затверджувачів визначено. Стандартна поведінка без явної конфігурації підтверджень виконання Slack:
{
  commands: {
    ownerAllowFrom: ["slack:U12345678"],
  },
}
Явна нативна для Slack конфігурація потрібна лише тоді, коли потрібно перевизначити затверджувачів, додати фільтри або увімкнути доставку в початковий чат:
{
  channels: {
    slack: {
      execApprovals: {
        enabled: true,
        approvers: ["U12345678"],
        target: "both",
      },
    },
  },
}
Спільне переспрямування approvals.exec є окремим. Використовуйте його лише тоді, коли запити підтвердження виконання також мають маршрутизуватися до інших чатів або явних позаканальних цілей. Спільне переспрямування approvals.plugin також є окремим; нативні кнопки Slack усе ще можуть вирішувати підтвердження Plugin, коли ці запити вже потрапляють у Slack. Команда /approve у тому самому чаті також працює в каналах Slack і DM, які вже підтримують команди. Див. Підтвердження виконання для повної моделі переспрямування підтверджень.

Події та операційна поведінка

  • Редагування/видалення повідомлень перетворюються на системні події.
  • Трансляції гілок (відповіді в гілці “Також надіслати до каналу”) обробляються як звичайні повідомлення користувача.
  • Події додавання/видалення реакцій перетворюються на системні події.
  • Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень перетворюються на системні події.
  • channel_id_changed може мігрувати ключі конфігурації каналів, коли ввімкнено configWrites.
  • Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть бути вставлені в контекст маршрутизації.
  • Ініціатор гілки та початкове заповнення контексту історії гілки фільтруються налаштованими списками дозволених відправників, коли це застосовно.
  • Дії блоків і модальні взаємодії видають структуровані системні події Slack interaction: ... з багатими полями payload:
    • дії блоків: вибрані значення, мітки, значення селекторів і метадані workflow_*
    • події модальних view_submission і view_closed з маршрутизованими метаданими каналу та введенням форми

Довідник конфігурації

Основний довідник: Довідник конфігурації - Slack.
  • режим/автентифікація: mode, botToken, appToken, signingSecret, webhookPath, accounts.*
  • доступ до DM: dm.enabled, dmPolicy, allowFrom (застаріле: dm.policy, dm.allowFrom), dm.groupEnabled, dm.groupChannels
  • перемикач сумісності: dangerouslyAllowNameMatching (аварійний; тримайте вимкненим, якщо не потрібно)
  • доступ до каналів: groupPolicy, channels.*, channels.*.users, channels.*.requireMention
  • гілки/історія: replyToMode, replyToModeByChatType, thread.*, historyLimit, dmHistoryLimit, dms.*.historyLimit
  • доставка: textChunkLimit, chunkMode, mediaMaxMb, streaming, streaming.nativeTransport, streaming.preview.toolProgress
  • розгортання прев’ю: unfurlLinks, unfurlMedia для керування прев’ю посилань/медіа chat.postMessage
  • операційні можливості/функції: configWrites, commands.native, slashCommand.*, actions.*, userToken, userTokenReadOnly

Усунення несправностей

Перевірте по черзі:
  • groupPolicy
  • список дозволених каналів (channels.slack.channels) — ключами мають бути ID каналів (C12345678), а не назви (#channel-name). Ключі на основі назв непомітно не спрацьовують за groupPolicy: "allowlist", бо маршрутизація каналів за замовчуванням спочатку використовує ID. Щоб знайти ID: клацніть канал у Slack правою кнопкою → Копіювати посилання — значення C... у кінці URL є ID каналу.
  • requireMention
  • список дозволених users для окремого каналу
Корисні команди:
openclaw channels status --probe
openclaw logs --follow
openclaw doctor
Перевірте:
  • channels.slack.dm.enabled
  • channels.slack.dmPolicy (або застаріле channels.slack.dm.policy)
  • підтвердження сполучення / записи списку дозволених
  • події DM Slack Assistant: докладні журнали зі згадкою drop message_changed зазвичай означають, що Slack надіслав відредаговану подію гілки Assistant без людського відправника, якого можна відновити з метаданих повідомлення
openclaw pairing list slack
Перевірте токени бота й застосунку та ввімкнення Socket Mode у налаштуваннях застосунку Slack.Якщо openclaw channels status --probe --json показує botTokenStatus або appTokenStatus: "configured_unavailable", обліковий запис Slack налаштовано, але поточне середовище виконання не змогло визначити значення, підкріплене SecretRef.
Перевірте:
  • секрет підписування
  • шлях webhook
  • URL-адреси запитів Slack (події + інтерактивність + слеш-команди)
  • унікальний webhookPath для кожного облікового запису HTTP
Якщо signingSecretStatus: "configured_unavailable" з’являється у знімках облікового запису, обліковий запис HTTP налаштовано, але поточне середовище виконання не змогло розв’язати секрет підписування на основі SecretRef.
Перевірте, що саме ви мали на увазі:
  • режим нативних команд (channels.slack.commands.native: true) із відповідними слеш-командами, зареєстрованими в Slack
  • або режим однієї слеш-команди (channels.slack.slashCommand.enabled: true)
Також перевірте commands.useAccessGroups і списки дозволених каналів/користувачів.

Довідка щодо зору для вкладень

Slack може прикріплювати завантажені медіа до ходу агента, коли завантаження файлів Slack успішне та це дозволяють обмеження розміру. Файли зображень можна передавати через шлях розуміння медіа або безпосередньо до моделі відповіді з підтримкою зору; інші файли зберігаються як контекст файлів, доступних для завантаження, а не обробляються як вхідні зображення.

Підтримувані типи медіа

Тип медіаДжерелоПоточна поведінкаПримітки
Зображення JPEG / PNG / GIF / WebPURL файлу SlackЗавантажуються та прикріплюються до ходу для обробки з підтримкою зоруОбмеження на файл: channels.slack.mediaMaxMb (типово 20 МБ)
PDF-файлиURL файлу SlackЗавантажуються та надаються як файловий контекст для інструментів, як-от download-file або pdfВхідний Slack автоматично не перетворює PDF на вхідні дані для зору зображень
Інші файлиURL файлу SlackЗавантажуються, коли це можливо, і надаються як файловий контекстБінарні файли не обробляються як вхідні зображення
Відповіді в тредахФайли початкового повідомлення тредуФайли кореневого повідомлення можуть бути додані як контекст, коли відповідь не має прямих медіаПочаткові повідомлення лише з файлами використовують заповнювач вкладення
Повідомлення з кількома зображеннямиКілька файлів SlackКожен файл оцінюється незалежноОбробка Slack обмежена вісьмома файлами на повідомлення

Вхідний конвеєр

Коли надходить повідомлення Slack із файловими вкладеннями:
  1. OpenClaw завантажує файл із приватної URL-адреси Slack за допомогою токена бота (xoxb-...).
  2. У разі успіху файл записується до сховища медіа.
  3. Шляхи завантажених медіа та типи вмісту додаються до вхідного контексту.
  4. Шляхи моделей/інструментів із підтримкою зображень можуть використовувати вкладення зображень із цього контексту.
  5. Файли, що не є зображеннями, залишаються доступними як файлові метадані або медіапосилання для інструментів, які можуть їх обробляти.

Успадкування вкладень кореневого повідомлення треду

Коли повідомлення надходить у тред (має батьківський thread_ts):
  • Якщо сама відповідь не має прямих медіа, а включене кореневе повідомлення має файли, Slack може додати кореневі файли як контекст початкового повідомлення треду.
  • Прямі вкладення відповіді мають пріоритет над вкладеннями кореневого повідомлення.
  • Кореневе повідомлення, яке має лише файли й не має тексту, представляється із заповнювачем вкладення, щоб резервний механізм усе одно міг включити його файли.

Обробка кількох вкладень

Коли одне повідомлення Slack містить кілька файлових вкладень:
  • Кожне вкладення обробляється незалежно через медіаконвеєр.
  • Посилання на завантажені медіа агрегуються в контекст повідомлення.
  • Порядок обробки відповідає порядку файлів Slack у корисному навантаженні події.
  • Помилка завантаження одного вкладення не блокує інші.

Обмеження розміру, завантаження та моделей

  • Обмеження розміру: типово 20 МБ на файл. Налаштовується через channels.slack.mediaMaxMb.
  • Помилки завантаження: файли, які Slack не може надати, протерміновані URL-адреси, недоступні файли, завеликі файли та HTML-відповіді автентифікації/входу Slack пропускаються, а не повідомляються як непідтримувані формати.
  • Модель зору: аналіз зображень використовує активну модель відповіді, коли вона підтримує зір, або модель зображень, налаштовану в agents.defaults.imageModel.

Відомі обмеження

СценарійПоточна поведінкаОбхідний шлях
Протермінована URL-адреса файлу SlackФайл пропускається; помилка не показуєтьсяПовторно завантажте файл у Slack
Модель зору не налаштованаВкладення зображень зберігаються як медіапосилання, але не аналізуються як зображенняНалаштуйте agents.defaults.imageModel або використайте модель відповіді з підтримкою зору
Дуже великі зображення (> 20 МБ типово)Пропускаються відповідно до обмеження розміруЗбільште channels.slack.mediaMaxMb, якщо Slack дозволяє
Переслані/поширені вкладенняТекст і розміщені в Slack зображення/файлові медіа обробляються за найкращою спробоюПоділіться ними напряму в треді OpenClaw
PDF-вкладенняЗберігаються як файловий/медіаконтекст, але автоматично не спрямовуються через зір зображеньВикористайте download-file для файлових метаданих або інструмент pdf для аналізу PDF

Пов’язана документація

Пов’язане

Спарювання

Спаруйте користувача Slack із gateway.

Групи

Поведінка каналу та групових DM.

Маршрутизація каналів

Маршрутизуйте вхідні повідомлення до агентів.

Безпека

Модель загроз і посилення захисту.

Конфігурація

Структура конфігурації та пріоритетність.

Слеш-команди

Каталог команд і поведінка.