Для организаторов
Инструкция по подготовке schedule.json
Как подготовить JSON-файл расписания для подключения события в приложении Сценарий.
Инструкция по подготовке schedule.json
1) Общая структура файла
Минимально ожидается такой JSON:
{
"id": "gorodskoj-koncert-2026",
"meta": {
"title": "Городской концерт 2026",
"dates": "8–12 июля 2026",
"location": "Фестивальная площадка",
"schemaVersion": 1,
"startDate": "2026-07-08",
"endDate": "2026-07-12",
"logoUrl": "https://example.ru/logo.png"
},
"stages": [],
"days": [],
"items": []
}
Примечание: в проекте используется только поле items.
Корневой id (обязательно) — непустая строка на верхнем уровне рядом с meta. Без неё приложение не принимает файл. Один и тот же id нельзя добавить дважды в список событий (в том числе если ссылка на JSON другая).
2) Поля meta: где отображаются и как используются
Ниже перечислены поля, которые встречаются в текущем проекте.
meta.title
- Где используется: в приложении как название события в списке событий.
- Как отображается: как основной заголовок карточки события.
- Требования: строка, не пустая (иначе в UI будет fallback
Без названия).
meta.startDate и meta.endDate
- Где используется: в приложении для:
- отображения диапазона дат на карточке события;
- сортировки событий в списке;
- валидации при загрузке расписания по удалённой ссылке.
- Как отображаются: форматируются в подпись с датами (например,
08.07.2026 - 12.07.2026). - Требования: строка даты
YYYY-MM-DD, например2026-07-08. - Важно: при сценарии “добавить событие по ссылке” оба поля должны быть заполнены корректно, иначе загрузка отклоняется.
meta.logoUrl
- Где используется: в приложении для изображения события (логотип в списке и в диалоге выбора).
- Как отображается: как обложка/иконка события.
- Требования: валидный URL изображения (лучше
https://). - Если не задано: карточка откроется без логотипа (с placeholder).
meta.dates
- Где используется: в JSON как человекочитаемое описание дат фестиваля.
- Как отображается: в приложении основная дата строится из
startDate/endDate; полеdatesможно использовать для подписи в свободном формате. - Требования: строка в свободном формате.
meta.location
- Где используется: в JSON как общее описание места проведения события.
- Как отображается: в приложении отдельно не выводится; для адресов конкретных площадок используйте
stages[].location. - Требования: строка в свободном формате.
meta.schemaVersion
- Где используется: в JSON как служебная версия схемы.
- Как отображается: пользователю напрямую не показывается.
- Требования: число; обычно
1.
3) Обязательные поля
stages[]
Каждая сцена:
{
"id": "main",
"name": "Главная сцена",
"short": "Главная",
"color": "#e6e04f",
"location": "ул. Примерная, 1"
}
Правила:
id— уникальный, латиница/цифры/дефис, стабильный.color— HEX в формате#RRGGBB.
stages[].location (опционально)
- Где используется: в приложении для отображения адреса площадки сцены.
- Как отображается: подпись к сцене в расписании (если задано).
- Требования: строка в свободном формате, например
ул. Первомайская, 14 (Площадь Солнца). - Если не задано: сцена отображается без адреса.
days[]
Каждый день:
{
"id": "2026-07-08",
"label": "8 июля",
"weekday": "среда"
}
Правила:
idдолжен быть в форматеYYYY-MM-DD.idдня должен быть уникальным.
items[]
Каждое событие:
{
"id": "2026-07-10-main-19:40-55",
"day": "2026-07-10",
"stage": "main",
"time": "19:40",
"endTime": "20:10",
"title": "Браво"
}
Правила:
dayдолжен существовать вdays[].id.stageдолжен существовать вstages[].id.time— строгоHH:mm(например,09:05,23:40,00:00).idсобытия — уникальный и стабильный.
items[].endTime (опционально)
- Где используется: в приложении для отображения интервала выступления.
- Как отображается: вместе с
time, например19:40–20:10. - Требования: строка
HH:mmв том же формате, что иtime(допустимо00:00для окончания после полуночи). - Если не задано: в UI показывается только время начала (
time).
4) Критично про id событий
id нельзя без необходимости менять у уже опубликованных событий.
Почему: приложение хранит “Мой план” пользователей по event.id.
Если поменять id, старое сохранение перестанет совпадать с событием.
Рекомендуемый шаблон:
<day>-<stage>-<time>-<index>
Например:
2026-07-10-main-19:40-552026-07-11-south-23:30-100
5) Порядок подготовки расписания
- Заполнить
meta:- обязательно:
title,startDate,endDate; - желательно:
dates,location,schemaVersion,logoUrl.
- обязательно:
- Добавить все сцены в
stages. - Добавить все дни в
days. - Добавить события в
items. - Проверить ссылки:
- каждый
items[].dayесть вdays; - каждый
items[].stageесть вstages.
- каждый
- Проверить уникальность
idу сцен, дней и событий. - Проверить формат времени
HH:mmуtimeи (если задан)endTime. - При необходимости заполнить
stages[].locationиitems[].endTime.
6) Быстрая самопроверка перед публикацией
- JSON валидный (без лишних запятых и комментариев).
- В
metaзаполненыtitle,startDate,endDate. startDateиendDate— валидные даты в форматеYYYY-MM-DD.- Нет пустых
title. - Нет дублей
items[].id. - Для одного дня и сцены события логично идут по времени.
- Если задан
endTime, он позжеtime(с учётом перехода через полночь, например23:30→00:00). - После правок старые
idсохранены (если не было цели их заменить).
7) Где разместить готовый файл
- Опубликуйте JSON на любом публично доступном URL с
https://(сайт, облако, CDN). - В приложении добавьте событие по этой ссылке или через диплинк.
- Для подготовки локально можно хранить черновик, например
jsons/my-festival-2026.json, и затем выложить на хостинг.
8) Пример минимального рабочего файла
{
"meta": {
"title": "Тестовое событие",
"dates": "1-2 августа 2026",
"location": "Тестовая площадка",
"schemaVersion": 1,
"startDate": "2026-08-01",
"endDate": "2026-08-02",
"logoUrl": "https://example.com/festival-logo.png"
},
"stages": [
{
"id": "main",
"name": "Главная сцена",
"short": "Главная",
"color": "#e6e04f",
"location": "Фестивальная площадка, главный вход"
}
],
"days": [
{
"id": "2026-08-01",
"label": "1 августа",
"weekday": "суббота"
}
],
"items": [
{
"id": "2026-08-01-main-18:00-0",
"day": "2026-08-01",
"stage": "main",
"time": "18:00",
"endTime": "18:30",
"title": "Открытие"
}
]
}
Сформировать диплинк
Когда JSON с расписанием уже размещён на вашем сайте, в облаке или на другом хостинге с публичной ссылкой, здесь можно сформировать диплинк — по нему событие откроется сразу в приложении, без ручного ввода URL.