Разбор для своих

Как работает
Остро

Что бот умеет, кому и когда пишет, что происходит после каждого нажатия. Без технических слов — так, чтобы можно было объяснить это команде своими словами через пять минут после прочтения.

01

Зачем он нужен

Одна фраза: бот — это дежурный, который ничего не забывает и вовремя дёргает нужного человека.

Сейчас работа держится на памяти и переписке. Задачу поставили в чате — она уехала вверх и потерялась. Подрядчику написали три недели назад — и никто не помнит, ответил он или нет. Руководитель узнаёт о просрочке, когда уже поздно что-то делать.

Бот берёт на себя ровно эту часть: помнить и напоминать. Он не управляет людьми и не заменяет обсуждение — он следит за тем, чтобы ничего не провалилось молча.

Главная мысль

Всё, что бот делает, сводится к трём вещам: сообщить нужному человеку, дождаться от него подтверждения и позвать руководителя, если подтверждения нет. Остальное — детали этих трёх шагов.

02

Три роли

У каждого человека одна роль. Она определяет, что он видит и что может нажать.

Сотрудник

Исполнитель

Видит только своё. Соня, Алёна, Аня — и ты тоже.
  • Получает задачи, назначенные лично ему
  • Подтверждает получение — кнопка «Взял»
  • Отмечает, что работа сдана
  • Сообщает, что застрял, и пишет причину
  • Отмечает получение КП от подрядчика
  • Видит свои ближайшие сроки
  • Сдаёт регулярные отчёты
Руководитель

Ведёт команду и всю повседневную работу

Всё, что может сотрудник, плюс:
  • Заводит и отключает сотрудников
  • Назначает роли
  • Создаёт проекты и тендеры
  • Подключает под них таблицы и папки
  • Создаёт задачи и назначает исполнителей
  • Переносит сроки
  • Принимает работу — «Выполнено» ставит он
  • Видит задачи всей команды и кто не отреагировал
  • Получает утреннюю сводку
Администратор

Отвечает за саму систему

Техническая роль. Это ты.
  • Подключает Google-таблицы и Диск
  • Меняет правила напоминаний
  • Смотрит системный журнал
  • Чинит, если что-то сломалось
Почему заведение людей отдано руководителю, а не администратору

Состав команды и новые тендеры меняются каждую неделю. Если для каждого нового сотрудника нужно идти к тому, кто занят кодом, система умирает на второй неделе — люди просто возвращаются в чат.

Поэтому всё, что происходит регулярно — люди, роли, проекты, таблицы — делает руководитель через приложение. За администратором остаётся только то, что настраивают один раз.

Одна учётная запись, две шляпы

Роль администратора не отменяет обычную работу. Ты остаёшься рядовым исполнителем: получаешь свои задачи, жмёшь «Взял», сдаёшь отчёты. Права администратора просто добавляют доступ к настройкам — отдельного аккаунта для этого не нужно.

Почему «Выполнено» ставит не исполнитель

Исполнитель может нажать «Сдал» — это значит «я закончил, проверьте». Закрыть задачу может только тот, кто её поставил. Иначе статус «выполнено» перестаёт что-либо значить: каждый закрывает сам себя, и картина в системе расходится с реальностью.

Если команде это окажется неудобно — правило меняется одной строкой.

03

Как попасть внутрь

Просто найти бота и написать ему недостаточно — человека должен завести администратор. Посторонний внутрь не попадёт.

1

Администратор заводит карточку

Имя, фамилия, должность, роль, проект. Telegram ID знать не нужно — достаточно юзернейма вида @anna_iv.

2

Человек открывает бота и жмёт «Начать»

Бот узнаёт его по юзернейму и навсегда привязывает к карточке настоящий Telegram ID — дальше опознание идёт по нему.

3

Бот показывает профиль и просит подтвердить

Это защита от опечатки в данных — чтобы человек не получил чужие задачи.

👋 Привет, Анна!

Вы подключены к рабочему боту команды.

