Журнал об индустрии iGaming
Русский
MediaSoftware

СпортсбукГайды

Как работает API фида коэффициентов: от снапшота до расчёта

Как устроен API фида коэффициентов спортсбука: события, рынки и исходы, снапшоты и дельты, приостановки, приём ставок и расчёт — объяснение для операторов.

Экран спортсбука выглядит статичным: список матчей, столбец коэффициентов. Под ним фид коэффициентов — это поток из тысяч мелких изменений, и задача оператора — применить каждое из них в правильном порядке. Этот гайд проходит по потоку от первого запроса до рассчитанной ставки.

1. Модель данных

Почти каждый фид использует одну и ту же иерархию:

  • Вид спорта: футбол, теннис, киберспорт.
  • Турнир или лига: Premier League, ATP Tokyo, League of Legends Worlds.
  • Событие: один матч со временем начала и участниками.
  • Рынок: один вопрос о событии, например 1X2, тотал больше/меньше 2,5 гола или фора по картам.
  • Исход: один ответ с коэффициентом и статусом (активен, приостановлен, рассчитан).

У каждого элемента есть стабильный идентификатор. Большинство ошибок интеграции возникает, когда названия используют как идентификаторы: написание названий команд меняется, ID — нет.

2. Снапшот, затем дельты

При старте клиент запрашивает снапшот — полное текущее состояние. Дальше он получает дельты: короткие сообщения вида «эта цена сдвинулась», «этот рынок приостановлен», «это событие началось».

Хорошие фиды нумеруют дельты. Nocturn Sport, например, описывает свой фид как полный снапшот плюс версионированные дельты. Если у клиента версия N, а приходит N+2, он понимает, что сообщение потеряно, и перезагружается, а не показывает устаревший коэффициент. Фиды без версий вынуждают клиента гадать — а так букмекеры и оказываются с позавчерашними коэффициентами в линии.

3. Push и pull

В лайве футбольные коэффициенты могут меняться несколько раз в минуту, поэтому лайв-фиды обычно отправляют (push) сообщения по постоянному соединению. Прематч-цены движутся достаточно медленно, чтобы их можно было запрашивать (pull) по HTTP раз в несколько секунд. Многие операторы используют оба способа: pull для прематч-каталога, push для лайва.

4. Приостановки

Приостановка — это сигнал фида «прямо сейчас ставки на это не принимать». Поводы: гол, пенальти, брейк на подаче, окончание карты или потеря поставщиком собственного источника данных. Клиент должен применять приостановки быстрее всего остального: цена, принятая в первые секунды после гола, — классический способ потерять деньги.

Прематч-рынки тоже закрываются до начала. Nocturn Sport, например, закрывает их за минуту до старта.

5. Приём ставки

Если API не ограничивается публикацией цен, приём ставки идёт по схеме:

  1. Клиент отправляет выбор, показанный им коэффициент и сумму с уникальным ID запроса.
  2. Сервер проверяет, что цена всё ещё действительна, а рынок открыт.
  3. Ставка принимается, отклоняется или предлагается новый коэффициент.
  4. Если сеть дала сбой, клиент повторяет запрос с тем же ID, и сервер возвращает исходный ответ, не создавая вторую ставку.

Последний шаг — идемпотентность — защищает и баланс игрока, и учёт оператора.

6. Расчёт

Когда событие заканчивается, фид публикует результаты по исходам: выигрыш, проигрыш, возврат или половина выигрыша и половина проигрыша для четвертных линий вроде азиатских фор. Платформа рассчитывает по ним каждую ставку. Исправления случаются: результат могут изменить после проверки, поэтому процесс расчёта должен уметь корректно пересчитывать.

7. Что протестировать до запуска

  • Оборвите соединение посреди матча и проверьте восстановление.
  • Воспроизведите дельту не по порядку и проверьте, заметит ли это клиент.
  • Отправьте одну и ту же ставку дважды с одним ID запроса.
  • Рассчитайте экспресс, в котором одно событие ушло в возврат.

Фид, прошедший эти четыре теста, готов к субботнему вечеру.

Частые вопросы

Чем снапшот отличается от дельты?

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

Зачем дельтам номера версий?

Чтобы клиент мог заметить пропуск. Если у него версия 1204, а приходит 1206, он понимает, что 1205 потерялась, и перезагружается, вместо того чтобы показать неверный коэффициент.

Почему рынки приостанавливаются?

Потому что цена больше не безопасна: гол, красная карточка, брейк на подаче или потеря связи с источником данных. Приостановленный рынок не принимает ставки, пока не откроется с новой ценой.

Отвечает ли фид коэффициентов за приём ставок?

Одни отвечают, другие нет. Чистый фид только публикует цены. API спортсбука добавляет приём ставок, историю и расчёт, обычно с уникальным ID запроса для каждой ставки, чтобы повторы не удваивали сумму.

Push или pull: какая доставка лучше?

Push (поток сообщений или сокет) подходит для лайва, где коэффициенты меняются ежесекундно. Pull (опрос по HTTP) проще и для прематча часто достаточен.