Представьте себе, что вы айтишник, которому достался стадион.
Ладно, это я, если что, несколько лет назад. Я поломался в хоккее, что поставило крест на спортивной карьере, и вспомнил основную специальность. Через несколько лет стал продавать билеты: сначала — в Балашихе, а потом — в Омске на «Авангард».
Это нелинейный ад.
Вот представьте себе: у вас есть стадион на шесть тысяч мест, и вам надо продать билеты. Казалось бы, делов-то: бек с API на учёт мест, фронт на сайте, в приложении, выгрузка XML дистрибьюторам — и всё. То есть надо задекларировать, какие места есть и почём, — и всё.
Ага, щас!
Сначала — ещё до того, как вы расчертите стадион на схему мест и установите цены — вы с удивлением узнаете, что билеты на этот матч уже продают.
Вы купите один ради интереса — посмотреть, что будет, и вас кинут на 1 000 рублей. Потому что это был фишинговый сайт. Ещё таким же образом кинут примерно 1–5 % зрителей, если с этим ничего не делать, и эти зрители перегрузят вам охрану и стюартов на входе, потому что не смогут пройти и будут очень громко кричать.

Потом вам надо выделить билеты для фанатов приехавшей команды. Рассаживать их среди ваших фанатов немного опасно. Для приезжих — в первую очередь.
Затем вам нужны места для семей спортсменов, для прессы, для тренерского состава и так далее. Потом это надо состыковать с программой лояльности и учётом парковок.
А после этого приходит финальный босс — чёртовы перекупы. Борьба с ними — это примерно половина сложности продажи билета.
Перед матчем вы обнаружите, что у вас остались непроданные места, и побежите раздавать их бесплатно в школе напротив стадиона.
Но давайте начнём с самого начала. Итак, вам нужно интегрироваться с турникетами. Зачем? Надо!

Турникеты

У вас должна быть лицензия на продажу билетов на спорт. На концерт Шнура или Пугачёвой на тот же стадион — не надо. На хоккей или футбол — надо.
Билет не привязывается к паспорту. На самом билете персональных данных нет, потому что тогда их было бы очень сложно обрабатывать. Да и Закон «О персональных данных» довольно строг на этот счёт. На билете есть номер. По номеру можно проверить дату матча, место и не приходил ли уже человек на него, то есть идентифицировать, что податель сего имеет право пройти на такое-то место в таком-то секторе, и сегодня он этого ещё не делал.
Именно в этом месте работают перекупы.
В футболе с этим столкнулись довольно давно, потому что никак не могли забанить ультрас, проносящих на стадион в жопе файеры, плакаты «БЫШОВЕЦ» и вообще всячески нарушающих порядок и безопасность. В смысле там, где это не согласовано с клубом. Я сам лично фанатам из чужого города и ящик пива под скамейку подкладывал и много чего ещё делал — всё ради того, чтобы они веселее орали: это делает очень хорошую картинку в камере. Но иногда их надо банить — особо буйных, — а система проверки билетов не позволяет этого сделать.
Поэтому для них появился FanID, где надо показать лицо (биометрию) или паспорт.
В хоккее такого нет: надо показать только ШК (штрих-код).
Этот код нужно проверить.
Архитектурно это та же система, которая учитывает места.
Проверять можно вручную в бумажных журналах (это невероятно плохой план), в каком-нибудь гуглодоке (это очень плохой план) или в софте. Софт чаще всего интегрирован либо с ручными сканерами, либо с турникетами.
Турникетов или ручных сканеров должно быть МНОГО. Почему так? Потому что есть нормативы на время загрузки и выгрузки стадиона. Самое узкое место — металлодетекторы и интроскопы для баулов на входе, а также турникеты для проверки билетов. За 15 минут до матча через эти места пролезает половина чаши.

