Боты с Mattermost
Скрипты Mattermost живут на трёх вещах — входящих вебхуках, слеш-командах и исходящих вебхуках. Все три работают в Kontext без правок скрипта: меняется только адрес в настройке. Одна оговорка — входящий вебхук пишет в свой канал, поле channel из тела не действует: скрипту, который шлёт в разные каналы, нужен вебхук на каждый канал.
Что работает
| В Mattermost | В Kontext | Что поменять |
|---|---|---|
Входящий вебхук ({"text": "…"}, вложения, payload=) | «Интеграции → Вебхуки → Slack-совместимый» | Адрес вебхука в скрипте |
Слеш-команда (token, ответ {"response_type", "text"}) | Команда бота: карточка бота → «Команды» | Адрес скрипта — в настройке команды в Kontext |
Исходящий вебхук по словам-триггерам (ответ {"text", "response_type": "comment"}) | Подписка бота в формате «Mattermost»: карточка бота → «События» | Адрес скрипта и слова — в настройке подписки |
| Бот-аккаунт и его токен | Бот пространства и токен ktx_b_… | Вызовы API v4 переписать на API v1 |
Бот
Заведите его в «Пространство → Интеграции → Боты → Новый бот». От имени бота пишут его команды, подписки и — по желанию — входящие вебхуки («Писать от имени: бота» в настройке вебхука). Бот не занимает места в подписке и не зависит от того, в каких каналах сегодня человек, заведший интеграцию.
Бот видит и получает сообщения только из каналов, куда его добавили (карточка бота → «Каналы»).
Слеш-команда
- Карточка бота → «Команды» →
/имя, адрес скрипта, метод (POSTилиGET), описание и подсказка. - Kontext покажет проверочный токен — впишите его в скрипт вместо токена Mattermost.
Запрос содержит поля Mattermost (token, team_id, channel_id, channel_name, user_id, user_name, command, text, response_url, user_mentions, channel_mentions…) и заголовок Authorization: Token <токен>. Ответ — как в Mattermost: ephemeral видно только вызвавшему, in_channel пишет бот в канал (над ответом — кто вызвал); extra_responses, channel_id и response_url работают. Скрипт ждём до 30 секунд (после трёх вызвавший видит «ждём ответ…») и не повторяем — как и Mattermost.
Отличия: id в полях — C<число>, U<число>, T<число> вместо 26-значных строк; username, icon_url, goto_location и props в ответе не действуют — автор ответа всегда бот.
Исходящий вебхук
- Карточка бота → «События» → новая подписка, формат «Mattermost».
- Слова-триггеры и условие («первое слово» или «начинается с»), каналы, тип тела (JSON или форма) — как в Mattermost. Нужно хотя бы одно: слова или каналы.
Тело запроса — поля Mattermost (token, team_id, team_domain, channel_id, channel_name, timestamp, user_id, user_name, post_id, text, trigger_word, file_ids). Ответ {"text": "…", "response_type": "comment"} ложится в тред вызвавшего сообщения, без response_type — в канал; пишет его бот, username и icon_url не действуют. Сообщения вебхуков — входящих, ответов скриптов и ответов команд — исходящий вебхук не запускают, как и в Mattermost: два скрипта не заведут петлю.
Отличия: «Проверить» в Kontext запрос скрипту не шлёт — только проверяет адрес (скрипт Mattermost принял бы проверку за сообщение канала). Доставка, не прошедшая за 5 секунд, повторяется: через 1 минуту, 5 минут, 30 минут, 2 часа и 6 часов; журнал доставок — в карточке подписки.
Чего нет
- API Mattermost v4. Скрипты, которые ходят в
/api/v4/…, переписываются на API v1: он маленький и описан целиком. - Выбор канала из тела входящего вебхука. Поле
channelне действует: вебхук пишет в свой канал. Скрипту, который одним вебхуком раскладывал сообщения по разным каналам, нужно по вебхуку на канал.@channelи@hereиз тела будят канал, только если у вебхука отмечено «Будить канал». - Серверные плагины. Всё внешнее — только по HTTP: сервер общий для многих компаний.
- Интерактивные кнопки и диалоги в формате Mattermost (
integrationвattachments.actions,dialog.open) — пока нет. Кнопки и модальные окна работают в формате Slack — см. «Кнопки и окна».
Полное описание API — Документация → API.