Две схемы интеграции
| iFrame | API | |
|---|---|---|
| Фронтенд | Наш, встроенный в ваш сайт | Ваш |
| Кошелёк | Ваш, через коллбэки seamless wallet (единого кошелька) | Ваш, через коллбэки seamless wallet |
| Срок до запуска | От дней до пары недель | Шесть-двенадцать недель в зависимости от вашего фронтенда |
| Контроль над UX | Только оформление | Полный |
| Типичный заказчик | Казино, добавляющее вкладку ставок | Оператор, у которого букмекер и есть продукт; поставщики платформ |
Во что обходится каждая схема в инженерном времени
Шесть-двенадцать недель выше — это календарное время для команды из двух человек, растянутое теми частями, которые нельзя вести параллельно: аутентификация раньше всего остального, каталог раньше купона. В таблице та же работа в человеко-днях по направлениям, чтобы было видно, какие части снимает iFrame. Диапазоны — разница между командой, которая уже выпускала букмекерский фронтенд, и той, которая нет.
| Направление работ | iFrame | API |
|---|---|---|
| Коллбэки кошелька и реестр за ними | 5–10 дней | 5–10 дней |
| Аутентификация, подпись запросов, ключи идемпотентности | 2–4 дня | 2–4 дня |
| Каталог: виды спорта, соревнования, матчи, рынки, исходы | На нас | 10–20 дней |
| Обновления live-цен и статусов по push-каналу | На нас | 5–10 дней |
| Купон, приём ставки и политика по изменению цены | На нас | 10–15 дней |
| Экран cash-out: котировка, частичный, истечение | На нас | 4–8 дней |
| Расчёт, перерасчёт и экраны истории ставок | На нас | 4–8 дней |
| Лимиты, самоисключение и правила лицензии в вашем интерфейсе | Только оформление | 3–6 дней |
| Прогон сертификации и правки по её итогам | 3–5 дней | 5–10 дней |
Из итогов следуют две вещи. Кошелёк — это одинаковый объём работы при любой схеме, и именно эта часть чаще всего оказывается сделанной неверно, так что iFrame её не отменяет. iFrame снимает букмекерский фронтенд: от 36 до 67 человеко-дней по этой таблице. Именно эту цифру стоит взвешивать против владения интерфейсом, а не разницу в датах запуска.
Контракт seamless wallet
Ваш кошелёк держит баланс, а мы держим ставку. Ни одна сторона не может восстановить другую из собственных записей, и потому каждый вызов несёт и идентификатор ставки, и идентификатор транзакции. В таблице описаны четыре вызова: когда мы отправляем каждый, что нам нужно получить в ответ и что происходит, если ответа нет.
| Вызов | Когда мы его отправляем | Что нам нужно в ответ | Если истекает таймаут |
|---|---|---|---|
| Баланс | В начале сессии и перед приёмом ставки, если ваши лимиты могли измениться | Доступный баланс по каждой валюте | Ставка не принимается. Деньги не двигались, поэтому откатывать нечего. |
| Зарезервировать и списать ставку | При приёме, с ключом запроса, идентификатором ставки и суммой | Подтверждение и получившийся баланс | Мы повторяем по тому же ключу, и ваш кошелёк должен вернуть первый результат, а не списать повторно. Если ситуация не разрешается, ставка не считается принятой, а попытка отмечается как неподтверждённая. |
| Зачислить выигрыш | При расчёте выигравшей ставки или плеча и при исполнении cash-out | Подтверждение и получившийся баланс | Повторяется по тому же ключу до подтверждения. Выигрыш не теряется никогда: он либо применён, либо отмечен как неисполненный. |
| Возврат и перерасчёт | При возврате, отменённом событии или официальной корректировке результата | Подтверждение с применённой дельтой | Тот же ключ, то же правило. Перерасчёт, который не удаётся применить, удерживается и фиксируется, но никогда не применяется дважды. |
Ключ запроса — это и есть весь контракт. Его несёт каждый вызов, а правило на вашей стороне такое: один и тот же ключ всегда даёт один и тот же ответ — первый. Кошелёк, который считает повтор новой инструкцией, спишет дважды при первом же обрыве соединения, а соединения обрываются. Поэтому песочница дублирует каждый вызов, и поэтому продовый ключ ждёт, пока дубли не начнут возвращаться идентичными. Таймаут и окно повторов задаются в договоре вместе с лимитами частоты, потому что зависят от того, где работает ваш кошелёк.
Что отдаёт API
- Каталог: виды спорта, соревнования, матчи, рынки и исходы с ценами, статусом и состоянием приостановки. Пре-матч по REST с уведомлениями об изменениях; live по push (WebSocket) с дельтами цен и статусов, зеркалируя вышестоящие фиды, которые у Sportradar приходят поверх AMQP.
- Приём ставок: ординары, экспрессы, системы и плечи bet builder (конструктора ставок), с обработкой изменения цены (принимать любую, принимать выше, отклонять), лимитами ставки из риск-движка и идемпотентными ключами запроса.
- Seamless wallet: мы обращаемся к вашему кошельку, чтобы зарезервировать и списать ставку, зачислить выигрыш, вернуть и пересчитать; у игрока один баланс на казино и букмекера.
- Cash-out: котировка и исполнение, полный и частичный, в live и пре-матче.
- Расчёт: результаты и события расчёта по каждой ставке и каждому плечу, с перерасчётом при официальной корректировке и полным журналом аудита.
- Контекст аккаунта: лимиты игрока, самоисключение и ограничения по лицензии передаются с каждым запросом, поэтому риск-движок и правила регулятора применяются к вашим игрокам так же, как к нашим.
- Отчётность: оборот, GGR (валовой игровой доход) и маржа по видам спорта, рынкам и когортам игроков; файлы сверки расчётов.
Сертификация: сценарии и то, что должно происходить
Это те случаи, которые песочница проигрывает до выдачи продового ключа. Средняя колонка — поведение, по которому мы сертифицируем; правая — то, что вместо этого делает интеграция, не продумавшая случай, и как отказ выглядит в вашей очереди поддержки.
| Сценарий | Ожидаемое поведение | Что делает непротестированная интеграция |
|---|---|---|
| Цена меняется между купоном и приёмом ставки | Принять, принять-если-выше или отклонить — согласно политике, переданной с запросом. Ставка стоит по одной цене. | Принимает по устаревшей цене, а потом начинается спор о том, какая цена была показана. |
| Рынок приостанавливается, пока запрос в пути | Отклонено с причиной «приостановка». Ничего не списывается. | Списывает ставку, а затем возвращает её, оставляя списание и зачисление по ставке, которой никогда не было. |
| Приходит дубль приёма ставки с тем же ключом запроса | Одна ставка, одно списание, повторно возвращается исходный ответ. | Две ставки и два списания. |
| Кошелёк не отвечает на списание | Ставка не считается принятой; попытка отмечается как неподтверждённая. | Принимает ставку против неподтверждённого списания и обнаруживает нехватку при расчёте. |
| Частичный cash-out по экспрессу, одно плечо которого уже рассчитано | Котировка считается по всё ещё открытым плечам; рассчитанное плечо не переоценивается. | Оценивает ставку целиком, а потом не может рассчитать то, что от неё осталось. |
| Официальный результат скорректирован после выплаты | Перерасчёт применяется как дельта, при этом сохраняются и исходный расчёт, и корректировка. | Перезаписывает исходный расчёт, и история больше не объясняет баланс. |
| Игрок пересекает лимит депозита или проигрыша посреди сессии | Приём ставки отклонён по лимиту, лимит назван в ответе. | Принимает ставку, потому что лимит живёт в вашей системе аккаунтов и с запросом никогда не передавался. |
| Вышестоящий фид отваливается при открытых ставках | Рынки приостанавливаются, приём по затронутым матчам прекращается, открытые ставки остаются открытыми и рассчитываются, когда придут результаты. | Продолжает принимать цены, которые перестали двигаться. |
Фиды за этим API
API не привязан к конкретному фиду. За ним мы используем Sportradar, Genius Sports, LSports или OddsMatrix — в зависимости от вашего договора и рынков; в модели turnkey договор с фидом ваш, а мы его интегрируем.
| Фид | Опубликованное покрытие |
|---|---|
| Sportradar | 900,000+ событий в год, 32 вида спорта |
| Genius Sports | 600,000+ матчей, 40+ видов спорта |
| LSports | 175,000+ пре-матч событий в месяц, 100+ видов спорта, 2,500 рынков |
| OddsMatrix | 200,000+ live-событий в месяц |
Подробнее о каждом фиде, включая то, какой мы рекомендуем для какой линии, — на странице turnkey букмекера.
Что не входит в лицензию только на данные о коэффициентах
Некоторые поставщики продают коэффициенты как данные, и часть из них прямо пишет на своих страницах, что они — инфраструктура коэффициентов, а не букмекер. В таблице перечислено то, что лежит между ценой и рассчитанной ставкой, и указано, откуда каждая часть берётся в двух моделях.
| Что требуется | Лицензия на данные о коэффициентах | Этот API |
|---|---|---|
| Цены, матчи и статус рынков | Входит | Входит |
| Приём ставок | Разрабатываете вы | Входит |
| Лимиты риска и экспозиции по игроку, рынку и событию | Разрабатываете вы | Лимиты ставки приходят из риск-движка вместе с запросом |
| Контракт кошелька | Разрабатываете вы | Четыре вызова, идемпотентные, сертифицируются до выхода в прод |
| Расчёт цены cash-out | Разрабатываете вы | Котировка и исполнение, полный и частичный |
| Расчёт ставок и плеч | Разрабатываете вы | Входит, по каждой ставке и каждому плечу |
| Перерасчёт при официальной корректировке | Разрабатываете вы | Входит, вместе с журналом аудита |
| Лимиты игрока и самоисключение, применяемые при приёме ставки | Разрабатываете вы | Контекст аккаунта идёт с каждым запросом |
| Файлы сверки и отчётность регулятору | Разрабатываете вы | Входит |
Лицензия на коэффициенты — правильная покупка для медиасайта, прогнозного продукта или модели: ни один из них не берёт деньги у игрока. Для оператора это неверная покупка, и в коммерческом предложении она стоит дешевле — так и совершается ошибка.
Песочница и выход в прод
Песочница с записанными повторами живых рынков, чтобы ваш фронтенд тестировался против реального движения цен, а не статичных данных. Чек-лист сертификации из вводного абзаца прогоняется по этой песочнице до выдачи продовых ключей, поэтому краевые случаи ловятся до запуска, а не на первой неделе живого трафика. Лимиты частоты и SLA фиксируются в договоре; мы называем их, когда знаем ваш ожидаемый пик одновременных запросов, потому что у API кассы и у live-фида разные допуски.
Частые вопросы
Можно ли взять только коэффициенты и принимать ставки самим?
Это лицензия на данные, а не API букмекера, — фид только с коэффициентами, который несколько наших вышестоящих поставщиков продают и напрямую, без приёма ставок, риск-менеджмента и расчёта. У нас всё наоборот: приём, риск и расчёт и есть продукт, а коэффициенты — то, против чего мы их выставляем.
Можно ли начать с iFrame и перейти на API позже?
Да, и в таком порядке это обходится дешевле. Работа по кошельку переносится без изменений, потому что обе схемы используют одни и те же четыре вызова. Вторым этапом вы делаете букмекерский фронтенд — те самые 36–67 человеко-дней из таблицы выше. Аккаунт, игроки и история ставок остаются на месте; меняется только интерфейс перед ними.
Лимиты задаём мы или вы?
Оба, но только в одну сторону. Риск-движок возвращает лимиты ставки по рынку, исходу и игроку вместе с каталогом, и вы можете их понизить. Поднять их выше лимитов экспозиции линии нельзя, потому что обязательства несёт тот, кто выставил цену на рынок. Ваши собственные правила — лимиты депозита и проигрыша, самоисключение, ограничения лицензии — идут с каждым запросом и применяются при приёме ставки, а не проверяются задним числом.
Поддерживаете ли вы фэнтези или тотализатор?
Тотализатор — да, на том же каталоге. Фэнтези — нет.
А контракты в стиле рынков предсказаний?
Другой продукт и в большинстве мест другая лицензия; см. платформу рынков предсказаний.