Перейти к содержимому
Последнее обновление

Каналы уведомлений

Каналы уведомлений — это механизм доставки оповещений о блокчейн-событиях. Когда Vilna обнаруживает активность на ваших отслеживаемых адресах, уведомление отправляется через настроенные каналы.

Доступны два типа каналов: вебхук и Telegram.

Типы каналов: сравнение

ВебхукTelegram
ДоставкаHTTP POST на ваш эндпоинтСообщение бота в чат
ФорматJSON (TransactionAlertPayload)Форматированное текстовое сообщение
Лучше всего дляАвтоматизированные системы, бэкендыМониторинг людьми, оповещения
АутентификацияПользовательские заголовки + HMAC-подписьТокен бота от @BotFather

Вебхук-каналы

Вебхук-каналы отправляют HTTP POST запрос с JSON payload на ваш эндпоинт при обнаружении отслеживаемой транзакции.

Создание вебхук-канала

curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/notification_channels" \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Webhook",
    "config": {
      "kind": "webhook",
      "url": "https://api.example.com/webhooks/vilna",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    }
  }'

Структура payload вебхука

Каждая доставка вебхука отправляет TransactionAlertPayload с тремя полями верхнего уровня:

{
  "item": { /* Объект транзакции */ },
  "references": {
    "tokens": { /* GID токена -> детали токена */ },
    "blockchains": { /* GID сети -> детали блокчейна */ },
    "addresses": { /* адрес -> метка */ }
  },
  "is_test_message": false
}
  • item — полный объект транзакции, включая события (переводы, комиссии) и записи активности с дельтами по адресам.
  • references — справочные данные для токенов, блокчейнов и адресов, упомянутых в транзакции. Дополнительные API-вызовы для получения названий и символов не нужны.
  • is_test_messagetrue, если payload был отправлен тестовым действием, false для реальных блокчейн-событий.

Заголовки безопасности вебхука

Планируемая функция

Верификация подписей вебхуков пока недоступна. В настоящее время API доставляет вебхуки без криптографических подписей. Эта функция запланирована в одном из ближайших обновлений.

Каждый вебхук-запрос включает четыре заголовка для верификации:

ЗаголовокОписание
X-Webhook-SignatureHMAC-SHA256 дайджест тела запроса
X-Webhook-TimestampUnix-временная метка отправки события
X-Webhook-Idempotency-KeyУникальный идентификатор доставки для дедупликации
X-Webhook-EventТип события (transaction_alert или test)

Верификация подписи

Для проверки подлинности вебхуков см. Верификация подписей вебхуков.

Telegram-каналы

Telegram-каналы отправляют форматированные сообщения в чат Telegram через Bot API.

Настройка

  1. Создайте бота через @BotFather и сохраните токен бота.
  2. Добавьте бота в целевой чат (группу, канал или личные сообщения).
  3. Получите ID чата (используйте @userinfobot или Telegram API getUpdates).

Создание Telegram-канала

curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/notification_channels" \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ops Alerts",
    "config": {
      "kind": "telegram",
      "bot_token": "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789",
      "chat_id": -1001234567890,
      "language": "en",
      "thread_id": 0
    }
  }'

Поля конфигурации:

ПолеТипОписание
bot_tokenstringТокен от @BotFather ({bot_id}:{auth_token})
chat_idintegerID целевого чата (положительный для ЛС, отрицательный для групп/каналов)
languagestringЯзык сообщений ("en", "ru" и т.д.)
thread_idintegerID темы форума (0 — без привязки к конкретной теме)

Логи доставки

Логи доставки фиксируют результат каждой попытки отправки уведомления для канала — как HTTP-вызовов вебхуков, так и сообщений Telegram-бота. Используйте их для проверки того, что уведомления доходят до назначения, и для диагностики неудачных доставок.

Получите логи с помощью GET /notification_channels/{notification_channel_id}/logs. Ответ представляет собой пагинированный список, отсортированный по убыванию даты доставки.

Параметры запроса:

ПараметрТипОписание
is_successbooleanФильтр по результату. true — только успешные доставки (HTTP 2xx), false — только неудачные. Не указывайте для получения всех.
event_typestringФильтр по типу события: transaction_alert (реальные события) или test (тестовые доставки).
pageintegerНомер страницы для пагинации.
limitintegerКоличество элементов на странице.
# Получить неудачные доставки для канала
curl "https://${VILNA_NAMESPACE}.vilna.app/notification_channels/{notification_channel_id}/logs?is_success=false" \
  -H "X-Api-Key: your-api-key"

Когда использовать логи доставки:

  • После создания и тестирования канала убедитесь, что тестовая доставка зафиксирована как успешная.
  • Если уведомления перестали приходить, запросите логи с is_success=false, чтобы увидеть HTTP-коды ответов и детали ошибок вашего эндпоинта.
  • Используйте фильтр event_type=test, чтобы отделить тестовый трафик от продакшн-доставок.

Жизненный цикл канала

Каналы проходят простой жизненный цикл: создание, тестирование, использование, архивация, восстановление.

ДействиеЭндпоинтОписание
СозданиеPOST /notification_channelsСоздать новый канал
ТестированиеPOST /notification_channels/{notification_channel_id}/actions/testОтправить тестовый payload для проверки доставки
АрхивацияPOST /notification_channels/{notification_channel_id}/actions/archiveМягко отключить канал
ВосстановлениеPOST /notification_channels/{notification_channel_id}/actions/restoreПовторно включить архивированный канал

Тестирование канала

Всегда тестируйте канал после создания, чтобы убедиться в работоспособности доставки:

curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/notification_channels/{notification_channel_id}/actions/test" \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "message_type": "transaction_alert" }'

Тест отправляет пример TransactionAlertPayload с is_test_message: true.

Лучшие практики

  • Тестируйте перед использованием. Отправляйте тестовый payload сразу после создания канала.
  • Проверяйте подписи вебхуков (когда будет доступно). Всегда валидируйте X-Webhook-Signature для подтверждения подлинности payload.
  • Обрабатывайте дубликаты. Используйте X-Webhook-Idempotency-Key для пропуска повторных доставок.
  • Отвечайте быстро. Вебхук-эндпоинты должны возвращать HTTP 2xx в течение 10 секунд. Обрабатывайте payload асинхронно.
  • Используйте отдельные каналы для разных окружений (разработка, стейджинг, продакшн) и разных целей (критические оповещения и рутинные уведомления).
  • Архивируйте, а не удаляйте. Архивированные каналы можно восстановить позже без потери конфигурации.

Дополнительные материалы