Ваш профиль:
Анна Иванова
Менеджер · просчёт, креатив, персонал

Всё верно?
[ ✅ Да ] [ ❌ Это не я ]
4

Доступ открыт, появляется меню

Мои задачи · Сегодня · Дедлайны · Отчётность · Уведомления · Помощь. Руководителю добавляются Команда и Статус проектов.

Если нажать «Это не я»

Карточка не удаляется и доступ не открывается — она помечается как требующая внимания администратора. Данные могли просто перепутать при заведении, и потерять их было бы хуже, чем подождать.

04

Жизнь задачи

Семь состояний. Каждое означает что-то конкретное, и переход между ними — это чьё-то действие, а не автоматика.

Новая Принята В работе На проверке Выполнена

Плюс два состояния в стороне: Заблокирована — застрял и написал причину, Отменена — задача больше не нужна.

СостояниеЧто оно значит на самом делеКто ставит
Новая Задачу создали и назначили, но человек ещё не подтвердил, что увидел её. Пока задача здесь, бот считает, что реакции не было. Постановщик
Принята Сотрудник нажал «Взял». Это главный сигнал во всей системе: человек в курсе, руководителю можно перестать уточнять. Исполнитель
В работе Начал делать. Если по задаче трое суток ничего не происходит, бот напомнит. Исполнитель
Заблокирована Что-то мешает. Причину написать обязательно — она сразу видна руководителю в сводке. Это не жалоба, а самый быстрый способ разблокироваться. Исполнитель
На проверке Сотрудник нажал «Сдал». Работа закончена с его стороны, ждёт приёмки. Исполнитель
Выполнена Постановщик принял работу. Только с этого момента задача перестаёт считаться и напоминания по ней прекращаются. Постановщик
Отменена Задача отпала. История сохраняется — видно, что она была и почему закрылась. Постановщик

Что видно в истории задачи

По каждой задаче хранится лента: кто создал, кто принял и когда, кто переносил срок и с какой даты на какую, когда уходили напоминания. Не нужно поднимать переписку, чтобы понять, почему задача висит третью неделю.

05

Шесть проверок

Это и есть вся автоматика. Бот постоянно смотрит на шесть вещей и вмешивается, когда что-то из них идёт не так.

Проверка 1

Никто не отреагировал

Задача назначена, а «Взял» никто не нажал
  • Через 2 часа — напоминание сотруднику
  • Через 8 часов — сообщение уходит и руководителю
  • Такие задачи собраны в отдельном списке «Без реакции»
Проверка 2

Дедлайн приближается

Срок ещё не наступил, но уже близко
  • За сутки — спокойное напоминание
  • За 3 часа — «срок сегодня»
  • Только исполнителю, руководителя не дёргаем
Проверка 3

Срок прошёл

Задача не закрыта, дедлайн позади
  • В момент дедлайна — сотруднику
  • Через 2 часа — вместе с руководителем
  • Дальше раз в сутки, максимум 5 раз
Проверка 4

Задача застыла

Приняли, но трое суток ничего не происходит
  • Напоминание сотруднику обновить статус
  • Повторяется до трёх раз
  • Ловит задачи, которые формально в работе, а фактически брошены
Проверка 5

Статус-таблица не заполнена

Наступил срок обновления, а строки пустые
  • Через 30 минут после срока — напоминание
  • Потом ещё дважды с интервалом в 2 часа
  • Без заполненной таблицы сводка по проекту неполная
Проверка 6

Отчёт не сдан

Регулярная отчётность — ежедневная, недельная
  • За 2 часа до срока — напоминание
  • Через час после — сотруднику и руководителю
  • Бот сам знает, чей отчёт и за какой период

Утренняя сводка руководителю

Отдельно от всего этого в 9:00 по будням руководителю приходит одно сообщение — картина по всем его проектам:

