Боты с 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

Бот

Заведите его в «Пространство → Интеграции → Боты → Новый бот». От имени бота пишут его команды, подписки и — по желанию — входящие вебхуки («Писать от имени: бота» в настройке вебхука). Бот не занимает места в подписке и не зависит от того, в каких каналах сегодня человек, заведший интеграцию.

Бот видит и получает сообщения только из каналов, куда его добавили (карточка бота → «Каналы»).

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

  1. Карточка бота → «Команды» → /имя, адрес скрипта, метод (POST или GET), описание и подсказка.
  2. 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 в ответе не действуют — автор ответа всегда бот.

Исходящий вебхук

  1. Карточка бота → «События» → новая подписка, формат «Mattermost».
  2. Слова-триггеры и условие («первое слово» или «начинается с»), каналы, тип тела (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.