01 · Веб-приложение и Telegram Mini App · 2026

ITSM PRO

Система заявок для дилера iiko: сервис и розница. Один адрес — и веб-приложение, и мини-апп внутри Telegram.

Роль Весь цикл: продукт, бэкенд, фронт, бот, сервер
Срок 6 недель до боевого сервера
Статус В работе у заказчика, реальные заявки
Стек Node.js · TypeScript · React · grammY

Задача

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

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


Что умеет
01

Задачи и статусы

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

02

Обсуждение и вложения

Переписка внутри задачи, файлы до 25 МБ, около сорока форматов по белому списку расширений, счётчик непрочитанного. История остаётся при задаче, а не в чате, который пролистали.

03

Заявка голосом

Одна продиктованная фраза превращается в черновик: кому, что сделать, к какому сроку, насколько срочно и по какому блоку. Человек проверяет и создаёт.

04

Уведомления в Telegram

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

05

Права доступа

Группы с галочками вместо ролей-номеров: владелец заводит свои. Видимость настраивается тремя ступенями — свои задачи, отдел, вся компания.

06

Отчёты

План работ диаграммой Ганта: стрелки зависимостей, линия «сегодня», группировка по проектам. Рядом аналитика — динамика по дням, разрезы по людям и блокам, просрочки. Обновление раз в пятнадцать секунд.

Как это начиналось
9:41Telegram · мини-апп
Задача №418 Изменить
Не печатает чек, касса №3 на Тверской
Ответственный Волкова А.
Срок сегодня, 15:00
Приоритет Высокий
Блок Сервис · розница
Обсуждение · 4 Петров И. — Заменил ленту, чек всё равно пустой Волкова А. — Везу подменный принтер, буду к 14:30 Акт_осмотра.pdf · 240 КБ
РешенаОтложить
Карточка задачи в мини-аппе: ответственный, срок, обсуждение и вложения на одном экране.
itsm.example.ru/plan
План работ Август 2026 · 23 задачи
Задача 0507091113
Миграция базы на новый сервер
Обучение розницы
Инвентаризация склада
Настройка ЕГАИС, новая точка
Приёмка кассового оборудования
Сплошная — в срокШтриховка — просроченоЛиния — сегодня
План работ в вебе: просрочка помечена не только цветом, но и штриховкой — чтобы читалась при дальтонизме.

Инженерные решения, которыми доволен
01

Разбор речи без внешних LLM

Правила и словари вместо чужого API. Понимает падежи имён, «до завтрашнего дня до 15 часов», «к пятнице», «через два часа», «15 августа», приоритет и блок. Мужские и женские формы различаются по падежам: «Александре Волковой» не уходит Александру Волкову. Ноль стоимости за заявку и никакой зависимости от чужой доступности.

02

Модель выбрана по замерам

Whisper прогнан на боевом железе — два ядра, без видеокарты. Small: 12 секунд на фразу. Medium: 32. Large-v3-turbo: 30. Распознанный текст одинаковый. Оставил small, замеры записал в README, чтобы следующий человек не переспорил решение вслепую.

03

Скорость вместо ожидания

Сервер отвечает за 0,4–0,6 секунды — заметно. Разделы запоминаются на сессию: возврат на вкладку рисуется мгновенно, свежие данные подтягиваются следом. На первое открытие место держит заглушка, чтобы высота страницы не прыгала под курсором.

04

Цвет, который читается всеми

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

Результат

Развёрнуто на боевом сервере под HTTPS. Заказчик ведёт реальные заявки и получает уведомления в Telegram.


Похожая задача? Расскажите одним сообщением.