☀️ Сводка на утро
🔴 Просрочено: 3
· НГ27-38 Дожать Crystal Ballroom — Соня
· НГ27-12 Смета по кейтерингу — Алёна
👀 Без реакции: 2
· НГ27-55 Согласовать концепт — Аня
Если всё спокойно — бот молчит

Сводка не приходит, когда нет ни просрочек, ни задач без реакции. Ежедневное «всё хорошо» приучает не читать сообщения, и однажды вместе с ним пропустят настоящее.

06

Когда пишет бот

Полное расписание. Все цифры настраиваются администратором без участия программиста — это просто данные, а не код.

ПоводКогдаКомуПовтор
Назначили задачусразуисполнителю
Нет реакции+2 часаисполнителю
Нет реакции+8 часовобоим
Скоро дедлайнза 24 часаисполнителю
Дедлайн сегодняза 3 часаисполнителю
Срок прошёлв моментисполнителю
Срок прошёл+2 часаобоимраз в сутки, до 5
Нет движения3 сутокисполнителюкаждые 3 суток, до 3
КП не подтверждено+24 часаответственномураз в сутки, до 3
Пора сдать отчётза 2 часаисполнителю
Отчёт не сдан+1 часобоимкаждые 4 часа, до 2
Сводка9:00 пн–птруководителюежедневно
Почему так подробно расписано

Молчащий бот бесполезен, но бот, которого замьютили за назойливость, вреден — вместе с шумом человек перестанет получать и важное. Поэтому до срока он напоминает мягко и только исполнителю, а руководителя подключает лишь когда сроки уже нарушены.

07

Тихие часы

С 22:00 до 8:00 бот копит сообщения и отдаёт их утром. Кроме тех, что ждать не могут.

Ждёт до утра

Рутина

  • Напоминание за сутки до срока
  • «Нет движения по задаче»
  • Отчётность и статус-таблица
  • Утренняя сводка
Проходит сразу

Срочное

  • Новая задача — человек должен знать сразу
  • Срок прошёл прямо сейчас

Тишина считается по времени того, кому пишут, а не по времени сервера. Если сотрудник в другом часовом поясе, его ночь — это его ночь.

Это стоит проверить на практике

Сейчас сообщение о свежей просрочке проходит сквозь тишину. Через неделю работы станет видно, не слишком ли это шумно — и правило поменяется в настройках, без переделки бота.

08

Сбор КП

Вторая половина системы, и по вашей таблице — самая болезненная. 195 подрядчиков, из них 70 месяцами висят без ответа.

Запрос коммерческого предложения проходит те же стадии, что и задача, но со своими названиями — теми, которые команда уже пишет в таблице руками:

Не связывались Ожидаю ответ Ожидаю КП КП получено

Дальше три исхода: В коротком списке · Не подходит · Отказ в сотрудничестве. И в конце — Выбран.

Что здесь делает бот

  • Считает дни молчания. Сколько прошло с момента, как написали подрядчику. Список сортируется по этому числу — сверху те, кто молчит дольше всех.
  • Напоминает ответственному через сутки после отправки запроса, потом ещё дважды, потом подключает руководителя.
  • Ловит файлы с Диска. Когда КП кладут в папку категории, статус меняется сам, а ссылка на файл цепляется к строке подрядчика.
  • Показывает срез по категориям: где собрано достаточно предложений, а где ещё пусто.
Две новых пометки, которых не хватает в таблице

Сейчас у восьми площадок стоит «КП получено», а в колонке ВАЖНО — «НЕ ПОДХОДИТ ПО ВМЕСТИМОСТИ». Для человека разница очевидна, для подсчёта «сколько вариантов собрано» — нет: он насчитает варианты, которых на самом деле нет.

Поэтому «КП получено» и «Не подходит» разделены. Бот распознаёт это по вашим же заметкам автоматически, переписывать таблицу не нужно.

Справочник подрядчиков

Подрядчики хранятся отдельно от тендеров. Площадка, у которой запрашивали смету в этом году, участвует и в следующем — и тогда сразу видно всю историю: сколько просили, чем закончилось, кто вёл переговоры. Через три тендера у вас будет база проверенных контактов с ценами.

