Афиша собирает события культуры Башкортостана в одном месте и показывает только то, что можно проверить.
Демо-данныеСобытия условные: они показывают, как работает афиша.От записи в источнике до карточки на сайте, в боте и в виджете. Каждый шаг можно проверить.
Сайты учреждений культуры и афишные сервисы. Исходная запись хранится без изменений.
Сверка с первоисточником: статус сеанса, цена, возраст и время последней проверки.
Записи об одном событии сводятся в одну карточку. Спорные пары остаются раздельными.
Одна карточка на событие: сеансы, цены, статус и ссылка на источник.
Все каналы читают один REST API, поэтому показывают одно и то же.
Так устроен сервис. Что из этого уже работает в прототипе, сказано в отдельном разделе.
Устройство и прототипАфиша различает три уровня. Так перенос одного сеанса не ломает карточку, а неизвестная цена не превращается в ноль.
Афиша забирает события из открытых источников: с сайтов учреждений культуры и из афишных сервисов. Исходная запись хранится без изменений, поэтому у любого поля карточки можно найти источник.
Каждую запись регулярно сверяют с первоисточником. На карточке видно, когда была последняя проверка и какой статус у сеанса: состоится, перенесён или отменён.
Те же плашки, что в каталоге и на карточке события. Цвет никогда не единственный признак: рядом всегда значок и подпись.
| Плашка | Что значит |
|---|---|
| Состоится | Сеанс состоится: источник это подтверждает. |
| Перенесён | Сеанс перенесён, новая дата известна. Прежняя дата хранится рядом. |
| Перенесён, дата уточняется | Сеанс перенесён, новой даты пока нет. |
| Отменён | Сеанс отменён. Карточка остаётся в каталоге с этим статусом и не исчезает молча. |
| Билеты кончились | Сеанс состоится, но билетов по данным источника нет. |
| Статус не подтверждён | Источник не подтвердил статус. Афиша не выдаёт такой сеанс за «состоится». |
Если источник не сообщил цену, возраст или статус, афиша пишет «не указано». Неизвестная цена не превращается в «бесплатно», а неизвестный статус в «состоится».
| На карточке | Что значит |
|---|---|
| Бесплатно | Источник прямо сообщил, что вход свободный. |
| от 500 ₽ | Минимальная цена общего билета. Детские и льготные тарифы видны в карточке события. |
| Цена не указана | Источник не сообщил цену. Это не значит «бесплатно». |
Время последней сверки видно на карточке события. Если источник перестал отдавать запись, это ещё не отмена: такую запись отправляют на перепроверку, а не скрывают.
Одно и то же событие часто публикуют несколько источников. Афиша сводит такие записи в одну карточку и показывает, из скольких источников она собрана.
Для каждой пары записей принимается одно из трёх решений. Похожесть сама по себе даёт право только на ручную проверку.
Ошибочно склеить два разных события хуже, чем оставить дубль. Поэтому в сомнительных случаях афиша не объединяет.
Объединение и разделение записываются в журнал и не стирают прошлое. Исходные записи остаются, старая ссылка на карточку ведёт на новую. Если карточку разделили на две, старая ссылка показывает обе.
На карточке события написано, из скольких источников она собрана. Ссылка с этой строки ведёт сюда.
Ассистент превращает фразу в условия: дату, город, бюджет, возраст. Условия проверяет код по полям событий, поэтому в подборку не попадает то, что не подходит по возрасту или цене. Событий, которых нет в каталоге, ассистент не называет.
Если условий не хватает, ассистент задаёт уточняющий вопрос. Если подходящих событий нет, он предлагает ослабить условия и не выдумывает варианты.
В прототипе фразу разбирают правила без языковой модели (rules-mock-v1). Формат ответа тот же, что будет у ассистента на языковой модели.
Что задумано и что из этого есть в прототипе хакатона прямо сейчас.
| Тема | Как устроено | Сейчас в прототипе |
|---|---|---|
| Источники | Открытые источники: сайты учреждений культуры и афишные сервисы. | Один «Демо-источник». Его ссылка ведёт в раздел «Демо-данные» на этой странице. |
| События | Только реальные события из источников. | Условные события на настоящих площадках. Каждое помечено «Демо-данные», в API у него стоит synthetic: true. |
| Проверка | Регулярная сверка с первоисточником. | Время проверки условное: оно отсчитывается от текущего момента, чтобы показать и свежую, и давнюю проверку. |
| Статусы и цены | Статус сеанса, цена и возраст из источника. Неизвестное так и помечается. | Работают по тем же правилам. В демо есть отменённые, перенесённые и неподтверждённые сеансы, события без цены и без возраста. |
| Дедупликация | Сопоставление записей, три исхода, журнал объединений, ручная проверка спорных пар. | Правила и формат решений описаны и проверяются на синтетических парах в репозитории команды. Число источников у демо-карточек условное. |
| ИИ-подбор | Языковая модель переводит фразу в условия, код проверяет их по полям событий. | Фразу разбирают правила без языковой модели. Условия проверяет тот же код. |
| Каналы | Сайт, Telegram-бот, виджет и REST API читают один каталог. | Сайт, виджет и REST API работают на демо-данных. Telegram-бот открывается по ссылке в разделе «Откуда проект». |
Сейчас афиша работает на демонстрационных данных. Площадки настоящие, а события, даты и цены условные: они показывают, как сервис ведёт себя в разных ситуациях. Каждая такая карточка помечена словами «Демо-данные».
Источник «Демо-источник» ведёт на этот раздел. В боевой версии на его месте будет ссылка на страницу события у организатора.
Ссылки «Источник» и кнопки «Купить билет» у демо-событий ведут в этот раздел. Даты считаются от сегодняшнего дня, поэтому каталог не устаревает.
Проводите концерт, спектакль или выставку в республике? Пришлите заявку: модератор проверит событие по источнику и добавит его в афишу. Здесь же можно сообщить об ошибке в карточке или задать вопрос.
Фотографии взяты с Pexels и используются по лицензии Pexels: её условия разрешают свободное использование и не требуют указывать автора. Мы всё равно называем авторов.


























Прототип создан на хакатоне «Кибер 102» по задаче Министерства культуры Республики Башкортостан.








