Для сотрудников IT-кампуса «Неймарк» · редакция от 24.08.2026 · Тюнинг бизнеса
Быстрый доступ ко всем частям решения. Ниже — боевой контур кампуса и демонстрационный стенд.
| Что | Ссылка |
|---|---|
| Публичный календарь — свободные слоты по трём этажам, под QR-код в корпусе | https://biztune.ru/shumny/ |
| Telegram-бот (пока тестовый, до подключения бота кампуса) | https://t.me/UKMiraTest_bot |
Публичный календарь сейчас работает на демонстрационном стенде исполнителя: приложение внутри
портала закрыто авторизацией Битрикс24, и студенты его открыть не смогут. Чтобы календарь
резидентов работал на контуре кампуса, приложению нужно разрешить открытый доступ — это
отдельное решение по безопасности, принимает кампус.
| Что | Ссылка |
|---|---|
| Кабинет сервис-координатора — заявки, шахматка, вход по коду, отчёты | пункт «Шумный корпус» в левом меню портала |
| Прямая ссылка на кабинет (открывается только у сотрудников из списка доступа) | https://app-a016d788f810.vibecode.bitrix24.tech/admin |
| Воронка броней в CRM — все брони со стадиями (канбан) | https://neymark.bitrix24.ru/crm/deal/kanban/category/9/ |
| Список броней таблицей | откройте канбан (ссылка выше) и переключитесь на «Список» в верхней панели — воронка сохранится |
| Карточка конкретной брони | https://neymark.bitrix24.ru/crm/deal/details/НОМЕР/ |
| Вкладка брони в карточке сделки | вкладка «Бронь: Шумный корпус» внутри карточки |
| Открытая линия «Шумный корпус» — настройки, канал, очередь | https://neymark.bitrix24.ru/contact_center/ |
| База знаний прямо в кабинете | вкладка «Инструкции» в разделе «Шумный корпус» |
| База знаний в вебе (эта инструкция) | https://biztune.ru/r/260804-baza-znaniy-shumny-korpus-5c1e/ |
| Контакты резидентов в CRM | https://neymark.bitrix24.ru/crm/contact/list/ |
Отдельный пароль не нужен: приложение открывается только у сотрудников, которым выдан доступ
на платформе. Кто вне списка — увидит экран входа Битрикс24.
Про список сделок. Прямой ссылки на список внутри одной воронки в Битрикс24 нет: этот режим
хранит выбор воронки в настройках пользователя, а не в адресе, поэтому любая ссылка вида
/crm/deal/list/... открывает все сделки портала. Рабочий путь один: открыть **канбан
«Шумный корпус» и переключиться на «Список»** в верхней панели — воронка сохранится и
в следующий раз список откроется уже отфильтрованным. Ссылка на канбан всегда ведёт строго
в брони «Шумного корпуса».
| Что | Значение |
|---|---|
| Приложение на платформе | https://app-a016d788f810.vibecode.bitrix24.tech |
| Проверка работоспособности | https://app-a016d788f810.vibecode.bitrix24.tech/health |
| Сервер приложения (id) | 7b2a7daa-cf2c-4594-9244-2a7698cebf9f, тариф bc-agent |
| Воронка CRM | id 9 «Шумный корпус» |
| Открытая линия | id 9 «Шумный корпус», режим «создавать сделку» |
| Бот линии | id 351 «Шумный корпус» |
| OAuth-приложение (встройка в меню) | local.6a69eaf2825a58.03002199 |
| Кабинет платформы VibeCode | https://vibecode.bitrix24.tech |
Отдельный контур для показов и обкатки — данные туда не попадают в CRM кампуса.
| Что | Ссылка |
|---|---|
| Календарь | https://biztune.ru/shumny/ |
| Кабинет | https://biztune.ru/shumny/admin?k=КЛЮЧ |
| Бот | https://t.me/UKMiraTest_bot |
| CRM стенда | biztune39.bitrix24.ru, воронка «Шумный корпус» id 50 |
| Что | Ссылка |
|---|---|
| Техническое задание (3 этапа) | https://biztune.ru/kp/it-kampus/tz-shumny-korpus.html |
| Описание решения и сценарии тестирования | https://biztune.ru/r/260803-shumny-korpus-opisanie-i-testy-4b7d/ |
| Макет публичного календаря | https://biztune.ru/kp/it-kampus/demo/kalendar.html |
| Макет кабинета управляющего | https://biztune.ru/kp/it-kampus/demo/kabinet.html |
Система бронирования пространств активного досуга 9 корпуса. Резиденты сами занимают этаж под свою
активность, сотрудники контролируют, кто и когда приходит.
Резидент выбирает свободный слот (в Telegram-боте или на публичной странице), указывает активность
и количество человек, отправляет заявку. Сервис-координатор её подтверждает или отклоняет.
После подтверждения резиденту приходит код. На входе группа называет код, администратор гасит его
и отмечает явку.
| Этаж | Назначение |
|---|---|
| 2 этаж | спортивные активности |
| 3 этаж | шумные активности |
| 4 этаж | спокойные активности |
Слот — 2 часа. Будни 12:00–00:00, выходные с 10:00. Запись открыта на 5 дней вперёд.
Один резидент может занять один слот в календарный день, максимум 15 человек в группе.
Занятость одна на всех: как только слот забронирован, он мгновенно исчезает и у бота,
и на публичной странице, и появляется в шахматке. Ничего сверять вручную не нужно.
| Роль | Задачи |
|---|---|
| Сервис-координатор | Подтверждает и отклоняет заявки, запускает группы в корпус, принимает помещение |
| Администратор / ресепшн | Проверяет код на входе, отмечает «пришли» или «не пришли» |
| Администрация | Смотрит отчёты и историю в CRM, меняет правила в настройках |
Заявка → На подтверждении → Подтверждена (выдан код) → Идёт → Пришёл Отказные варианты: Отклонена · Отменена · Не пришёл
Те же названия используются и в кабинете, и в стадиях сделки в CRM — это одна и та же бронь,
показанная в двух местах.
Дальше: Инструкция сервис-координатора
Заявка от резидента не действует, пока её не подтвердил координатор. Это главное правило —
без подтверждения группа в корпус не заходит.
Кабинет управляющего → вкладка «Заявки». Рядом с названием вкладки показано число заявок,
ожидающих решения. Список обновляется сам каждые 20 секунд.
Нажмите «Подтвердить».
Что произойдёт:
Нажмите «Отклонить» и напишите причину — она уходит резиденту дословно, поэтому формулируйте
понятно: «на это время этаж занят мероприятием кампуса», «активность не подходит для этого этажа».
Что произойдёт:
За час до начала слота необработанная заявка отклоняется автоматически, резиденту уходит
уведомление, слот освобождается. Сделано, чтобы забытая заявка не держала вечерний слот впустую.
Порог настраивается.
За 5 минут до начала группа собирается у входа. Порядок:
Подробнее: Вход по коду
сообщить координатору, а вы отменяете бронь через шахматку.
код сохранится, история не задвоится.
количество участников, корпус и комната.
Нажмите «Не пришли». Бронь закроется как неявка, сделка перейдёт на стадию «Не пришёл».
Неявки копятся: при повторных случаях система подскажет ограничить резидента.
Если никто ничего не нажал, бронь закроется автоматически через 20 минут после окончания слота.
«Код не найден или уже погашен». Варианты: код уже использован на этом входе, бронь отменена
или отклонена, либо резидент диктует код от прошлой брони. Найдите его в шахматке по фамилии —
там видно актуальный статус.
Резидент не помнит код. В боте раздел «Мои брони» показывает код по подтверждённой брони.
Либо найдите бронь в шахматке — код указан в ячейке.
Пришли раньше времени. Код работает и до начала слота — можно запустить, если этаж свободен.
Пришло больше человек, чем в заявке. В текущей версии система хранит только количество; сверку
состава ведёт координатор по регламенту. Если людей больше заявленного — решение за координатором.
Вкладка «Шахматка» — сетка «этаж × время» на выбранный день. Сверху лента дат: вчера, сегодня
и дни вперёд по горизонту записи.
Статусы в ячейках: *ждёт подтверждения*, *подтверждена*, *идёт*, *пришли*, *не пришли*,
*отменена*, *отклонена*.
Кликните по свободной ячейке и заполните: ФИО, телефон, корпус, комнату, активность, количество
участников.
Такая бронь создаётся сразу подтверждённой — сотрудник заводит её осознанно, ждать
подтверждения не нужно. В CRM появятся контакт и сделка, как при обычной брони.
Телефон лучше указывать: по нему система находит существующий контакт и не плодит дубли.
Кликните по занятой ячейке и выберите действие:
| Действие | Что делает |
|---|---|
arrive | Отметить «пришли», закрыть бронь успешно |
noshow | Отметить неявку |
cancel | Отменить бронь, слот освобождается |
approve | Подтвердить заявку (то же, что кнопка на вкладке «Заявки») |
reject | Отклонить с причиной |
Перенос выполняется через действие переноса: указываются новая дата и время. Важно:
код сохраняется, сделка та же — история не задваивается, резиденту уходит уведомление
с новым временем.
Не создавайте вместо переноса новую бронь: в CRM появятся две карточки на одно событие.
Каждая бронь — это сделка в воронке «Шумный корпус», каждый резидент — контакт.
Кабинет и CRM показывают одну и ту же бронь: изменения в одном месте видны в другом.
Создаётся при первой брони. Если человек уже есть в базе (ищется по телефону) — используется
существующий контакт, дубль не создаётся. В карточку записываются корпус и комната.
| Поле | Что содержит |
|---|---|
| Пространство (этаж) | 2 / 3 / 4 этаж |
| Слот (дата и время) | начало брони |
| Активность | из списка этажа или свой текст |
| Участников | количество, включая ответственного |
| Код на входе | четырёхзначный код |
| Комментарий | детали от резидента и служебная информация |
| Стадия | Значение |
|---|---|
| На подтверждении | заявка подана, координатор ещё не решил |
| Подтверждена | код выдан, резидента ждут |
| Идёт | время брони началось |
| Пришёл | группа пришла, бронь состоялась *(успех)* |
| Не пришёл | неявка *(провал)* |
| Отклонена | координатор отказал или заявка просрочена *(провал)* |
| Отменена | резидент или сотрудник отменил *(провал)* |
Стадию сделки можно двигать мышкой в воронке — система подхватит изменение в течение минуты:
статус брони в кабинете изменится, а резиденту уйдёт уведомление, если стадия стала «Подтверждена»
или «Отклонена».
Важно: из CRM тянется только статус. Дата, время и состав меняются в кабинете —
так календарь защищён от случайной правки в карточке.
Всё, что нужно руководителю, строится штатными средствами Битрикс24 по сделкам воронки:
Быстрые цифры без CRM — вкладка «Отчёты» в кабинете: брони за 30 дней, ожидающие
подтверждения, состоявшиеся, неявки, загрузка пространств, топ активностей.
Права на воронку выдаются администратором портала в интерфейсе Битрикс24
(CRM → Настройки → Права доступа). Через API права не выдаются — только руками.
Кабинет → вкладка «Настройки». Изменения вступают в силу сразу — бот и публичный календарь
начинают работать по новым правилам без перезапуска и без программиста.
Для каждого этажа задаются:
Растяжка|Йога|Танцевальная тренировка|Функциональная тренировка|Другое.
Вариант «Другое» даёт резиденту написать свою формулировку — оставляйте его в списке.
| Настройка | Что делает | По умолчанию |
|---|---|---|
| Длительность слота, мин | шаг сетки времени | 120 |
| Будни: с / до | окно работы в будни | 12:00 / 24:00 |
| Выходные: с / до | окно работы в выходные | 10:00 / 24:00 |
| Горизонт записи, дней | на сколько дней вперёд открыта запись | 5 |
| Броней на резидента в день | лимит на календарный день | 1 |
| Максимум участников | вместимость группы | 15 |
| Подтверждение координатором | 1 — заявки требуют решения, 0 — бронь сразу действует | 1 |
| Удержание слота, мин | сколько держится слот на время оформления | 15 |
| Авто-отклонение заявки, мин до слота | когда снимать необработанную заявку | 60 |
| Запрет отмены, мин до слота | позже резидент не отменяет сам | 120 |
| Напоминание за, ч | первое напоминание | 3 |
| Сбор у входа за, мин | второе напоминание | 5 |
| Автозакрытие после слота, мин | когда закрывать прошедшую бронь | 20 |
| Закрывать как | done (пришли) или noshow (не пришли) | done |
| Ответственный в CRM (id) | на кого вешать контакты и сделки | — |
| Ссылка на правила | документ, который бот показывает резиденту | — |
Закрыть этаж на ремонт или мероприятие. Занять нужные слоты ручными бронями либо временно
выключить пространство. Для разового мероприятия проще ручная бронь на нужное время.
Изменить время работы на праздники. Поменяйте окно «с / до» — сетка пересчитается сразу.
Открыть запись дальше на неделю. Увеличьте «Горизонт записи».
Разрешить две брони в день. Поставьте «Броней на резидента в день» = 2. Помните, что вечерние
слоты дефицитные — правило защищает от захвата времени одними и теми же группами.
Отключить подтверждение (например, на время эксперимента). Поставьте «Подтверждение
координатором» = 0 — брони будут действовать сразу с выдачей кода.
Тексты сообщений бота, состав шагов диалога и правила проверки участников меняются в коде —
это делает исполнитель. Скажите, что нужно изменить, — правка занимает минуты.
Резидент пишет в мессенджер кампуса → сообщение попадает в Открытую линию «Шумный корпус» →
диалог ведёт бот → бронь оформляется, и вся переписка остаётся в карточке сделки.
| Что | Значение |
|---|---|
| Открытая линия | «Шумный корпус», id 9 |
| Бот линии | «Шумный корпус», id 351 — ведёт диалог с резидентом |
| Что создаёт линия | сделку (не лид) — режим «создавать сделку» |
| Воронка | «Шумный корпус» — туда попадают все брони |
| Перевод на оператора | через 24 часа бездействия либо по просьбе резидента |
| Очередь операторов | сотрудники, указанные в настройках линии |
Когда резидент пишет впервые, Открытая линия сама заводит контакт и сделку и привязывает к ним
чат. Бот не создаёт вторую сделку — он заполняет ту, которую завела линия: подставляет
пространство, слот, активность, количество участников и код.
Результат: в карточке сделки одновременно видно и параметры брони, и всю переписку — кто что
писал, когда бот выдал код, о чём просил резидент. Отдельно искать диалог не нужно.
Диалог приходит в Чат Битрикс24 → раздел «Открытые линии». Пока диалог ведёт бот, он
операторов не занимает. Оператор подключается в двух случаях:
Когда диалог у оператора, бот в него не вмешивается.
Канал подключается в интерфейсе Битрикс24: **Контакт-центр → нужный мессенджер → выбрать линию
«Шумный корпус»**. Для Telegram — штатный коннектор Битрикс24: указывается токен бота кампуса,
созданный в BotFather.
После подключения проверьте: напишите в канал с личного аккаунта, диалог должен появиться в линии
«Шумный корпус», а бот — ответить приветствием.
Пока канал кампуса не подключён, бот доступен напрямую в Telegram — тестовый @UKMiraTest_bot.
Логика диалога у обоих каналов одна и та же.
их по одному в API, интерфейс покажет «сохранено», а значение не изменится. Меняйте настройки
в интерфейсе или просите исполнителя.
Правда — в настройках линии, которые возвращает API; при сомнении спросите исполнителя.
по контакту, который линия привязала к чату, и дозаполняет карточку из ответов бота.
Бот не отвечает в линии. Проверьте, что линия активна и в её настройках включён бот
«Шумный корпус». Затем — что приложение работает (у исполнителя есть страница состояния).
Диалог сразу уходит к оператору. Значит бот отключён на линии или упал — обращения при этом
не теряются, их видит оператор.
В сделке нет переписки. Такое бывает, если бронь оформлена не через линию, а напрямую
в Telegram-боте или руками в кабинете — там переписки в Битрикс24 просто нет.
«Бот не даёт забронировать — пишет, что бронь уже есть».
Действует правило «одна бронь в календарный день». Пусть выберет другой день или отменит текущую
бронь в разделе «Мои брони».
«Не приходит код».
Код приходит только после подтверждения координатором. Проверьте вкладку «Заявки» — возможно,
заявка ещё ждёт решения.
«Хочу отменить, но кнопка не работает».
До начала осталось меньше двух часов — самостоятельная отмена закрыта. Отмените бронь за резидента
в шахматке и напомните, что предупреждать нужно заранее.
«Ошибся в комнате / корпусе».
В боте есть «Профиль» → «Изменить данные». Карточка контакта в CRM обновится при следующей брони;
если нужно сразу — поправьте контакт в Битрикс24 руками.
«Слот был свободен, а теперь занят».
Скорее всего, его придержал другой резидент на время оформления (15 минут). Если он не завершит
оформление, слот вернётся в календарь автоматически.
Нужно закрыть этаж на мероприятие.
Заведите ручные брони на нужные слоты в шахматке — с пометкой в поле активности («мероприятие
кампуса»). Резиденты этих слотов не увидят.
Группа пришла без ответственного.
По правилам ответственный должен присутствовать всю бронь. Решение за координатором; систему это
не касается — она хранит, кто ответственный.
Пришли не в свой слот / раньше.
Код работает и до начала. Если этаж свободен — можно запустить, но помните: следующий слот может
быть занят другой группой.
Нужно перенести бронь на другое время.
Используйте перенос в шахматке, а не новую бронь: код сохранится, история не задвоится,
резидент получит уведомление.
Резидент нарушил правила.
Отметьте это в комментарии к сделке. Ограничение бронирования пока применяется вручную:
скажите исполнителю, если нужно закрыть резиденту доступ на срок.
Заявок много, все похожие.
Смотрите на этаж и активность: спорт — только 2 этаж, шумные форматы — 3, спокойные — 4.
Несоответствие — повод отклонить с понятной причиной.
Кабинет не открывается. Нужна ссылка с ключом доступа — она у координатора и у исполнителя.
Ключ можно поменять, если он попал не тем людям.
Данные в кабинете «застыли». Страница обновляется сама каждые 20 секунд; если нет —
перезагрузите вкладку.
Стадию сделки подвинули в CRM. Это разрешено: система подхватит изменение в течение минуты
и, если стадия «Подтверждена» или «Отклонена», пошлёт резиденту уведомление.
Сделку удалили в CRM. Бронь останется в кабинете; при следующем действии система заведёт
карточку заново. Лучше так не делать — историю не восстановить.
Раздел для приёмки: что проверить перед тем, как открывать бронирование резидентам.
Тесты независимы, порядок любой. Удобнее проверять с телефона.
| № | Что делаем | Что должно получиться |
|---|---|---|
| 1 | Пишем боту первый раз, проходим знакомство (ФИО, корпус, комната, телефон) | Бот запоминает данные, в CRM появляется контакт с корпусом и комнатой |
| 2 | Бронируем слот: дата → этаж → время → активность → участники | Приходит «Заявка №N отправлена», в кабинете во вкладке «Заявки» карточка, в CRM сделка на стадии «На подтверждении» |
| 3 | Подтверждаем заявку в кабинете | Резиденту приходит код, сделка → «Подтверждена», запись в журнале |
| 4 | Отклоняем другую заявку с причиной | Резиденту приходит причина, слот сразу свободен, сделка → «Отклонена» |
| 5 | Вводим код на вкладке «Вход по коду», жмём «Пришли» | Показан состав группы, статус → «Пришли», сделка → «Пришёл», повторный ввод кода не срабатывает |
| 6 | Смотрим публичный календарь после брони | Слот показан занятым, у бота он больше не предлагается, в шахматке виден |
| 7 | Пробуем занять второй слот на тот же день | Бот отказывает: одна бронь в день |
| 8 | Начинаем оформление и бросаем на полпути | Слот занят ~15 минут, потом освобождается сам |
| 9 | Отменяем бронь в разделе «Мои брони» | Слот свободен, сделка → «Отменена». Если до начала меньше 2 часов — бот отказывает и предлагает координатора |
| 10 | Заводим ручную бронь кликом по свободной ячейке шахматки | Бронь сразу подтверждена, в CRM контакт и сделка |
| 11 | Двигаем стадию сделки руками в CRM (например, в «Не пришёл») | В течение минуты статус в кабинете меняется, в журнале запись с автором «CRM» |
| 12 | Меняем настройку (например, горизонт записи) и сохраняем | Бот и календарь сразу работают по новым правилам |
| 13 | Открываем вкладку «Отчёты» | Счётчики, загрузка этажей, популярные активности |
| 14 | Пишем в канал Открытой линии | Диалог появляется в линии «Шумный корпус», бот отвечает, переписка видна в карточке сделки |
формулировки, порядок вопросов, эмодзи.
сценарии выходного дня: сетка там начинается раньше.
бот должен вежливо переспросить, а не молчать.
Пишите одним сообщением исполнителю:
Если проблема в боте — приложите номер заявки или код брони. Если в кабинете — скажите,
на какой вкладке.
Чтобы отвечать на вопросы студентов, не открывая бота.
| Кнопка | Что делает |
|---|---|
| 📅 Забронировать | Запускает выбор: дата → этаж → время → активность → участники |
| 🕒 Свободное время | Показывает ближайшие свободные слоты по всем этажам списком |
| 🎫 Мои брони | Список броней со статусом и кодом, кнопка отмены |
| 👤 Профиль | ФИО, корпус, комната, телефон; можно изменить |
| 📋 Правила | Короткая выжимка правил и ссылка на полный документ |
| 💬 Координатор | Как связаться с сервис-координатором |
Повторно эти вопросы не задаются.
бронь, не показывается.
| Событие | Что получает резидент |
|---|---|
| Заявка отправлена | Номер заявки, напоминание, что приходить рано |
| Подтверждена | Код на вход и памятка: собраться у входа за 5 минут |
| Отклонена | Причина от координатора и предложение выбрать другое время |
| Просрочена | Заявку не успели подтвердить, слот освобождён |
| Напоминание за 3 часа | Время брони и код |
| За 5 минут | «Соберите группу у входа», код |
| Код принят на входе | «Хорошей активности», напоминание сдать помещение |
| Перенос сотрудником | Новое время, код прежний |
Все формулировки меняются по просьбе кампуса — это правки текста, а не переделка системы.
Документ для тех, кто сопровождает решение: как всё устроено, где лежит код, как внести правку,
кому что доступно и как выдать доступы.
| Слой | Что делает | Где живёт |
|---|---|---|
| Telegram-бот / бот Открытой линии | Диалог с резидентом: знакомство, бронь, код, уведомления | внутри приложения |
| Движок бронирования | Календарь занятости, правила, удержание слотов, статусы | внутри приложения (SQLite) |
| Публичный календарь | Открытая страница со свободными слотами | внутри приложения, роут / |
| Кабинет управляющего | Заявки, шахматка, вход по коду, отчёты, журнал, настройки | внутри приложения, роут /admin |
| CRM Битрикс24 | Контакты, сделки-брони, история, отчётность | портал кампуса |
Источник истины по занятости — база приложения, а не календарь Битрикс24. Стадия сделки —
отражение статуса брони. Обратная связь тоже есть: если стадию подвинуть руками в CRM,
приложение подтянет статус к себе в течение минуты (только статус, не время и не состав).
| Что | Значение |
|---|---|
| Портал | neymark.bitrix24.ru |
| Приложение (VibeCode) | https://app-a016d788f810.vibecode.bitrix24.tech |
| Сервер | выделенная VM, тариф bc-agent (≈300 ₽/мес), id 7b2a7daa-cf2c-4594-9244-2a7698cebf9f |
| Служба на сервере | systemd shumny, порт 3000, код в /opt/app, база в /var/lib/booking/ |
| Воронка CRM | «Шумный корпус», id 9 |
| Открытая линия | «Шумный корпус», id 9, режим «создавать сделку» |
| Бот линии | «Шумный корпус», id 351 |
| Встройка в портал | пункт левого меню «Шумный корпус» + вкладка в карточке сделки |
| База знаний | вкладка «Инструкции» в кабинете + веб-версия по ссылке |
«Горячая вода» живёт отдельно (сервер db523e01…, воронка 7, линия 3, бот 339) и этим проектом
не затрагивается.
| Что | Значение |
|---|---|
| Публичный календарь | https://biztune.ru/shumny/ |
| Кабинет | https://biztune.ru/shumny/admin?k=<ключ> |
| Telegram-бот | @UKMiraTest_bot |
| CRM | наш портал biztune39.bitrix24.ru, воронка «Шумный корпус» id 50 |
| Сервер | 159.194.236.48, systemd shumny, порт 3111, база /var/lib/shumny/booking.db |
Два контура независимы: тесты на демо-стенде не попадают в CRM кампуса.
Где лежат: рабочая копия у исполнителя — ~/ai-lab/gotovye-resheniya/apps/resource-booking/.
app/ tg.py транспорт Telegram (long-polling, кнопки) ol.py транспорт Открытой линии (события бота → тот же сценарий) tgbot.py сценарий диалога: знакомство, бронь, «мои брони», уведомления booking.py правила, удержание слота, модерация, статусы, фоновые проверки slots.py сетка слотов (в т.ч. через полночь), свободное время, шахматка store.py SQLite: настройки, пространства, брони, резиденты, журнал b24.py клиент API Битрикс24: контакты, сделки, стадии, бот main.py HTTP: публичная страница, кабинет, API, фоновые задачи, синхронизация static/ public.html (календарь), admin.html (кабинет) scripts/ setup_b24.py настройка портала: воронка, стадии, поля (можно запускать повторно) deploy.py сборка и деплой на VibeCode docs/kb/ эта база знаний PLAN.md разбор ТЗ и принятые решения README.md краткая карта решения и команды
Поставка лежит у кампуса. Полный комплект — исходный код, скрипты настройки портала и
деплоя, вся база знаний, README и разбор ТЗ — находится:
/opt/app (папки app/, scripts/, docs/);release, v1, full-delivery.Ничего отдельно запрашивать у исполнителя не нужно: всё, что нужно для поддержки и доработки
решения, уже на стороне кампуса.
Как скачать код с боевого сервера. Платформа хранит снимки исходников при каждом деплое:
SRV=7b2a7daa-cf2c-4594-9244-2a7698cebf9f
BASE=https://vibecode.bitrix24.tech/v1/infra/servers/$SRV
# список версий: помеченная релизная имеет теги release, v1, full-delivery
curl -H "X-Api-Key: $VIBE_API_KEY" "$BASE/sources"
# скачивание идёт в два шага — сначала ссылка, потом файл
URL=$(curl -s -H "X-Api-Key: $VIBE_API_KEY" "$BASE/sources/<версия>/download" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['data']['url'])")
curl -L "$URL" -o shumny-korpus.tar.gz
tar -xzf shumny-korpus.tar.gz
В архиве: app/ — код, scripts/ — настройка портала и деплой, docs/kb/ — база знаний
статьями, docs/*.html — она же одним документом, README.md, PLAN.md, .env.example.
Секреты (ключи портала, токен бота) в поставку не входят — они лежат только в .env
на самом сервере.
python3 -m uvicorn app.main:app --port 3111 (нужен .env с ключом портала).
set -a; . ./.env; set +a
export B24_CATEGORY_ID=9 B24_STAGE_NEW=C9:NEW B24_STAGE_PREPARATION=C9:PREPARATION \
B24_STAGE_EXECUTING=C9:EXECUTING B24_STAGE_WON=C9:WON B24_STAGE_LOSE=C9:LOSE \
B24_STAGE_UC_REJECT=C9:UC_REJECT B24_STAGE_APOLOGY=C9:APOLOGY \
OL_ENABLED=1 OL_BOT_ID=351 OL_LINE_ID=9 ADMIN_PASSWORD=<ключ кабинета> \
PLACEMENT=dedicated PLAN=bc-agent REGION=ru-central1-a RUNTIME=static
python3 scripts/deploy.py
Деплой заменяет код в /opt/app, база в /var/lib/booking/ остаётся — брони не теряются.
Грабли, на которые уже наступили:
python311 платформы тянет внешний PPA, который недоступен с этих машин — деплой падает. Поэтому RUNTIME=static и системный Python: так работает стабильно.
отвечает «сохранено» и молча игнорирует.
он живёт 24 часа и не продлевается. Персональным ключом плейсменты не привязать.
handler в запросе привязки Битрикс не использует — он проксирует через bitrix-handler на appUrl приложения.
Поэтому на каждое решение нужно своё OAuth-приложение: одно на «Горячую воду», другое на
«Шумный корпус». Если привязать оба пункта к одному приложению, второй пункт будет открывать
первое решение (наступили на это 04.08.2026).
api.telegram.org — прямой запрос отваливается потаймауту, поэтому Telegram-бот на сервере приложения сам по себе не поднимается. Решается
двумя способами: либо канал Telegram подключается штатным коннектором к Открытой линии
(трафик идёт через инфраструктуру Битрикса), либо запросы бота проксируются через сервер
исполнителя — переменная TELEGRAM_API указывает на прокси вместо api.telegram.org.
Сейчас включён второй вариант.
демо-стенде с тем же токеном, Telegram отдаёт Conflict: terminated by other getUpdates.
Держите TG_ENABLED=1 только там, где бот должен работать.
Политика — «только названные пользователи». Сейчас в списке:
| Сотрудник | id |
|---|---|
| Домницкий Виталий | 1 |
| Шерстобитов Алексей | 15 |
| Ламинцева Евгения | 149 |
| Звездин Константин | 161 |
| Пазина Милена | 187 |
| Бобырь Александр (исполнитель) | 313 |
Тот же состав, что и у «Горячей воды».
Через интерфейс VibeCode: кабинет платформы → приложение «Шумный корпус» → «Доступ» →
добавить сотрудника.
Через API (быстрее, если сотрудников несколько):
SRV=7b2a7daa-cf2c-4594-9244-2a7698cebf9f
# найти пользователя портала
curl -H "X-Api-Key: $VIBE_API_KEY" ".../v1/infra/servers/$SRV/b24-users?search=Иванов"
# выдать доступ
curl -X POST -H "X-Api-Key: $VIBE_API_KEY" -H "Content-Type: application/json" \
-d '{"type":"user","userId":"243","userName":"Иванов Иван"}' \
"https://vibecode.bitrix24.tech/v1/infra/servers/$SRV/access"
# посмотреть список
curl -H "X-Api-Key: $VIBE_API_KEY" ".../v1/infra/servers/$SRV/access"
Убрать доступ — DELETE .../access/<id записи>.
Права CRM выдаются только руками в интерфейсе — API для этого у платформы нет.
Если у сотрудника нет прав на воронку, брони в CRM он не увидит, но кабинет приложения
работать будет — это разные системы прав.
Наш тестовый бот @UKMiraTest_bot на время обкатки работает параллельно, в демо-контуре.
Приложение живёт на тарифе bc-agent — он вытесняемый: облако принудительно перезапускает
такую машину примерно раз в сутки, с коротким окном недоступности. В этот момент Битрикс24 может
показать «Ошибка при показе приложения» — достаточно обновить страницу через минуту.
Что настроено, чтобы это почти не мешало:
машина поднята.
сразу будит его, не дожидаясь, пока сотрудник наткнётся на ошибку. Лог —
/var/log/shumny-keepawake.log на сервере исполнителя.
Если нужна работа без единого перерыва — переходим на невытесняемый тариф bc-small
(2 ядра / 2 ГБ, 1200 ₽/мес вместо 300 ₽/мес). Там принудительных перезапусков нет вообще.
Решение за кампусом: разница 900 ₽/мес.
| Симптом | Что проверить |
|---|---|
| «Ошибка при показе приложения» | Машина перезапускается облаком (см. 11.8а). Обновите страницу через минуту — сторож будит её автоматически |
| Бот молчит | Приложение запущено? (страница /health) Линия активна, бот включён на линии? |
| Кабинет не открывается | Ссылка с ключом доступа; сотрудник в списке доступа приложения |
| Брони не попадают в CRM | Ключ портала не истёк; воронка 9 на месте; поля сделки не удалены |
| Календарь пустой | Проверить пространства и расписание во вкладке «Настройки» |
| Слот занят «навсегда» | Скорее всего висит удержание — оно снимается автоматически, максимум 15 минут |
Логи приложения — на сервере (/var/log службы shumny) и в кабинете платформы VibeCode.
Журнал действий сотрудников — вкладка «Журнал» в кабинете.
/var/lib/booking/booking.db на сервере приложения; переживаетпередеплой. Резервную копию можно снять командой скачивания файла с сервера.
Практика: перед крупной правкой снимаем копию базы и делаем деплой; при проблеме
возвращаем предыдущий снимок кода.
Кто первым взял заявку — тот её и ведёт. Никаких графиков смен, замен и больничных
система не учитывает: она просто показывает заявку всем и запоминает, кто откликнулся.
дата и время, ФИО резидента с корпусом и комнатой, активность, число участников, комментарий.
уходит сообщение: «Бронь №N взял в работу такой-то». Дальше он ведёт резидента.
в чат уходит отдельное уведомление. В кабинете такая заявка помечена красным.
обычной сменой ответственного в карточке сделки.
Пороги (час и 30 минут) меняются в кабинете, вкладка «Настройки».
| Когда | Кто ответственный |
|---|---|
| Заявка только создана | Робот Шумный корпус — служебный пользователь портала |
| Координатор подтвердил | Тот, кто нажал «Подтвердить» |
| Сработала эскалация | Администратор СПиР из настроек |
Так брони не висят на конкретном сотруднике до того, как он их взял, и никто не получает
чужие карточки в свою воронку.
Сейчас подключён чат в Telegram — тот, куда добавлен бот бронирования.
Как подключить или сменить чат: добавьте бота в нужный чат и напишите там команду
/start@имя_бота. Бот ответит, что чат подключён, и запомнит его. Команда /chatid покажет
идентификатор текущего чата.
Кроме Telegram поддерживаются ещё два канала — включаются в «Настройках» независимо,
можно использовать сразу несколько:
| Канал | Что нужно указать |
|---|---|
| Telegram | id чата (заполняется автоматически по команде выше) |
| Чат Битрикс24 | id чата портала — бот пишет туда как обычный участник |
| MAX | токен бота MAX и id чата |
| Настройка | Значение |
|---|---|
| Чат координаторов: Telegram / Битрикс24 / MAX | куда слать уведомления |
| Токен бота MAX | нужен только для канала MAX |
| Напомнить в чат через, мин | по умолчанию 60 |
| Назначить админа СПиР ещё через, мин | по умолчанию 30 |
| Администратор СПиР (id) | на кого назначать просроченные заявки |
| Ответственный в CRM (id) | кто владеет заявкой до подтверждения — по умолчанию робот |
Если резидент записался незадолго до начала слота, заявка помечается в чате как срочная
и не отклоняется автоматически: у координатора просто не было времени её посмотреть, и отказ
за это был бы несправедлив.
Автоматически снимаются только те заявки, которые пролежали без решения дольше порога, —
чтобы слот вернулся другим резидентам, а не сгорел. Резидент получает уведомление с причиной.
/chatid и сверьте идентификатор с полем в «Настройках»./start@имя_бота в новом, старый отключится сам.Вопросы и правки — исполнителю: Тюнинг бизнеса, biztune.ru