09

Google-таблица

Таблица остаётся. Никто не заставляет команду переучиваться — бот работает с той же таблицей, что и люди.

   Телеграм                   Таблица
   бот и приложение           живёт как жила
        │                          │
        │      правки людей ───────┤
        ▼                          │
   ┌─────────────────┐             │
   │  Система ОСТРО │ ◄───────────┘
   │  помнит всё     │
   └────────┬────────┘
            │  свои изменения пишет обратно
            └──────────────────────► в ту же таблицу
  • Правку в таблице бот видит за секунды. Перенесли срок в строке — напоминания пересчитались.
  • Изменение из бота попадает в таблицу. Нажали «Взял» — в строке появился статус.
  • Своя таблица на каждый тендер. Заводите новый проект — бот создаёт новую таблицу и папку на Диске с подпапками по категориям.
  • Бот понимает, как вы пишете. «в работе», «Взял», «сделано», «Ожидаю кп» — все варианты разбираются, переучиваться не нужно.
Почему данные всё-таки хранятся не в таблице

Google-таблица не рассчитана на то, чтобы служить базой: она не умеет надёжно обрабатывать одновременные правки, ограничивает количество обращений и заставляет перечитывать весь лист при каждой проверке сроков. Бот на такой основе тормозит и однажды молча замолкает.

Поэтому данные живут в настоящей базе, а таблица синхронизируется с ней в обе стороны. Для команды снаружи ничего не меняется — меняется только надёжность.

10

Каких данных нет

Система построена, но пустая. Вот всё, что нужно собрать, чтобы она начала приносить пользу — по убыванию важности.

Список команды
На каждого человека: имя и фамилия, должность, @username в Телеграме, роль (сотрудник или руководитель) и в каких проектах участвует. Telegram ID знать не нужно — он подтянется сам при первом входе.
15 минут
Технический аккаунт Google
Отдельная служебная учётка, от имени которой бот читает и пишет в таблицу. Создаётся в консоли Google, потом таблица открывается на её адрес с правом «Редактор». Без этого не работает половина системы: ни синхронизация, ни воронка КП, ни сбор файлов с Диска.
5 минут
Что считать отчётностью
Какие отчёты сдаются, кем, как часто и к какому времени. Например: «статус по своим подрядчикам — каждый день до 18:00» или «итоги недели — по пятницам до 17:00». Пока это не описано, две проверки из шести работать не могут.
разговор на 20 минут
Типовой набор категорий закупки
Какие категории заводить в новом тендере по умолчанию. Из вашей таблицы видно тринадцать: площадки, ведущие, кавер-группы, фотографы, аниматоры, вокалисты, печать, кейтеринг и другие. Нужно подтвердить список — он станет шаблоном для каждого нового мероприятия.
10 минут
Рабочее время команды
Во сколько начинается и заканчивается день, работаете ли по выходным. От этого зависит, когда бот молчит и когда приходит утренняя сводка. Сейчас стоит по умолчанию: тишина с 22:00 до 8:00, сводка в 9:00 по будням.
2 минуты
Домен
Нужен только для боевого запуска — для теста хватает временного адреса. Обычный домен стоит 200–300 ₽ в год.
10 минут
Самое узкое место — доступ к Google

Всё остальное можно донести по ходу. Без служебного аккаунта Google бот остаётся просто списком задач: не видит 195 подрядчиков, не считает дни молчания, не подхватывает файлы КП. Это ровно та половина, ради которой всё затевалось.

11

Как провести тест

Цель теста — не проверить, что кнопки нажимаются. Это уже проверено. Цель — понять, приживётся ли бот в реальной работе команды.

1

Выбрать трёх-четырёх человек

Лучше тех, у кого больше всего задач и подрядчиков — на них польза видна быстрее всего. Обязательно один руководитель: без него не проверить сводки и приёмку работы.

2

Прислать их список

Имя, должность, @username, роль. Заведу вручную — экран для этого ещё делается.

