Каналы уведомлений — это механизм доставки оповещений о блокчейн-событиях. Когда 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"
}
}
}'Каждая доставка вебхука отправляет TransactionAlertPayload с тремя полями верхнего уровня:
{
"item": { /* Объект транзакции */ },
"references": {
"tokens": { /* GID токена -> детали токена */ },
"blockchains": { /* GID сети -> детали блокчейна */ },
"addresses": { /* адрес -> метка */ }
},
"is_test_message": false
}- item — полный объект транзакции, включая события (переводы, комиссии) и записи активности с дельтами по адресам.
- references — справочные данные для токенов, блокчейнов и адресов, упомянутых в транзакции. Дополнительные API-вызовы для получения названий и символов не нужны.
- is_test_message —
true, если payload был отправлен тестовым действием,falseдля реальных блокчейн-событий.
Верификация подписей вебхуков пока недоступна. В настоящее время API доставляет вебхуки без криптографических подписей. Эта функция запланирована в одном из ближайших обновлений.
Каждый вебхук-запрос включает четыре заголовка для верификации:
| Заголовок | Описание |
|---|---|
X-Webhook-Signature | HMAC-SHA256 дайджест тела запроса |
X-Webhook-Timestamp | Unix-временная метка отправки события |
X-Webhook-Idempotency-Key | Уникальный идентификатор доставки для дедупликации |
X-Webhook-Event | Тип события (transaction_alert или test) |
Для проверки подлинности вебхуков см. Верификация подписей вебхуков.
Telegram-каналы отправляют форматированные сообщения в чат Telegram через Bot API.
- Создайте бота через @BotFather и сохраните токен бота.
- Добавьте бота в целевой чат (группу, канал или личные сообщения).
- Получите ID чата (используйте @userinfobot или Telegram API
getUpdates).
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_token | string | Токен от @BotFather ({bot_id}:{auth_token}) |
chat_id | integer | ID целевого чата (положительный для ЛС, отрицательный для групп/каналов) |
language | string | Язык сообщений ("en", "ru" и т.д.) |
thread_id | integer | ID темы форума (0 — без привязки к конкретной теме) |
Логи доставки фиксируют результат каждой попытки отправки уведомления для канала — как HTTP-вызовов вебхуков, так и сообщений Telegram-бота. Используйте их для проверки того, что уведомления доходят до назначения, и для диагностики неудачных доставок.
Получите логи с помощью GET /notification_channels/{notification_channel_id}/logs. Ответ представляет собой пагинированный список, отсортированный по убыванию даты доставки.
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
is_success | boolean | Фильтр по результату. true — только успешные доставки (HTTP 2xx), false — только неудачные. Не указывайте для получения всех. |
event_type | string | Фильтр по типу события: transaction_alert (реальные события) или test (тестовые доставки). |
page | integer | Номер страницы для пагинации. |
limit | integer | Количество элементов на странице. |
# Получить неудачные доставки для канала
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 асинхронно.
- Используйте отдельные каналы для разных окружений (разработка, стейджинг, продакшн) и разных целей (критические оповещения и рутинные уведомления).
- Архивируйте, а не удаляйте. Архивированные каналы можно восстановить позже без потери конфигурации.
- Аутентификация — примеры кода для верификации подписей
- Ошибки и устранение неполадок — устранение проблем с доставкой вебхуков
- Platform API — полная документация эндпоинтов каналов уведомлений