Каналы уведомлений
Mockarty поддерживает отправку уведомлений через внешние мессенджеры — Telegram, Slack, Discord, Microsoft Teams и другие. Пользователи получают оповещения о результатах тестов, анномалиях фаззинга, дрейфе контрактов и системных событиях прямо в привычный мессенджер.
Начните с шагов ниже. Если вы хотите только получать уведомления, понадобится
канал, который администратор уже сделал доступным.
Кто настраивает уведомления
- Администратор добавляет канал в Админ-панель → Каналы уведомлений
и отправляет тестовое сообщение. Здесь задаются данные для подключения к
внешнему сервису. - Пользователь открывает Настройки → Мои каналы уведомлений, подключается
к доступному каналу и выбирает нужные события. - Для общего командного канала администратор пространства создаёт подписку
в Настройки → Колбэки пространства → Командные каналы. В ней выбирают
события и режим доставки: сразу или сводкой.
Mockarty отправляет выбранные события через подключённый сервис. Результат
доставки виден в журнале. Ниже перечислены доступные сервисы и шаги настройки.
Закрытие формы подписки не отменяет уже отправленный запрос. Его результат показывается, пока вы остаётесь на той же странице и в том же пространстве. Смена страницы или пространства закрывает форму; поздний ответ не меняет новый экран. Если исход неизвестен, проверьте список командных подписок перед повторным созданием.
Если каталог событий или каналов не загрузится за 15 секунд, форма покажет ошибку и кнопку Повторить. Повтор загрузки запускается вручную; открытие или закрытие формы не повторяет запрос создания подписки.
Как выбрать режим доставки
Выберите Сразу, чтобы отправлять каждое событие командного канала отдельно.
Выберите Дайджест раз в 5 или 15 минут, раз в час либо раз в день, чтобы получать
одно сообщение с количеством событий каждого вида. Режим задаётся при создании
подписки в Настройки → Колбэки пространства → Командные каналы (поле
digestMode в API и MCP-инструменте). Сводка может прийти в течение минуты
после окончания выбранного периода.
Пока события собираются, журнал доставки показывает digesting. После
отправки появится delivered или failed с причиной ошибки.
Сводка использует те же названия событий, что и уведомления в Mockarty. По
умолчанию текст английский. Администратор может установить
MOCKARTY_DIGEST_LANGUAGE=ru для русского текста. Если задан
MOCKARTY_PUBLIC_URL, сообщение содержит ссылку на полный список уведомлений
в /ui/notifications.
Если внешний сервис временно недоступен, Mockarty повторит отправку. Отключение
события, разрыв подключения или смена получателя остановят ожидающую доставку
по старому адресу. Остановленная попытка останется в журнале доставки.
Поддерживаемые каналы
| Канал | Тип | Как работает |
|---|---|---|
| Telegram | Bot API | Админ создаёт бота через @BotFather, пользователи подключаются через deeplink |
| Slack | Bot Token / Webhook | DM через bot token + поиск по email, или webhook в канал |
| Discord | Webhook | Webhook уровня канала, привязка к пользователю не нужна |
| Microsoft Teams | Workflow Webhook | Adaptive Card через Power Automate Workflow |
| Mattermost | Webhook | Slack-совместимый входящий вебхук |
| Rocket.Chat | Webhook | Slack-совместимый входящий вебхук |
| Пачка (Pachca) | Bot API | Личные сообщения через бот-API Пачки |
| VK Teams | Bot API | Сообщения через VK Teams Bot API (поддерживается self-hosted адрес API) |
| PagerDuty | Events API v2 | Создаёт инциденты для критичных алертов |
| OpsGenie | Alert API | Создаёт алерты с маппингом приоритетов |
| Google Chat | Webhook | Webhook уровня пространства |
| Webex | Bot API | DM через bot token + email |
| Generic Webhook | HTTP POST | Любой URL с опциональной HMAC подписью |
Настройка администратором
Добавление канала
- Откройте Админ-панель → Каналы уведомлений
- Нажмите Добавить канал
- Выберите тип канала
- Заполните конфигурацию (следуйте подсказкам для каждого типа)
- (Опционально) Укажите Namespace — оставьте пустым, чтобы сделать канал глобальным (виден в каждом namespace), либо введите конкретное имя namespace, чтобы ограничить область видимости. Это поле можно безопасно изменить позднее через обновление.
- Нажмите Сохранить
- Используйте кнопку Тест для проверки подключения
Обновление канала (без раскрытия секретов)
При редактировании существующего канала не нужно повторно вводить токены, webhook URL или другие чувствительные поля — UI отправляет пустую строку для полей, которые вы оставили незаполненными, а сервер сохраняет ранее записанное значение для них. Перезаписываются только те поля, которые вы действительно заполнили. Это позволяет переименовать канал, переключить его enabled, или перенести между namespace без повторного раскрытия секретов.
Журнал аудита администратора
Каждое изменение канала, инициированное администратором, записывается в журнал аудита (просмотр в Админ-панель → Журнал аудита). Три кода действий идентифицируют события:
| Действие | Когда срабатывает | Захватываемые поля |
|---|---|---|
create_notification_channel |
Новый канал сохранён | type, name, enabled, актор, IP, namespace |
update_notification_channel |
Успешный PUT канала | type, name, enabled, актор, IP, namespace |
delete_notification_channel |
Успешный DELETE канала | type, name (снимок перед удалением), актор, IP, namespace |
Секретные поля (токены ботов, webhook URL, пароли) никогда не попадают в журнал аудита — записываются только публичные метаданные. Используйте этот журнал, чтобы отследить, кто настроил канал, когда он был отключён или какой администратор удалил получателя, переставшего получать алерты.
Примеры настройки
Telegram
- Откройте Telegram, найдите @BotFather
- Отправьте
/newbot, следуйте инструкциям для создания бота - Скопируйте токен бота (формат:
123456789:ABCdef...) - В Mockarty Админ → Каналы → Добавить → Telegram:
- Bot Token: вставьте токен
- Bot Username:
@YourBotName(опционально, для отображения)
- Сохраните и включите
Пользователи подключатся нажав deeplink, который откроет бота в Telegram.
Slack
Вариант А: Bot Token (рекомендуется для личных сообщений)
- Перейдите на api.slack.com/apps → Create New App
- Добавьте Bot Token Scopes:
chat:write,users:read.email - Установите в workspace, скопируйте Bot Token (
xoxb-...) - В Mockarty: вставьте как Bot Token
Пользователи вводят свой email Slack для получения DM.
Вариант Б: Incoming Webhook (уровень канала)
- В Slack App → Incoming Webhooks → Add New Webhook
- Выберите канал, скопируйте URL
- В Mockarty: вставьте как Webhook URL
Discord
- В Discord: Настройки сервера → Интеграции → Вебхуки → Создать вебхук
- Выберите канал, скопируйте URL вебхука
- В Mockarty: вставьте как Webhook URL
Привязка к пользователю не нужна — сообщения идут в канал.
Microsoft Teams
- В канале Teams: нажмите
...→ Workflows - Выберите “Post to a channel when a webhook request is received”
- Пройдите мастер настройки, скопируйте URL
- В Mockarty: вставьте как Webhook URL
Примечание: Старые URL коннекторов Office 365 выводятся из эксплуатации. Используйте Workflows (Power Automate).
PagerDuty
- В PagerDuty: Services → выберите сервис → вкладка Integrations
- Add Integration → Events API v2
- Скопируйте Integration Key
- В Mockarty: вставьте как Integration Key (
routing_key) - Опционально: укажите Severity — одно из
critical,error,warning,info(если не указано, применяется значение по умолчанию для типа события)
OpsGenie
- В OpsGenie: Teams → выберите команду → Integrations → Add integration → API
- Скопируйте API Key
- В Mockarty: вставьте как API Key
- Выберите Region —
us(api.opsgenie.com) илиeu(api.eu.opsgenie.com). Неверный регион приводит к молчаливым сбоям доставки.
Тестирование канала
После сохранения нажмите кнопку Test на любом канале, чтобы отправить тестовое уведомление. Для каналов, требующих получателя (Telegram, Slack), потребуется указать chat ID или email.
Настройка пользователем
Подключение к каналам
- Перейдите в Настройки → Мои каналы уведомлений
- Доступные каналы от администратора отображаются в Доступные каналы
- Нажмите Подключить на нужном канале
Подключение Telegram
- Нажмите Подключить на канале Telegram
- Откроется deeplink — нажмите, чтобы перейти к боту в Telegram
- Нажмите Start в чате с ботом
- Подключение подтверждается автоматически
Подключение Slack
- Нажмите Подключить на канале Slack
- Введите ваш email в workspace Slack
- Mockarty найдёт ваш Slack ID и будет отправлять DM напрямую
Webhook-каналы (Discord, Teams и др.)
Эти каналы настраиваются на уровне канала — нажмите Подключить, и всё готово. Все пользователи, подключённые к одному и тому же каналу, получают одинаковые сообщения.
Матрица предпочтений
После подключения настройте, какие события вызывают уведомления. Матрица предпочтений показывает все события, доставляемые в каналы (их десятки), сгруппированные по категориям — прогоны тестов, нагрузка, фаззинг, контракты, упоминания и личные сообщения в чате, встречи, трекер задач, ревью, лицензия и системные алерты. У каждой колонки-канала есть переключатель «Все» — включить/выключить весь канал одним кликом, а каждое событие настраивается по каналам индивидуально.
Несколько примеров канонических ID событий:
| ID события | Описание |
|---|---|
test.run.completed |
Прогон коллекции API-тестов завершён |
perf.test.failed |
Нагрузочный тест не смог доработать до конца |
perf.test.threshold_breach |
Нагрузочный тест завершился, но один или несколько порогов не выдержаны |
fuzzing.finding.new |
Фаззер обнаружил новую уязвимость или аномалию |
contract.drift_detected |
Обнаружен дрейф контракта между записанным и live-ответом |
alert.triggered |
Сработало правило аудита с notification_type: channel (см. Безопасность и соответствие). Событие несёт важность алерта, пространство имён, сущность, о которой он, и — если у сущности есть страница — кнопку, которая её открывает. Такие алерты получает канал, привязанный в вашем пространстве имён; eventType в notification_config правила называет событие для транспортов и на этом пути фильтром не является |
system.alert |
Системный инцидент: настроенная шина источника задач (NATS/Kafka) недоступна около минуты или снова доступна. Узел продолжает работать; оповещение получает оператор, сохранивший источник задач |
Полный актуальный список отдаёт GET /api/v1/channels/preferences (поле eventTypes) — UI строит матрицу из него, поэтому новые типы событий появляются автоматически.
Эскалация непрочитанных уведомлений
Если уведомление в «колокольчике» слишком долго остаётся непрочитанным, Mockarty может эскалировать его дайджестом в один из подключённых мессенджеров. Включается в Настройки → Мои каналы уведомлений → Эскалация: выберите целевой канал и порог (сколько уведомление может оставаться непрочитанным до эскалации). Функция опциональна и по умолчанию выключена; для включения нужен хотя бы один подключённый канал.
API: GET /api/v1/notifications/escalation / PUT /api/v1/notifications/escalation.
Политика уведомлений: тихие часы, сводки и маршрутизация
Настройки → Политика уведомлений задаёт правила для всего пространства имён; кнопка Уведомления тест-плана — только для этого плана, а у каждого человека могут быть свои. При конфликте побеждает самое конкретное правило (план, затем человек, затем пространство, затем администратор); дополнительные каналы складываются по всем уровням.
- Заглушённые события и Заглушить до — событие не доходит ни до кого на этом уровне: ни в колокольчик, ни на почту, ни в мессенджер.
- Тихие часы (UTC) — в этом окне уведомления на почту и в мессенджеры копятся и приходят одной сводкой, когда окно закончится. Колокольчик в приложении показывает события сразу. С флажком Critical всё равно отправлять критичное событие приходит немедленно.
- Дайджест — вне тихих часов уведомления выбранных уровней важности на почту и в мессенджеры собираются и уходят одним сообщением раз в N минут. Критичные события не задерживаются. С Минимумом событий для отправки сводка ждёт, пока их наберётся столько, — но не дольше суток.
- Маршрутизация по severity и Постоянные получатели — событие дополнительно уходит в выбранные каналы (например, каждое критичное — в дежурный канал Slack), независимо от тихих часов получателя. Канал получает каждое событие один раз, сколько бы людей оно ни касалось.
- Правила для отдельного события (задаются через API или агентом — инструмент
notification_policy) — сменить его важность, дать ему свои каналы (заменить оставляет только их) или подавлять повторы: с подавлять 10m одно и то же событие про один и тот же план или запуск приходит человеку не чаще раза в 10 минут.
Сводка приходит как событие Сводка уведомлений — её можно заглушить или направить в канал, как любое другое.
Боты мессенджеров — двусторонние команды
Каналы Telegram, Slack, VK Teams, Mattermost и Rocket.Chat — не только исходящая труба: когда канал настроен для интерактива, бот также принимает команды — одинаковый набор на всех мессенджерах.
Подключение аккаунта
Бот действует только от имени известных ему пользователей:
- Telegram — подключение из Настройки → Мои каналы уведомлений (deeplink → нажать Start).
- VK Teams, Mattermost, Rocket.Chat — нажмите Подключить у канала в Настройки → Мои каналы уведомлений. Mockarty покажет точную команду с одноразовым токеном (действует несколько минут) и кнопку Скопировать команду; отправьте её, как описано ниже, — бот ответит, когда аккаунт будет привязан.
- VK Teams — отправьте боту
/start <токен>. - Slack — запросите одноразовый код через
POST /api/v1/channels/slack/connect(или кнопку «Подключить» в настройках), затем отправьте боту в личкуconnect <код>. - Mattermost — выполните
/mockarty link <токен>в Mattermost. - Rocket.Chat — отправьте боту
mockarty link <токен>(триггер-слово, затем команда) — в комнате, к которой привязан outgoing webhook, или в личном сообщении боту.
Незнакомый пользователь, написавший боту, получает инструкцию по подключению, а не сухой отказ.
Настройка бота Mattermost
Mattermost управляет ботом через slash-команду (боту не нужно оставаться на связи):
- В админке Mockarty добавьте канал Mattermost и заполните Server URL + Slash Command Token (токен получите из Mattermost на следующем шаге).
- В Mattermost: Integrations → Slash Commands → Add — команда с триггером
mockarty, Request URLhttps://<ваш-mockarty>/api/v1/messenger/webhook/mattermost/<id-канала>, метод POST. Mattermost покажет Token команды — вставьте его в поле Slash Command Token канала Mockarty и сохраните. - Пользователи пишут
/mockarty <команда>(например/mockarty ask как замокать gRPC). Ответ команды виден только отправителю; ссылка на встречу публикуется в канал.
Поле Webhook URL остаётся опциональным — задайте его, если также нужны исходящие уведомления; интерактивный бот работает от Server URL + Slash Command Token.
Настройка бота Rocket.Chat
Rocket.Chat управляет ботом через исходящий вебхук (у Rocket.Chat нет интеграции slash-команд как у Mattermost):
- В админке Mockarty добавьте канал Rocket.Chat и заполните Server URL + Outgoing Webhook Token (токен получите из Rocket.Chat на следующем шаге).
- В Rocket.Chat: Admin → Integrations → New → Outgoing — событие Message Sent, триггер-слово
mockarty, URLhttps://<ваш-mockarty>/api/v1/messenger/rocketchat/outgoing/<id-канала>. Rocket.Chat покажет Token — вставьте его в поле Outgoing Webhook Token канала Mockarty и сохраните. - Пользователи пишут
mockarty <команда>(напримерmockarty ask как замокать gRPC). Поскольку ответы исходящего вебхука публичны, вывод команды публикуется в комнату. - Дополнительно задайте Bot Auth Token + Bot User ID (personal-access-token бот-пользователя Rocket.Chat), чтобы включить membership-guard и ретрансляцию звонков через REST API.
Поле Webhook URL остаётся опциональным — задайте его, если также нужны исходящие уведомления; интерактивный бот работает от Server URL + Outgoing Webhook Token.
Команды
| Команда | Что делает |
|---|---|
/menu |
Быстрые действия inline-кнопками (новая встреча, задачи, статус, помощь) |
/meet |
Создать ссылку на видеовстречу (встреча в Обсуждениях) |
/tasks |
Ваши открытые задачи из трекера |
/do <запрос> |
Поручить задачу AI-агенту Mockarty |
/ask <вопрос> |
Спросить базу знаний |
/status |
Статус бота |
/help |
Все команды |
В групповых чатах обращайтесь к боту как /команда@ИмяБота (Telegram) или упоминанием (Slack @bot, VK Teams). Slack дополнительно поддерживает slash-команды через настраиваемый endpoint и всегда проверяет подписи запросов через Signing Secret канала.
Голосовые сообщения (Telegram, VK Teams)
Отправьте боту голосовое (или аудиофайл; в Telegram — и видео-кружок) — он распознает речь механизмами Mockarty и поступит по смыслу:
- В личной переписке распознанный текст становится задачей для AI-агента Mockarty — «голосовой
/do». Бот отвечает, что услышал, передаёт задачу агенту под вашей учётной записью и публикует ответ агента в чат, когда тот закончит. Если на стенде доступен синтез речи, ответ также приходит голосовым сообщением (Telegram и VK Teams) — спросили голосом, услышали ответ. Требуется привязка Telegram к аккаунту Mockarty. - В группе бот публикует транскрипт для всех. Если группа привязана к обсуждению (
/link), транскрипт попадает и в накопленную историю —/summarizeи/topicsучитывают сказанное голосом.
Принимаются голосовые до 10 минут. Транскрипция должна быть доступна на стенде (распознающий раннер онлайн или настроен внешний API распознавания) — иначе бот честно сообщит об этом.
Привязка группового чата к обсуждению
Группу Telegram, VK Teams или Slack можно привязать к обсуждению Mockarty: создайте токен из панели обсуждения (Синхронизация → <мессенджер>) и отправьте в группе /link <токен>. После этого бот хранит недавнюю историю, /summarize публикует дайджест в привязанное обсуждение, а /topics сегментирует накопленную историю в темы базы знаний.
В Slack привязка дополнительно требует подписки приложения на событие message.channels и присутствия бота в канале — так бот видит переписку, которую буферизует для /summarize и /topics.
Модерация групп
В группах боты Telegram и VK Teams могут охранять членство полным набором /guard off | warn | grace | kick. Slack поддерживает /guard off | warn | kick (привязанный пользователь включает; бот предупреждает — или удаляет с правом channels:manage и событием member_joined_channel — неавторизованного вошедшего); grace доступен в Telegram и VK Teams. Mattermost тоже поддерживает /mockarty guard off | warn | kick, но — так как Mattermost не даёт боту событий входа — охрана работает периодическим опросом состава и потому требует опционального bot-токена (бот-аккаунт с manage_channel_members) в поле Bot Token канала; без него охрана выключена. Менять политику может только администратор чата — кроме Slack, где это может любой участник с подключённым к Mockarty аккаунтом: в Slack нет понятия администратора канала, которое бот мог бы проверить. В режиме grace новичок, не подключённый к Mockarty, получает приветствие и окно времени на подключение, после чего удаляется; warn только предупреждает, kick удаляет сразу, off выключает охрану. Администраторы чата всегда защищены — охрана никогда не предупреждает и не удаляет администратора (и самого бота), поэтому включённый kick не тронет тех, кто управляет чатом.
Режим доставки Telegram: pull или webhook
По умолчанию Telegram-бот опрашивает обновления (работает без входящей связности). Для меньшей задержки канал можно переключить в режим webhook — Mockarty зарегистрирует вебхук в Telegram и будет принимать обновления на публичном endpoint, защищённом автоматически сгенерированным секретом:
POST /api/v1/admin/channels/:id/telegram/webhook
{"enabled": true} # включить webhook (rotateSecret: true — перевыпустить секрет)
Режим также редактируется в форме настроек канала (Mode: pull / webhook). Переключение туда-обратно не требует рестарта.
Интеграция с AI-агентом
AI-агент (сабагент-нотификатор) может отправлять уведомления через системные каналы без credentials:
list_system_channels— возвращает доступные каналы с IDsend_via_channel— отправляет уведомление через канал по ID
Пример диалога с агентом:
Пользователь: "Отправь сводку результатов тестов за сегодня в Slack"
Агент: [вызывает list_system_channels → находит канал Slack]
Агент: [вызывает send_via_channel с channel_id, title, text]
Без AI-агента
Система уведомлений полностью работает без AI-агента:
- Автоматические уведомления: События (завершение тестов, аномалии фаззинга и т.д.) автоматически рассылаются через EventBus → Channel Dispatcher
- Предпочтения пользователя: Управляйте маршрутизацией через матрицу предпочтений
- Администраторские рассылки: Админ может тестировать каналы прямо из админ-панели
API Endpoints
API администратора
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/v1/admin/channels |
Список всех каналов |
| GET | /api/v1/admin/channels/types |
Поддерживаемые типы каналов |
| POST | /api/v1/admin/channels |
Создать канал |
| PUT | /api/v1/admin/channels/:id |
Обновить канал |
| DELETE | /api/v1/admin/channels/:id |
Удалить канал |
| POST | /api/v1/admin/channels/:id/test |
Тестировать канал |
| GET | /api/v1/admin/channel-delivery/dlq |
Список недоставленных сообщений |
| GET | /api/v1/admin/channel-delivery/retry-queue |
Очередь ожидающих повторов |
| POST | /api/v1/admin/channel-delivery/dlq/:id/requeue |
Вернуть запись из DLQ в очередь повторов |
| GET | /api/v1/admin/channel-templates |
Список шаблонов сообщений канала |
| POST | /api/v1/admin/channel-templates |
Создать/обновить шаблон сообщения |
| DELETE | /api/v1/admin/channel-templates/:id |
Удалить переопределение шаблона |
| POST | /api/v1/admin/channel-templates/preview |
Отрендерить шаблон на тестовом payload без сохранения |
| GET | /api/v1/admin/channel-templates/snippets |
Каталог готовых сниппетов для редактора шаблонов |
| GET | /api/v1/notifications/catalog |
Каталог зарегистрированных типов событий (используется UI-роутером) |
Надёжность доставки
Каждая попытка доставки записывается в channel_delivery_log со статусом, который проходит путь pending → delivered или pending → retrying → dead_letter при исчерпании max_retries. В админ-панели Каналы уведомлений → Журнал доставки доступны две вкладки:
- Недоставленные – доставки, которые использовали все попытки. Одним кликом можно вернуть запись обратно в очередь повторов.
- Очередь повторов – доставки, ожидающие следующей попытки, отсортированные по
next_retry_at.
Фоновый worker, работающий только на лидер-ноде, забирает из очереди просроченные записи, применяет экспоненциальную задержку и переводит строку в dead_letter как только retry_count >= max_retries.
Шаблоны сообщений по типам событий
Диспетчер рендерит каждое уведомление через шаблонный движок с поддержкой переопределений. Порядок поиска (от самого конкретного к наименее):
(eventType, channelType, lang)– полностью конкретное переопределение(eventType, channelType, "")– любой язык(eventType, "", lang)– любой канал(eventType, "", "")– любой канал, любой язык- Встроенное значение по умолчанию из кода
Шаблоны используют синтаксис Go text/template и имеют доступ к исходному payload события ({{ .Payload.fieldName }}), заголовку ({{ .Title }}), телу ({{ .Body }}) и глубокой ссылке ({{ .Link }}).
Переопределения управляются через Каналы уведомлений → Шаблоны сообщений в админ-интерфейсе или напрямую через endpoints /api/v1/admin/channel-templates.
API пользователя
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /api/v1/channels |
Доступные каналы |
| GET | /api/v1/channels/bindings |
Мои привязки |
| POST | /api/v1/channels/bindings |
Подключиться к каналу |
| PUT | /api/v1/channels/bindings/:id |
Обновить привязку |
| DELETE | /api/v1/channels/bindings/:id |
Отключиться |
| POST | /api/v1/channels/telegram/connect |
Получить deeplink Telegram |
| GET | /api/v1/channels/preferences |
Получить предпочтения |
| PUT | /api/v1/channels/preferences |
Обновить предпочтение |
Смотрите также
- Вебхуки и обратные вызовы – Вебхуки уровня мока для HTTP, Kafka и RabbitMQ
- Руководство по интеграциям – Токены интеграции, ноды resolver, runner agent и CI/CD
- Руководство администратора – Управление пользователями, пространствами имён и системная конфигурация
- Справочник API – Полная документация REST API