3

Каждый открывает бота и жмёт «Начать»

Занимает полминуты. Бот покажет профиль, человек подтверждает — и сразу видит своё меню.

4

Руководитель ставит настоящие задачи

Не выдуманные, а те, что реально стоят на этой неделе: пять-десять штук с честными сроками. На выдуманных задачах тест ничего не покажет — их никто не будет делать всерьёз.

5

Неделя обычной работы

Ничего специально делать не нужно. Люди работают как обычно, бот напоминает, руководитель получает сводки.

6

Разобрать итоги

Я выгружу цифры, вы скажете ощущения.

Что смотреть по итогам недели

  • Жмут ли «Взял». Если задачи неделю висят непринятыми — дело не в боте, а в том, что задачи ставят не так. Это ценнее любой другой находки.
  • Не слишком ли часто пишет. Замьютил ли кто-нибудь бота. Если да — какое именно сообщение стало последней каплей.
  • Ловит ли просрочки раньше людей. Узнал ли руководитель о срыве из сводки, а не постфактум.
  • Что раздражает. Самое полезное, что можно вынести из теста — список претензий. Их дешевле исправить сейчас, чем после запуска на всю команду.
Таблицу на время теста можно не трогать

Тест задач и напоминаний работает без Google. Если доступ появится раньше — включим синхронизацию прямо во время теста и проверим заодно и её.

12

Полный запуск

После теста и правок — вывод на всю команду. Порядок важен: каждый следующий шаг опирается на предыдущий.

1

Подключить Google

Служебный аккаунт, доступ к таблице, скрипт для мгновенной реакции на правки. После этого включается синхронизация.

2

Перенести действующий тендер

195 подрядчиков, статусы, ответственные, суммы — всё заезжает из таблицы автоматически. Строки, которые бот не разберёт, попадут в отдельный список: их разберём руками, их будет немного.

3

Завести всю команду

Уже через приложение, руками руководителя. К этому моменту экран управления людьми будет готов.

4

Настроить отчётность

Какие отчёты, от кого, к какому времени. Настраивается в приложении, без участия программиста.

5

Переехать на боевой сервер

Нормальный домен вместо временного адреса, резервное копирование базы по расписанию. Данные переносятся без потерь — это одна команда.

6

Показать команде — полчаса

Учить почти нечему: пришла задача — нажми «Взял», закончил — «Сдал», застрял — напиши почему. Остальное человек находит сам.

7

Первые две недели под наблюдением

Смотрим журналы, ловим шероховатости, подкручиваем частоту напоминаний под живую команду.

Чего не стоит делать

Запускать на всю команду сразу, минуя тест. Бот, который в первую неделю написал лишнего, получает мьют — и обратно доверие возвращается тяжело. Лучше поймать это на трёх людях.

13

Какой нужен сервер

Расчёт от измеренного, а не от общих слов: сколько система ест сейчас и сколько будет есть в бою.

Сколько занимает сейчас

Замеры на работающем стенде. Заодно видно, что ОСТРО — приложение лёгкое: основную память съедает база, а не боты.

ЧтоПамятьКомментарий
Бот и API40 МБОтвечает на нажатия, принимает вебхуки
Напоминания и синхронизация100 МБФоновые задания, тяжелее из-за библиотек Google
База данных~180 МБPostgreSQL, растёт вместе с данными
Веб-сервер~25 МБСертификаты и раздача страниц
Операционная система~150 МБUbuntu в покое
Всего сейчас~500 МБВместе с соседним ботом на той же машине

В бою добавится синхронизация с Google (библиотеки тяжёлые, плюс 150 МБ на пиках), рост базы и кэш. Реалистичный расход ОСТРО при двадцати сотрудниках — около 1 ГБ.

Сколько закладывать на другие проекты

Каждый похожий проект — это бот плюс своя база: от 300 до 600 МБ. Ваш нынешний contenttracker занимает всего 12 МБ, потому что написан на другом языке и без базы — но это скорее исключение.

