Статус: завантажуваний plugin (токен бота + події WebSocket). Підтримуються канали, групи та особисті повідомлення. Mattermost — це платформа командного обміну повідомленнями, яку можна розгорнути самостійно; докладні відомості про продукт і завантаження див. на офіційному сайті mattermost.com.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.
Встановлення
Встановіть Mattermost перед налаштуванням каналу:- реєстр npm
- локальна робоча копія
Швидке налаштування
Переконайтеся, що plugin доступний
Поточні пакетовані випуски OpenClaw уже містять його. Старіші або користувацькі встановлення можуть додати його вручну за допомогою команд вище.
Скопіюйте базову URL-адресу
Скопіюйте базову URL-адресу Mattermost (наприклад,
https://chat.example.com).Вбудовані slash-команди
Вбудовані slash-команди вмикаються явно. Коли їх увімкнено, OpenClaw реєструє slash-командиoc_* через API Mattermost і отримує callback POST-запити на HTTP-сервері gateway.
Примітки щодо поведінки
Примітки щодо поведінки
native: "auto"для Mattermost за замовчуванням вимкнено. Задайтеnative: true, щоб увімкнути.- Якщо
callbackUrlпропущено, OpenClaw виводить його з хоста/порту gateway +callbackPath. - Для налаштувань із кількома обліковими записами
commandsможна задати на верхньому рівні або вchannels.mattermost.accounts.<id>.commands(значення облікового запису перевизначають поля верхнього рівня). - Callback-запити команд перевіряються за токенами для кожної команди, які Mattermost повертає, коли OpenClaw реєструє команди
oc_*. - OpenClaw оновлює поточну реєстрацію команд Mattermost перед прийняттям кожного callback-запиту, тож застарілі токени з видалених або повторно згенерованих slash-команд припиняють прийматися без перезапуску gateway.
- Перевірка callback-запиту завершується закрито, якщо API Mattermost не може підтвердити, що команда досі актуальна; невдалі перевірки коротко кешуються, одночасні пошуки об’єднуються, а запуск нових пошуків обмежується за частотою для кожної команди, щоб стримувати тиск повторного відтворення.
- Slash-callback-запити завершуються закрито, коли реєстрація не вдалася, запуск був частковим або токен callback-запиту не збігається із зареєстрованим токеном розв’язаної команди (токен, чинний для однієї команди, не може дійти до upstream-перевірки для іншої команди).
Вимога доступності
Вимога доступності
Кінцева точка callback має бути доступною із сервера Mattermost.
- Не задавайте
callbackUrlякlocalhost, якщо Mattermost не працює на тому самому хості або в тому самому мережевому просторі імен, що й OpenClaw. - Не задавайте
callbackUrlяк базову URL-адресу Mattermost, якщо ця URL-адреса не reverse-proxy-ть/api/channels/mattermost/commandдо OpenClaw. - Швидка перевірка:
curl https://<gateway-host>/api/channels/mattermost/command; GET має повернути405 Method Not Allowedвід OpenClaw, а не404.
Allowlist вихідних з’єднань Mattermost
Allowlist вихідних з’єднань Mattermost
Якщо ваш callback спрямовано на приватні/tailnet/внутрішні адреси, задайте Mattermost
ServiceSettings.AllowedUntrustedInternalConnections, щоб включити хост/домен callback.Використовуйте записи хоста/домену, а не повні URL-адреси.- Добре:
gateway.tailnet-name.ts.net - Погано:
https://gateway.tailnet-name.ts.net
Змінні середовища (обліковий запис за замовчуванням)
Задайте їх на хості gateway, якщо віддаєте перевагу змінним середовища:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
Змінні середовища застосовуються лише до стандартного облікового запису (
default). Інші облікові записи мають використовувати значення конфігурації.MATTERMOST_URL не можна задати з робочого .env; див. файли робочого середовища .env.Режими чату
Mattermost автоматично відповідає на особисті повідомлення. Поведінка в каналі контролюється параметромchatmode:
- oncall (за замовчуванням)
- onmessage
- onchar
Відповідати в каналах лише при @згадуванні.
oncharусе одно відповідає на явні @згадування.channels.mattermost.requireMentionпідтримується для застарілих конфігурацій, але бажано використовуватиchatmode.
Потоки та сеанси
Використовуйтеchannels.mattermost.replyToMode, щоб керувати тим, чи відповіді в каналах і групах залишаються в основному каналі, чи запускають потік під дописом-тригером.
off(за замовчуванням): відповідати в потоці лише тоді, коли вхідний допис уже в потоці.first: для дописів верхнього рівня в каналі/групі запустити потік під цим дописом і маршрутизувати розмову до сеансу з областю видимості потоку.all: така сама поведінка, якfirst, для Mattermost на сьогодні.- Особисті повідомлення ігнорують це налаштування та залишаються без потоків.
- Сеанси з областю видимості потоку використовують id допису-тригера як корінь потоку.
firstіallнаразі еквівалентні, бо щойно Mattermost має корінь потоку, наступні фрагменти й медіа продовжуються в тому самому потоці.
Контроль доступу (особисті повідомлення)
- За замовчуванням:
channels.mattermost.dmPolicy = "pairing"(невідомі відправники отримують код сполучення). - Підтвердьте через:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Публічні особисті повідомлення:
channels.mattermost.dmPolicy="open"плюсchannels.mattermost.allowFrom=["*"]. channels.mattermost.allowFromприймає записиaccessGroup:<name>. Див. групи доступу.
Канали (групи)
- За замовчуванням:
channels.mattermost.groupPolicy = "allowlist"(з доступом через згадування). - Додайте відправників до allowlist за допомогою
channels.mattermost.groupAllowFrom(рекомендовано ID користувачів). channels.mattermost.groupAllowFromприймає записиaccessGroup:<name>. Див. групи доступу.- Перевизначення згадувань для окремих каналів містяться в
channels.mattermost.groups.<channelId>.requireMentionабоchannels.mattermost.groups["*"].requireMentionдля значення за замовчуванням. - Зіставлення
@usernameє змінним і вмикається лише колиchannels.mattermost.dangerouslyAllowNameMatching: true. - Відкриті канали:
channels.mattermost.groupPolicy="open"(з доступом через згадування). - Примітка щодо runtime: якщо
channels.mattermostповністю відсутній, runtime повертається доgroupPolicy="allowlist"для перевірок груп (навіть якщо заданоchannels.defaults.groupPolicy).
Цілі для вихідної доставки
Використовуйте ці формати цілей зopenclaw message send або cron/webhooks:
channel:<id>для каналуuser:<id>для особистого повідомлення@usernameдля особистого повідомлення (розв’язується через API Mattermost)
Повторні спроби для каналу особистих повідомлень
Коли OpenClaw надсилає до цілі особистого повідомлення Mattermost і спершу має розв’язати прямий канал, він за замовчуванням повторює спроби після тимчасових помилок створення прямого каналу. Використовуйтеchannels.mattermost.dmChannelRetry, щоб налаштувати цю поведінку глобально для plugin Mattermost, або channels.mattermost.accounts.<id>.dmChannelRetry для одного облікового запису.
- Це застосовується лише до створення каналу особистих повідомлень (
/api/v4/channels/direct), а не до кожного виклику API Mattermost. - Повторні спроби застосовуються до тимчасових збоїв, як-от обмеження частоти, відповіді 5xx і помилки мережі або тайм-ауту.
- Клієнтські помилки 4xx, крім
429, вважаються постійними й не повторюються.
Streaming попереднього перегляду
Mattermost транслює міркування, активність інструментів і частковий текст відповіді в один чернетковий допис попереднього перегляду, який фіналізується на місці, коли остаточну відповідь безпечно надсилати. Попередній перегляд оновлюється в тому самому id допису замість засмічення каналу повідомленнями для кожного фрагмента. Остаточні медіа/помилки скасовують очікувані редагування попереднього перегляду й використовують звичайну доставку замість скидання одноразового допису попереднього перегляду. Увімкніть черезchannels.mattermost.streaming:
Режими streaming
Режими streaming
partial— звичайний вибір: один допис попереднього перегляду, який редагується в міру зростання відповіді, а потім фіналізується з повною відповіддю.blockвикористовує чернеткові фрагменти в стилі додавання всередині допису попереднього перегляду.progressпоказує статусний попередній перегляд під час генерації та публікує остаточну відповідь лише після завершення.offвимикає streaming попереднього перегляду.
Примітки щодо поведінки streaming
Примітки щодо поведінки streaming
- Якщо stream не можна фіналізувати на місці (наприклад, допис було видалено посеред stream), OpenClaw повертається до надсилання нового остаточного допису, щоб відповідь ніколи не загубилася.
- Payload-и лише з міркуваннями пригнічуються в дописах каналу, включно з текстом, що надходить як blockquote
> Reasoning:. Задайте/reasoning on, щоб бачити міркування в інших поверхнях; остаточний допис Mattermost зберігає лише відповідь. - Див. Streaming для матриці зіставлення каналів.
Реакції (інструмент повідомлень)
- Використовуйте
message action=reactзchannel=mattermost. messageId— це id допису Mattermost.emojiприймає назви на кшталтthumbsupабо:+1:(двокрапки необов’язкові).- Задайте
remove=true(boolean), щоб видалити реакцію. - Події додавання/видалення реакцій пересилаються як системні події до маршрутизованого сеансу агента.
channels.mattermost.actions.reactions: увімкнути/вимкнути дії реакцій (за замовчуванням true).- Перевизначення для облікового запису:
channels.mattermost.accounts.<id>.actions.reactions.
Інтерактивні кнопки (інструмент повідомлень)
Надсилайте повідомлення з клікабельними кнопками. Коли користувач натискає кнопку, агент отримує вибір і може відповісти. Увімкніть кнопки, додавшиinlineButtons до можливостей каналу:
message action=send з параметром buttons. Кнопки — це 2D-масив (рядки кнопок):
Відображувана мітка.
Значення, яке надсилається назад під час натискання (використовується як ID дії).
Стиль кнопки.
Кнопки замінено підтвердженням
Усі кнопки замінюються рядком підтвердження (наприклад, ”✓ Yes selected by @user”).
Нотатки щодо реалізації
Нотатки щодо реалізації
- Зворотні виклики кнопок використовують перевірку HMAC-SHA256 (автоматично, конфігурація не потрібна).
- Mattermost вилучає дані зворотного виклику зі своїх відповідей API (функція безпеки), тому всі кнопки видаляються під час натискання - часткове видалення неможливе.
- ID дій, що містять дефіси або підкреслення, автоматично очищуються (обмеження маршрутизації Mattermost).
Конфігурація та доступність
Конфігурація та доступність
channels.mattermost.capabilities: масив рядків можливостей. Додайте"inlineButtons", щоб увімкнути опис інструмента кнопок у системній підказці агента.channels.mattermost.interactions.callbackBaseUrl: необов’язкова зовнішня базова URL-адреса для зворотних викликів кнопок (наприклад,https://gateway.example.com). Використовуйте це, коли Mattermost не може напряму досягти gateway за його прив’язаним хостом.- У налаштуваннях із кількома обліковими записами можна також встановити те саме поле в
channels.mattermost.accounts.<id>.interactions.callbackBaseUrl. - Якщо
interactions.callbackBaseUrlопущено, OpenClaw виводить URL-адресу зворотного виклику зgateway.customBindHost+gateway.port, а потім повертається доhttp://localhost:<port>. - Правило доступності: URL-адреса зворотного виклику кнопки має бути доступною із сервера Mattermost.
localhostпрацює лише тоді, коли Mattermost і OpenClaw працюють на тому самому хості/у тому самому мережевому просторі імен. - Якщо ваша ціль зворотного виклику приватна/tailnet/внутрішня, додайте її хост/домен до Mattermost
ServiceSettings.AllowedUntrustedInternalConnections.
Пряма інтеграція API (зовнішні скрипти)
Зовнішні скрипти й webhooks можуть публікувати кнопки напряму через Mattermost REST API замість проходження через інструментmessage агента. За можливості використовуйте buildButtonAttachments() із plugin; якщо публікуєте сирий JSON, дотримуйтеся цих правил:
Структура навантаження:
Серіалізуйте з відсортованими ключами
Серіалізуйте з відсортованими ключами та без пробілів (gateway використовує
JSON.stringify з відсортованими ключами, що створює компактний вивід).Поширені помилки HMAC
Поширені помилки HMAC
json.dumpsу Python типово додає пробіли ({"key": "val"}). Використовуйтеseparators=(",", ":"), щоб відповідати компактному виводу JavaScript ({"key":"val"}).- Завжди підписуйте всі поля контексту (без
_token). Gateway вилучає_token, а потім підписує все, що залишилося. Підписування підмножини спричиняє мовчазну помилку перевірки. - Використовуйте
sort_keys=True- gateway сортує ключі перед підписуванням, а Mattermost може перевпорядковувати поля контексту під час збереження навантаження. - Виводьте секрет із токена бота (детерміновано), а не з випадкових байтів. Секрет має бути однаковим у процесі, який створює кнопки, і в gateway, який перевіряє.
Адаптер каталогу
Plugin Mattermost містить адаптер каталогу, який розв’язує назви каналів і користувачів через Mattermost API. Це вмикає цілі#channel-name і @username в openclaw message send та доставках cron/webhook.
Конфігурація не потрібна - адаптер використовує токен бота з конфігурації облікового запису.
Кілька облікових записів
Mattermost підтримує кілька облікових записів уchannels.mattermost.accounts:
Усунення несправностей
Немає відповідей у каналах
Немає відповідей у каналах
Переконайтеся, що бот перебуває в каналі, і згадайте його (oncall), використовуйте префікс тригера (onchar) або встановіть
chatmode: "onmessage".Помилки автентифікації або кількох облікових записів
Помилки автентифікації або кількох облікових записів
- Перевірте токен бота, базову URL-адресу та чи ввімкнено обліковий запис.
- Проблеми з кількома обліковими записами: змінні середовища застосовуються лише до облікового запису
default.
Власні команди зі скісною рискою не працюють
Власні команди зі скісною рискою не працюють
Unauthorized: invalid command token.: OpenClaw не прийняв токен зворотного виклику. Типові причини:- реєстрація команди зі скісною рискою не вдалася або лише частково завершилася під час запуску
- зворотний виклик потрапляє не в той gateway/обліковий запис
- Mattermost усе ще має старі команди, що вказують на попередню ціль зворотного виклику
- gateway перезапустився без повторної активації команд зі скісною рискою
- Якщо власні команди зі скісною рискою перестали працювати, перевірте журнали на
mattermost: failed to register slash commandsабоmattermost: native slash commands enabled but no commands could be registered. - Якщо
callbackUrlопущено, а журнали попереджають, що зворотний виклик розв’язано доhttp://127.0.0.1:18789/..., ця URL-адреса, ймовірно, доступна лише тоді, коли Mattermost працює на тому самому хості/у тому самому мережевому просторі імен, що й OpenClaw. Натомість задайте явний зовнішньо доступнийcommands.callbackUrl.
Проблеми з кнопками
Проблеми з кнопками
- Кнопки відображаються як білі прямокутники: агент може надсилати неправильно сформовані дані кнопок. Перевірте, що кожна кнопка має поля
textіcallback_data. - Кнопки відображаються, але натискання нічого не роблять: перевірте, що
AllowedUntrustedInternalConnectionsу конфігурації сервера Mattermost містить127.0.0.1 localhost, аEnablePostActionIntegrationмає значенняtrueу ServiceSettings. - Кнопки повертають 404 під час натискання:
idкнопки, ймовірно, містить дефіси або підкреслення. Маршрутизатор дій Mattermost ламається на небуквено-цифрових ID. Використовуйте лише[a-zA-Z0-9]. - Журнали Gateway показують
invalid _token: невідповідність HMAC. Перевірте, що ви підписуєте всі поля контексту (не підмножину), використовуєте відсортовані ключі та компактний JSON (без пробілів). Дивіться розділ HMAC вище. - Журнали Gateway показують
missing _token in context: поле_tokenвідсутнє в контексті кнопки. Переконайтеся, що воно включене під час створення навантаження інтеграції. - Підтвердження показує сирий ID замість назви кнопки:
context.action_idне відповідаєidкнопки. Встановіть обидва в однакове очищене значення. - Агент не знає про кнопки: додайте
capabilities: ["inlineButtons"]до конфігурації каналу Mattermost.
Пов’язане
- Маршрутизація каналів - маршрутизація сеансів для повідомлень
- Огляд каналів - усі підтримувані канали
- Групи - поведінка групових чатів і контроль згадок
- Спарювання - автентифікація DM і потік спарювання
- Безпека - модель доступу та посилення безпеки