Skip to content

2.8.0 — Опросы, Лавешка и улучшения кабинета

Choose a tag to compare

@bruhxax bruhxax released this 26 Oct 16:11

Исправлены переключатели и анимации рассылок

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

Проверено: 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 копий, срок, защиту от повторного захвата, восстановление очереди и сохранение срока в шаблонах. Оба интерфейса проверены локально; реальные массовые рассылки при проверке не запускались.