Если что, на хоккей ещё приезжают люди в инвалидных колясках. И это тоже должно нормально обрабатываться стадионом.
Поэтому, если вы мазохист и любите разовые ИТ-проекты, можно поставить 200 стюартов со сканерами, но уже после пятого-шестого матча выгоднее купить и интегрировать турникеты. Правда, под них ещё надо строить павильон, прокладывать слаботочку, делать модуль в софте и т. п.
Внутри стадиона у вас разграничение прав.
Ультрас обычно имеют выделенные сектора друг напротив друга, чтобы фанаты не дрались прямо на матче. Где и как они дерутся — они договариваются ещё до выезда, но это должно случиться за пределами стадиона. Если договориться не получилось, то они громят бар. Бар про это в курсе, поэтому берёт депозит на ремонт стойки и не выводит в этот день хрупких девушек.
Обычные работяги и обитатели небесных VIP-лож ходят в разные места. Для лож обычно есть второй внутренний контур. Если вы прямо совсем настоящий айтишник, то знаете, что люди могут выйти на перерыв, а потом зайти обратно и сделать это через разные выходы. Но такого уровня обычно никто не берёт, и турникеты просто отключают после начала матча. Во время перерывов на стадион часто попадают дополнительные люди. Ещё люди пересаживаются на места получше, и если в городе пробки, то их могут пытаться гонять опоздавшие законные обладатели этих мест. Кроме того, иногда к вам приезжают гости, у которых билеты проданы через их систему, вообще никак не стыкующуюся с вашей, и тогда вы отключаете свои турникеты и разрешаете им выставить своих стюартов с ручными сканерами. Например, это бывает, когда у вас на стадионе делают финал чемпионата по Counter-Strike, потому что это, конечно, спорт, но билеты там продают по-театральному.
Билетная система