КонфигурацияЧто потянетЦена в месяц
2 ядра · 4 ГБ · 50 ГБ ОСТРО и ещё два-три небольших проекта. Работать будет, но без запаса на пики и сборки. 700–1000 ₽
4 ядра · 8 ГБ · 80 ГБ
рекомендую
ОСТРО плюс пять-семь проектов с базами. Хватает на резкие пики, параллельные сборки и снапшоты. При этом не переплата. 1300–2000 ₽
8 ядер · 16 ГБ · 160 ГБ Десять и больше проектов, тяжёлые базы, обработка файлов и видео. Имеет смысл, если такие планы уже есть. 2600–4200 ₽

Порядок цен на осень 2026 у российских хостингов (Timeweb, Selectel, Aeza, Beget, RuVDS). У зарубежных вроде Hetzner та же машина обходится примерно вдвое дешевле, но оплата российской картой не проходит.

Про диск

  • Система и служебное — около 8 ГБ
  • ОСТРО целиком — меньше 1 ГБ, база растёт примерно на 500 МБ в год при вашем объёме
  • Каждый следующий проект — 1–3 ГБ
  • Резервные копии на самом сервере — заложить 10 ГБ

80 ГБ хватит на годы вперёд. Брать больше стоит, только если планируется хранить файлы, видео или большие выгрузки.

Что важнее объёма

Диск NVMe, а не обычный SSD — база данных чувствительна к скорости диска сильнее, чем к количеству ядер.

Снапшоты у хостера — обычно 10–20% к цене. Это возможность откатить весь сервер целиком за минуту, если что-то пойдёт не так. Стоит своих денег.

Свежая Ubuntu — 24.04. На нынешнем сервере стоит 20.04, и из-за этого пришлось поднимать базу окольным путём: свежие версии для неё уже не выпускают.

Переезд ничего не сломает

Всё приложение — это два файла и база. Переезд на новый сервер занимает около часа: развернуть, перенести дамп базы, перевести домен. Так что нынешний сервер можно спокойно использовать для теста и не спешить с покупкой.

14

Что уже работает

Честный срез: что можно потрогать прямо сейчас, а что ещё делается.

Бот на сервере
Работает круглосуточно, отвечает мгновенно. Проверено: уведомление доходит за минуту, нажатие меняет статус в базе за секунду.
Готово
Вход и подтверждение личности
Первый вошедший в пустую систему становится администратором, дальше людей заводит он.
Готово
Задачи и все переходы статусов
Кнопки «Взял», «В работе», «Сдал», «Застрял» работают прямо в чате. История пишется.
Готово
Напоминания по расписанию
Все двенадцать правил из таблицы выше. Проверено на живых задачах с разными сроками.
Готово
Дизайн и прототип экранов
Пять экранов мини-приложения на настоящих данных вашего тендера.
Готово
Мини-приложение на живых данных
Экраны нарисованы и работают, но пока показывают демонстрационные задачи, а не настоящие из базы.
Следующее
Связь с Google-таблицей
Код готов и проверен на вашей таблице. Ждёт доступа: нужен технический аккаунт Google.
Нужен доступ
Сбор КП и воронка подрядчиков
Устройство данных готово, экраны нарисованы. Включается после связи с таблицей.
После таблицы
Отчётность и статус-таблица
Проверки описаны, расписание есть. Нужно договориться, какие именно отчёты и когда.
В планах
Экраны управления для руководителя
Добавление сотрудников, назначение ролей, создание тендеров и подключение к ним таблиц. Пока это делается через базу — то есть моими руками. Это следующее после подключения приложения к живым данным.
Приоритет

Что нужно от тебя, чтобы двигаться дальше

  • Технический аккаунт Google — чтобы бот получил доступ к таблице. Это единственное, что сейчас блокирует половину функционала.
  • Решить про отчёты — какие, от кого и к какому времени.
  • Список команды — кого заводить, с какими ролями и по каким проектам.