Награды за голосование
Награды за голосование используют Webhook-событие server.vote: обработчик получает событие, запрашивает данные голоса через API, находит игрока в вашей системе и выдает награду один раз.
Для интеграции этого метода сначала настройте Webhook проекта и проверяйте signature. Данные голоса запрашиваются через GET /votes/:vote_id.
Как работает сценарий
- Примите событие Webhook и проверьте signature. Если is_test равен
true, верните204без запроса голоса и без выдачи награды. - Убедитесь, что
event_typeравенserver.vote. - Возьмите
event_id: дляserver.voteэто ID голоса. - Получите данные голоса через GET /votes/:vote_id и найдите игрока в своей системе.
- Примените защиту от повторной обработки по
event_type+event_idи выдайте награду в той же транзакции. - Если награду нельзя выдать безопасно, верните ответ с ошибкой, исправьте причину и повторите доставку из интерфейса.
Пример выдачи награды
Допустим, игрок PlayerName проголосовал за сервер с ID 1, а ваша система должна начислить ему 100 монет.
- GAMEMONITORING отправляет Webhook с
event_type: server.voteиevent_id: 9824cabb-2203-437e-9b6c-aba43dde3e4b. - Ваш обработчик проверяет signature. Если подпись неверная, он возвращает
401и останавливается. - Обработчик запрашивает
GET /votes/9824cabb-2203-437e-9b6c-aba43dde3e4bи получает никнейм, сервер и пользователя. - В своей базе обработчик ищет локальный аккаунт по никнейму или по вашей привязке аккаунтов.
- В транзакции обработчик применяет защиту от повторной обработки по
server.vote+event_idи начисляет100монет. - Повторную доставку этого события обрабатывайте по тем же правилам защиты от повторной обработки.
Такой сценарий подходит не только для монет. Вместо баланса можно выдать предмет, роль, VIP-время, промокод или поставить задачу во внутреннюю очередь.
Событие голосования
Когда появляется голос за сервер, GAMEMONITORING отправляет событие server.vote. В теле события есть только данные доставки: event_type, event_id, is_test и signature. Полные данные голоса нужно запросить отдельно.
event_id в этом событии является ID голоса. Не используйте тело Webhook как источник никнейма, сервера или пользователя: эти данные приходят из API.
Получение данных голоса
Используйте event_id как vote_id и запросите данные голоса через GET /votes/:vote_id:
Для выдачи награды обычно нужны response.nickname, response.server и публичные данные response.user. Если награда зависит от конкретного сервера, обязательно проверяйте response.server.id.
Пример сопоставления: response.nickname ищет аккаунт игрока в вашей базе, response.server.id выбирает правило награды для сервера, а response.user.id можно сохранить в журнале выдач как ID пользователя GAMEMONITORING, который совершил голос.
Если API временно недоступен или вернул неожиданный ответ, не выдавайте награду без проверки. Верните код ошибки, исправьте причину и повторите доставку из интерфейса.
Полный пример
Пример проверяет подпись, получает данные голоса, защищает награду от повторной выдачи и начисляет ее игроку. Название таблицы пользователей, поле баланса и правило поиска игрока замените на структуру вашей системы.
Перед запуском примера настройте Webhook проекта, проверьте GET /votes/:vote_id и замените SQL-запросы обновления пользователя на вашу модель аккаунтов.