Самое сладкое — это билетная система. Внутри неё что-то вроде инвенторной системы для авиации или АБС для банка, то есть какой-то код из 90-х, который умеет учитывать места. Вокруг — интеграции и всякие фичи, в последние годы — даже в микросервисах, правда, состыкованных по хардкору в цепочки жёстких зависимостей.
Первое, что делает билетная система, — это формирует билетную массу. Главный кассир (это root) садится и смотрит на SVG-картинку стадиона. Щёлкает по местам или секторам и назначает каждому цену. Билет на обычный матч стоит рублей 300, на любимого врага — около 1 000, на плей-офф — 1 500, на финал — 5 000. Места делятся на подороже и подешевле. Ещё у места есть классификатор, для какого типа зрителей оно предпочтительнее. Например, пресса, фанаты, одиночные мужики с кризисом среднего возраста, семьи, незамужние девушки и так далее. Потому что вы хотите, чтобы незамужние девушки были видны всем, в том числе — камере, а одиночные мужики с кризисом среднего возраста сидели с пивом рядом друг с другом и молча дружили. Кстати, в следующий раз мы их запомним и автоматом предложим места рядом друг с другом по умолчанию, чтобы была молчаливая радость узнавания. Через четыре-пять таких совпадений образуются новые фанатские сообщества.
Но до этих фичей мы ещё не дошли. Точнее, дошли в разных системах и не успели их интегрировать. Только продифференцировали.
Дальше главный кассир отправляет билетную массу в релиз.
По идее, она выгружается в API, и там можно зачерпывать билеты из неё через физическую кассу, приложение, сайт или дистрибьютора. На практике это не один путь, а часто два-три разных, потому что API — это не для тех людей, которых с детства били клюшкой по голове. На самом деле там часто дремучий код, писавшийся ещё в эпоху DOS, который отрефакторили под современные системы, но не поменяли архитектуру. Монолит звучит круто. Монолит — это надёжность!
Билетная система берётся у вендора.
В России есть четыре-пять самых популярных вендоров в зависимости от вида спорта. Многие из них, такие, как «Инфотех» или «Кассир.ру», изначально пришли из театральной или концертной сферы. Разницы, по сути, никакой нет, кроме одной уникальной специфики спорта — абонементы и зональное разделение. Вы не можете купить билетики на Киркорова на год, а потом использовать их на плей-офф. Киркоров в плей-офф вообще не выходит.
Базовый функционал билетной системы:
Онлайн. Клиент заходит и выбирает матч, сектор, ряд, место. Может указать ребёнка.
Главное место кассира — это бэк-офис, где настраивается вся билетная масса.
Место обычного кассира — это софт для кассира в офлайн-кассе. Кассир вбивает данные паспорта, проводя продажу внутри системы напрямую, а не через онлайн-бронирование.
Билетная масса обычно выгружается на месяц вперёд, как и календарь матчей. Дальше месяца возможны сдвиги, поэтому хрен вам, дорогие болельщики, а не купить авиабилеты заранее. В плей-офф в принципе неизвестно, кто с кем играет, поэтому билеты появляются в продаже вообще за три-четыре дня до матча.
Обычно билеты выгружаются сериями: в хоккее — домашние серии по пять (плюс-минус) матчей (потому что команда играет пять матчей дома, пять — на выезде), в футболе — по месяцам. Типа вот календарь на месяц, и вот вам билеты — раскупайте.
Перекупы
В этот самый момент в стройную систему врываются перекупы.
Если вы не делаете вообще никакой защиты, то все билеты на матч будут выкуплены в первые 8–10 секунд. Многие крупные вендоры научились выстраивать очереди болельщиков, но зачастую в плей-офф всё стабильно падает из-за резкого наплыва. Это как снег зимой в Питере: никто его не ждёт, а потом приходится сбивать сосули.
Перекупы — те ещё черти: способны разобрать весь стадион и дальше продавать его втридорога. Они не всегда выкупают онлайн, бывает, просто приходят в кассу и по дружески просят два билета в одни руки. Такое в регионах встречается повсеместно, поэтому кассы многим играют на руку: кассиры имеют с этого свою копейку.
Те, кто выкупает и так ограниченные билеты, мешают всем. У клуба есть квота, и на стадион во Владике вместимостью 6 000 зрителей обычно всё распродано и распределено. На стадион, кроме болельщиков, приходят льготники: студенты, инвалиды, школьники и пенсионеры. Зачастую именно простые болельщики страдают от деятельности перекупщиков.
Вообще клуб конкурирует за внимание зрителя с рестораном и кинотеатром. Семья может поехать на хоккей, а может пойти в театр или ужинать. Если билет будет на 500 рублей дороже — мы потеряем тех, кто делал этот сложный выбор досуга на вечер. 500 рублей для Омска, кстати, — не кварк денег, а вполне реальная ощутимая сумма.
Плюс перекупы вызывают недовольство, кладут нагрузкой системы и вообще те ещё гады.
К счастью, они живут прошлыми технологиями. Поэтому вы баните странные айпишники с нетипичными для человека действиями, не даёте больше 4–10 билетов на человека, проверяете его историю предавторизацией и так далее.
Правда, это не помогает. Потому что есть ещё умные перекупщики и те, у которых есть пачка симок и некоторое терпение.
Поэтому вы делаете привилегированные очереди и волны выпуска билетов. То есть выгружаете не все сразу во все каналы, а по частям. И сначала — тем, кто предавторизован. Это приоритетный выкуп.
То есть работает это так:
Право первого выкупа получают лояльные болельщики. Условно для тех, кто больше года с вами, вы выгружаете первые 2 000 билетов и даёте неделю на разграбление. Если что-то осталось — они идут во вторую волну. Это также даёт возможность клубу повышать стоимость на билеты, если они быстро разлетаются, или понижать, если спроса нет.
Потом вы предлагаете выкупить билеты тем, кто часто ходил, но при этом недавно с вами. Обычно это тоже позволяет найти самые хорошие места. Ещё неделя.
Затем — другие когорты: «потенциальные покупатели» по анализу бигдаты.
Отдельно — пиар-билеты для журналистов, блоки для семей спортсменов и клубов, блоки под социалку (например, чтобы приют приехал посмотреть на городскую команду): всего — около 20 категорий билетов.
Дистрибьюторы получают свои две-три волны где-то в середине всех этих очередей. Это, кстати, тоже интеграции и наборы правил.
Отдельный кусок билетной массы получает клуб, который привозит своих фанатов. То есть если к вам едут любимые враги, то вы звоните их главному кассиру или главе клуба и спрашиваете, сколько им надо билетов. Обычно они берут сектор или два и обязаны их сами полностью распродать. То есть это как чартер: выкупают рейс и делают что хотят. Могут раздать фанатам бесплатно (и часто так делают), могут выложить пустыми местами икс, игрек и что-то там с производной, могут просто все билеты выкинуть в Неву и радоваться. Но от их поведения зависит, сколько билетов и по какой цене вы им дадите в следующий раз.
Есть ещё такая штука, как аккредитация СМИ. Это когда журналисты местных СМИ приходят на хоккей, и чтобы пройти они не покупают билет, а получают квоту. Так вот недавно накрыли большую шайку, которая получала такие квоты и перепродавала их далеко не журналистам. Служба безопасности всегда на страже!
Снова системы клуба
На стадионе клуб зарабатывает не только с билетов и абонементов.
Ещё хорошо, если вы купите хотя бы полшарфика, чашку чая или кружку пива, сыграете в забивание шайбы со спонсором и так далее. Плюс нам надо всех запарковать. В Омске на машинах приезжает до половины зрителей финала и до четверти — обычного матча. Вашу парковку надо просто куда-то интегрировать, чтобы можно было одновременно продать и билет, и парковку, а чужую — ну, это как повезёт. Парковка у стадиона, кстати, может быть городской, и тогда вас ждёт дорога приключений.
В итоге устоявшийся стандарт рынка — это когда болельщик авторизуется в двух-трёх разных местах минимум. Программа лояльности клуба — для баллов, магазин — для покупки билета, а также либо система парковок, либо что-то ещё из вспомогательного. Настоящие айтишники со временем это сводят в единую авторизацию в один клик, но мы живём в настоящем, а не в будущем, поэтому вам, скорее всего, достанутся три разных пельменя, а не бесшовный клиентский опыт. Причём один из пельменей почему-то всегда на Битриксе, то есть начинка в нём распределена равномерно, а не лежит там, где задумывалось по рецепту.
Поверх всего этого уже можно крутить фичи вроде тех, что я описывал выше про форсирование крепкой мужской дружбы. Ну или если вы хотите, чтобы девчонки автоматически рассаживались перед камерами. Про это я подробнее писал вот тут: в частности, очень важно посадить «перворазников» за ворота, чтобы шайба летела прямо в них. Это сильно повышает их шансы вернуться, но интуитивно они крайне редко выбирают эти места, поэтому именно им и именно туда надо давать скидку на первое посещение.
Плюс баллы лояльности за шаринг, плюс рефералка, плюс то, плюс это — и комбайн готов. Как я уже говорил, вендоры часто многое поддерживают «из коробки», но стыковать всё это вам, и «коробочные» решения тут как на производствах: некоторые можно рассматривать как фреймворк, а не как готовый софт.
По факту часть билетов в конце вы раздаёте в виде пригласительных, поэтому важно следить за динамикой продаж. Непроданные места надо либо продавать дешевле, либо просто раздать билеты (особенно если это рядовой матч сезона): нет ничего хуже пустых недоутилизированных трибун, потому что это не нравится ни каналам, ни спонсорам команд. Стадион должен быть полным. А ещё за это получают деньги клубы в конце сезона получают за это деньги.
И вот только теперь после всех этих сложностей — от налаживания юридических моментов и IT-инфраструктуры до борьбы с мошенниками, организации логистики, транспорта и маркетинга — вы наконец продали билет.
И это примерно 10 % работы айтишника, которому достался стадион.
askv
Разве проблему с перекупами нельзя решить повышением цены?
zarubin_v Автор
Одна из частей проблемы перекупов — как раз повышение цены. Мы хотим продавать билеты на ряд матчей дешевле, чем семья может сходить в хороший ресторан, чтобы выиграть конкуренцию с ним. Нам важно, чтобы они вообще пришли на стадион, а не выбрали что-то другое в городе.
askv
Так какая разница, у вас выкупили билеты, разве это не счастье?
С другой стороны, на что рассчитывают перекупы, если по повышенной цене не удастся продать?
zarubin_v Автор
У нас нет задачи продать билеты, у нас есть задача загрузить стадион обычно. Успех хоккея зависит от толпы людей и атмосферы, от этого же зависят основные прибыли. Плюс если перекуп "зажмёт" билеты и не продаст, да, мы получим за них деньги, но потеряем часть аудитории, которая в нас разочаруется, раз не смогла нормально купить.
Следующий уровень беды — бесконечные холды мест по 15 минут ботами — для оплаты картой вместо покупки — и это ещё хуже.
Третий слой — они забирают билеты на матчи плейоффа, где очень важно доверие людей к официальным каналам. Чем больше честности и предсказуемости, тем лучше будут собираться следующие матчи и тем лояльнее будет фанатская база.
Четвёртое — покупка билета у перекупщика — всегда лотерея. И это добавляет лишнего геморроя клубу. Если что-то пойдёт не так, негатив весь получает клуб, а не перекупщик.
StjarnornasFred
Но ведь если билеты будут выкуплены, то что плохого? Не всё ли равно есть ли толпа или нет, если билеты проданы, да ещё и по накрученной цене?
zarubin_v Автор
Если будут выкуплены каждый раз — хорошо. Но не будут, потому что мы ставим цены как раз по границе конкуренции с рестораном или театром на вечер. Систематически перекупщики вредят спорту, хотя в моменте это не всегда заметно.
И нет, не всё равно, есть ли толпа. Потому что билеты — это очень малая часть заработка клуба. Основа — спонсор и трансляции, а для них толпа важна.
vvzvlad
Первая ситуация: билеты стоят дешевле чем сходить в кино, купить их просто, на стадионе довольные зрители
Вторая ситуация: билеты стоят х3, прибыль достается перекупам, на офсайте не купишь, надо общаться с какими-то мутными чуваками и переводить им на карту и с некоторой вероятностью получить билет, уже проданный кому-нибудь другому. На стадионе не очень довольные из-за этого зрители и часть мест пустует.