Repository navigation
2.8.0 — Опросы, Лавешка и улучшения кабинета
Исправлены переключатели и анимации рассылок
- Переход между сообщением и опросом проигрывается один раз; загрузка результатов и автосохранение больше не перезапускают его.
- Переключатели сохраняют последнее выбранное состояние при быстрых нажатиях и медленных ответах сервера, включая выключение таймера во время его сохранения.
- Обновление редактора сохраняет подключённые элементы управления: нажатия, фокус, раскрытые сквады и открытые списки выбора не теряются при фоновом сохранении.
- Повторное раскрытие плавно продолжается от текущей высоты без наложения анимаций. Исправления применены в обеих админках.
Проверено: 371 JavaScript-тест, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. Браузерные проверки воспроизводят задержку сохранения, быстрое включение и выключение, ответ между нажатием и отпусканием кнопки, управление клавиатурой, выбор в открытом списке и подтверждение отправки. Реальные рассылки не запускались.
Плавные карточки и сообщения опросов из Telegram
- «Кому отправлять» свёрнуто в компактную строку с переключателем. Настройки раскрываются плавно; выбранные фильтры сохраняются при сворачивании.
- Добавлены плавное появление и изменение высоты вопросов, вариантов ответа, кнопок сообщения, таймера, автоответа и результатов. Учитывается системное уменьшение движения.
- Приглашение, вопросы и завершение опроса редактируются сообщением в чате бота. Сохраняются стили Telegram, ссылки, цитаты, спойлеры и premium emoji; в админке отображается оформленный пузырь с кнопкой замены на всю ширину.
- Незавершённый опрос сохраняется автоматически. Ожидание ввода переживает перезапуск; отмена сохраняет прежний текст. При возвращении открывается нужный вопрос.
Проверено: 369 JavaScript-тестов, Go-тесты рассылок, Mini App и cmd/app, интеграционные проверки на локальной базе с имитацией Telegram, сборка интерфейса и Linux amd64. В браузере проверены обе админки, раскрытие и сворачивание, сохранение фильтров, ввод и отмена сообщений, обновление предпросмотра и ширины 320–1440 px. Реальные рассылки при проверке не запускались.
Из русского и английского README удалены подробные описания отдельных функций.
Автосохранение рассылок и карточки вопросов
- У каждого вопроса появилась отдельная оболочка и тонкая стрелка, как у списков выбора. Открытие и закрытие плавно поворачивает стрелку без пересоздания заголовка.
- Поле названия опроса убрано из редактора; в списке результатов используется дата отправки.
- Убраны кнопки ручного сохранения кнопок сообщения, опроса, автоответа, письма и аудитории. Настройки сохраняются автоматически после короткой паузы при вводе; количество получателей пересчитывается после изменения фильтров.
- Запросы сохранения выполняются последовательно. Запоздавший ответ не заменяет более новый текст, выбор аудитории или настройки. Повторный уход из неизменённого поля не создаёт лишнее сохранение.
- Предпросмотр и подтверждение отправки дожидаются сохранения. При ошибке введённые изменения остаются в редакторе, отправка не запускается; обязательные поля проверяются до сохранения и отправки.
- Кнопка «Заменить сообщение» занимает всю ширину карточки. Изменения действуют во встроенном редакторе и отдельной админке.
Проверка: 368 JavaScript-тестов, включая 9 проверок очереди автосохранения, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. В браузере с тестовым API проверены сохранение опроса, кнопок, фильтров и числа получателей, таймера, автоответа и письма; задержки и ошибки ответов, повторная загрузка, сохранение фокуса и блокировка подтверждения при ошибке. Карточки вопросов и стрелки проверены на ширинах 320–1440 px с рамками и без них, в обычном и стеклянном оформлении; отдельно проверена веб-админка.
Тонкие стрелки выпадающих списков
- Справа у списков выбора добавлены тонкие стрелки с плавным поворотом при открытии и закрытии.
- Стрелки рисуются как отдельные иконки и больше не пропадают при отключении рамок. Цвет берётся из настройки иконок.
- Общий вид применён к спискам языка, шрифтов, рассылок, тарифов и других настроек, а также стандартным спискам отдельной админки.
- При системной настройке уменьшения анимации поворот происходит без движения.
Проверка: 359 JavaScript-тестов, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. В браузере проверены 120 индикаторов на ширинах 320–1440 px с рамками и без них, в обычном и стеклянном оформлении. Проверены открытие и закрытие, выбор с клавиатуры, уменьшение движения и нативный список отдельной админки.
Обновлён редактор рассылок
- Сообщение отображается в отдельном пузыре внутри карточки. Кнопка замены увеличена и расположена справа.
- «Кнопки сообщения» и «Кнопки завершения» вынесены в отдельные, постоянно видимые карточки. Раскрывающееся действие убрано; добавление и редактирование доступны сразу.
- У полей сообщения, опроса, получателей, таймера и автоответа единые размеры, скругления и отступы. Обновлены поля и кнопки почтового редактора.
- Исправлен конфликт локальных стилей с настройкой «Показывать рамки»: при отключении рамки скрыты у полей, кнопок и переключателей, включая раскрытые настройки и стеклянное оформление. Переключатели сохраняют различимые фон и положение бегунка.
- «Предпросмотр» и «Отправить» увеличены до 46 px. Отправка выделена акцентным цветом с автоматически подобранным контрастным текстом; на узком экране действия располагаются вертикально.
- Тот же редактор сообщения и опроса используется в отдельной админке.
Проверка: 359 JavaScript-тестов, Go-тесты Mini App и cmd/app, сборка интерфейса и Linux amd64. Локально проверены 32 сочетания ширины, типа сообщения, видимости рамок и материала; 16 раскладок почтового редактора и 4 раскладки отдельной админки. Проверены добавление, изменение и удаление кнопок, раскрытые настройки, отсутствие переполнения и наложения карточек, а также окно подтверждения отправки.
Исправлено оформление админки
- Из главного меню убраны «Обращения», «Список нод», «Вознаграждение за отзыв» и «Отзывы» из блока «Другие действия».
- Цвет обычных рамок применяется и к стеклянному оформлению. Цвет выделения настраивается отдельно; настройка видимости рамок продолжает работать.
- Убраны лишние подложки и рамки у строк переключателей, сквадов и разрешений. У Push-уведомлений восстановлена такая же оболочка, как у остальных пунктов меню.
- Сокращено пояснение личного управления устройствами. Категории «Бот» и «Профиль» оформлены отдельными карточками с разделителями, без номеров.
- Между группами цветов добавлены отступы; карточки больше не сливаются.
Проверка: 359 JavaScript-тестов, Go-тесты Mini App, сборка интерфейса и Linux amd64. Локально проверены 160 сочетаний раздела, ширины 320–1440 px и материала, ещё 20 раскладок отдельной админки. Проверены смена цвета рамок, независимое выделение, скрытие рамок, оболочка Push и отсутствие лишних подложек у сквадов.
Компактный интерфейс рассылок и опросов
- В Telegram оставлены две вкладки: Сообщение и Опрос. Блок Ответы на опросы находится под отправкой опроса и загружается автоматически.
- Между карточками заданы стабильные зазоры. Поля и кнопки отличаются от фона карточек, в том числе при одинаковых цветах в настройках темы и выключенных рамках.
- Убраны декоративные номера карточек и вопросов, счётчик вопросов и повторяющиеся подписи каждого варианта ответа. Строки вариантов стали компактнее; доступные подписи для экранных дикторов сохранены.
- Название опроса и кнопка начала расположены рядом. Финальные кнопки находятся внутри карточки завершения, кнопки обычной рассылки — внутри сообщения.
- Временная рассылка и автоответ показываются сразу отдельными компактными строками. Общий раскрывающийся блок дополнительных настроек удалён.
- Убран текст «Проверьте предпросмотр. Перед отправкой покажем получателей и запросим подтверждение.». Кнопка отправки помещается в одну строку; очистка черновика перенесена в иконку с подписью.
- Сохранены независимые тексты и кнопки сообщения и опроса, предпросмотр в Telegram и подтверждение с числом получателей.
Проверка: 359 тестов интерфейса, тесты Mini App и сборка Linux amd64. Проверены скриншоты мобильного интерфейса на ширине 320 и 390 px, открытые настройки, варианты ответов, результаты внутри опроса и веб-панель администратора.
Опросы в Telegram-рассылках
- Добавлен компактный редактор опроса в Рассылки → Telegram: название, кнопка начала, вопросы с вариантами ответов и финальный текст. Вопросы и завершение поддерживают обычный текст и Telegram HTML.
- Получатель получает одно приглашение. Кнопка начала, ответы на вопросы и завершение меняют это же сообщение — новые сообщения на каждом шаге не отправляются.
- Кнопки завершения опроса настраиваются отдельно от кнопок обычной рассылки: ссылка, промокод, поддержка и другие существующие действия. Автоматическая выдача подписки за прохождение не включается; вознаграждение можно настроить финальной кнопкой с промокодом.
- В разделе Ответы доступны доставленные приглашения, начатые и завершённые опросы, сводка по вариантам и ответы конкретных пользователей с постраничной загрузкой.
- Предпросмотр можно пройти в боте; он не попадает в результаты. Отправленные вопросы сохраняются отдельно от черновика, поэтому дальнейшее редактирование их не меняет. Прогресс и ответы переживают перезапуск; повторные клики не записывают ответ второй раз.
- Настройки опроса сохраняются в шаблоне рассылки. Поддерживаются до 64 вопросов и до 100 вариантов в вопросе; приглашение должно быть текстовым, без вложений. Временная рассылка удаляет ту же копию сообщения по настроенному сроку.
Проверка: 351 тест интерфейса, общий прогон Go, сборка админки и Linux, все 70 миграций на новой базе. На отдельной базе и имитации Telegram проверены редактирование одного сообщения, ошибка Telegram, повторные клики, перезапуск, неизменность отправленного опроса, предпросмотр, шаблоны и страницы ответов. Ввод и добавление вариантов проверены в браузере.
Лавешка · Lave Pay
- Добавлена Лавешка в существующие способы оплаты подписок, подарков, устройств и трафика — в Telegram и кабинете.
- Настройка в Интеграции → Лавешка: API-ключ, отдельный секрет вебхука и курс ₽/USD. Ключи зашифрованы, карточка использует обычный компактный интерфейс интеграций.
- Цены тарифов остаются в рублях; счёт создаётся в USD с округлением вверх до цента. Исходные суммы сохраняются в базе, поэтому смена курса и перезапуск не меняют ожидающие платежи. Лимиты счёта: 0,10–10 000 USD.
- Ссылка оплаты открывает Лавешку через Telegram. Поддержаны логотип, свои названия способов оплаты, история, финансовые отчёты и уведомления об оплате.
- Подпись вебхука и срок её действия проверяются; статус, магазин, заказ и сумма дополнительно сверяются через API. Недоплата, возврат и тестовое событие не выдают покупку. Повторная доставка не начисляет её повторно; временные ошибки возвращают 5xx для повторной доставки.
Подключение: сохраните интеграцию, скопируйте её Webhook URL в настройки вебхуков Lave Pay с тем же секретом, затем включите способ у нужных тарифов. Канал оплаты покупатель выбирает на странице Лавешки; СБП требует верифицированного магазина. Автоматические списания не подключаются. Официальная документация.
Проверка: 346 тестов интерфейса, общий прогон Go, сборка Linux, все 69 миграций на новой базе, сохранение настроек и ожидающих счетов после перезапуска. API проверен на имитации; реальная оплата требует ключей вашего магазина.
Компактный интерфейс рассылок и истории действий
- Таймер и автоответ собраны в один небольшой блок с иконками и полноценными переключателями. Поля раскрываются при включении настройки; кнопки сохранения появляются только после изменений и занимают место небольшой иконки.
- Вместо отдельных больших карточек история отображается компактными строками: результат, сумма, время и краткое описание. Несколько статусов одного платежа объединены в одну запись; подробности и переходы статусов раскрываются нажатием.
- Добавлены фильтры «Все», «Оплаты», «Ошибки» и небольшая кнопка обновления. Выбранный фильтр и раскрытые записи сохраняются при автоматическом обновлении истории.
- Суммы выводятся в читаемом виде, например
89 ₽вместо89.00000000 RUB. Убраны повторяющиеся подписи и стандартные значения из краткого вида. - Встроенная админка и отдельная панель используют одинаковое представление истории. Фильтры и раскрытие записей реагируют сразу.
Проверены 342 JavaScript-теста, Go-пакеты cmd/app и internal/miniapp, сборка интерфейса и Linux amd64. В браузере проверены мобильная ширина, выключенные и раскрытые настройки, группировка платежа, фильтрация и раскрытие записей в полном административном диалоге. Проверка выполнялась локально с тестовыми событиями.
История действий пользователей
В карточке пользователя появился блок «История действий» с автоматическим обновлением и подгрузкой старых записей.
- Видны запросы оплаты подписок, подарков и пакетов, включая ошибки до создания счёта; создание и смена статуса платежей записываются для всех провайдеров, платежей из бота и автоплатежей. Для платежа отображаются номер, сумма, провайдер, тариф и тип покупки.
- Записываются промокоды, запросы пробной подписки, управление подписками и устройствами, обращения в поддержку, отзывы и основные кнопки Telegram-бота. Действия в Telegram отмечаются как запрос пользователя; фактический результат платежа отражается отдельным событием.
- История хранится в базе и доступна администраторам с правом просмотра пользователей. Повторный вебхук с тем же статусом не создаёт ещё одну запись, откатившийся платёж не оставляет событие об оплате.
- Фоновые обновления и чтение истории не создают новых записей. Тексты переписки, авторизационные данные и платёжные ссылки не копируются в журнал.
Запись начинается после установки обновления. События до обновления не восстанавливаются; пользователи, существующие только в панели без аккаунта в боте, отдельной истории бота не имеют.
Проверены общие Go-тесты, 337 JavaScript-тестов, сборка интерфейса и Linux amd64. На локальной базе PGlite проверены все 68 миграций на чистой базе, переходы платежа, повторные статусы, откат транзакции и миграции, разделение историй пользователей и пагинация. Тесты интерфейса проверяют защиту от запоздавших ответов при смене карточки, подгрузку истории и обработку ошибок. Реальные платежи и рассылки при проверке не запускались.
Автоответы на Telegram-рассылки
В «Рассылки → Telegram → Автоответ на рассылки» можно включить ответ пользователям, которые пишут после получения рассылки. По умолчанию он выключен.
- Настраиваются текст (обычный или Telegram HTML), срок ожидания ответа от 1 до 168 часов, кнопка поддержки и её подпись.
- Бот отвечает один раз после последней полученной рассылки: на обычное сообщение или явный ответ на эту рассылку. Команды, платежи, группы и редактирование сообщений администратором продолжают обрабатываться как прежде.
- Настройка общая для Telegram-рассылок; очистка черновика и выбор шаблона её не сбрасывают. Настройки и учёт отправленных автоответов сохраняются после перезапуска.
- Учитываются только реальные доставки рассылок, отправленных после обновления с этой функцией. Предпросмотры, личные сообщения из карточки пользователя и закрепления не включают автоответ.
Проверены полный набор Go-тестов, 333 JavaScript-теста, сборка интерфейса и Linux amd64. Интеграционные тесты с локальной базой PGlite и имитацией Telegram проверили миграцию и откат, сохранение настроек, срок ожидания, повторные сообщения, перезапуск и повторную попытку после ошибки отправки. Реальные рассылки при проверке не отправлялись.
Упрощён интерфейс рассылок
В обоих редакторах удалены пояснение под «Игнорировать отписку от рассылки», пояснение о сроке временной рассылки и метка завершённой рассылки. Обновлена сборка интерфейса. Проверены 328 JavaScript-тестов и пакет Go internal/miniapp.
Исправлен запуск после обновления
Если новые файлы на сервере создавались с правами 600 (umask 077), бот не мог прочитать миграцию 66 и падал при запуске; сайт отвечал 502. Docker-сборка теперь явно устанавливает для каталогов публичных ресурсов права 755, для файлов миграций, переводов и изображений — 644. Бот продолжает работать от UID 1000.
Исправление включено в тот же релиз 2.8.0. Для получения исправленного образа повторите cd /opt/Link-Bot && bash ./update.sh. Проверена реальная Docker-сборка с исходной миграцией 600 и чтение всех ресурсов от UID 1000.
Добавлены временные Telegram-рассылки: сообщение автоматически удаляется из чата каждого получателя через заданный срок.
Как включить
В «Рассылки → Telegram» включите «Временная рассылка». Доступны 1, 6, 12, 24 и 47 часов либо свой срок от 1 до 2820 минут. Во встроенной админке срок задаётся в минутах; 720 минут — 12 часов. Выключенный переключатель оставляет обычную бессрочную рассылку.
Что поддерживается
- Срок отсчитывается отдельно от отправки каждой копии. Поддерживаются текст, HTML и медиа с существующими кнопками и форматированием.
- Срок сохраняется в шаблонах, автоматически сохраняется перед предпросмотром и показывается в подтверждении отправки.
- Очередь удаления хранится в базе. После перезапуска бот продолжает её обработку; новый черновик не отменяет удаление предыдущей рассылки.
- Временные ошибки и ограничения частоты Telegram обрабатываются повторными попытками. Уже удалённое сообщение считается обработанным.
- При невозможности записать задание удаления бот пытается сразу удалить отправленную копию, не рассылая её повторно.
Telegram разрешает удалять сообщения младше 48 часов: https://core.telegram.org/bots/api#deletemessage. Максимальный срок 47 часов оставляет запас. Если бот был выключен дольше доступного окна, Telegram уже не позволит удалить сообщение.
Проверка
Полный набор Go-тестов, 328 JavaScript-тестов, сборка интерфейса и Linux amd64. Интеграционные тесты на локальном PGlite проверили миграцию и откат, сохранение ID копий, срок, защиту от повторного захвата, восстановление очереди и сохранение срока в шаблонах. Оба интерфейса проверены локально; реальные массовые рассылки при проверке не запускались.