# Обновление v6.2.x
## Инструкция

:::caution
ВАЖНО! Перед обновлением на v6.2.x необходимо иметь версию Swarmica не ниже [v6.0.x](https://support.swarmica.com/article/ru/1765 "v6.0.x").

Если у вас установлена версия ниже v6.0.x, сначала обновитесь до v6.0.x вручную, последовательно выполняя инструкции для каждой промежуточной версии: например, если у вас v5.10.x, то сначала нужно обновиться до v5.11.x, затем до v5.12.x и до v6.0.x.
:::

### Обновление

Начиная с v6.0.x обновление выполняется с помощью [механизма автообновления](https://support.swarmica.com/article/ru/1955).

Если вы ещё не перешли на автообновление, выполните шаги из раздела «Переход на автообновление» в [инструкции по установке обновлений](https://support.swarmica.com/article/ru/1955).

:::danger
**ВНИМАНИЕ!** Это обновление требует ручных действий на сервере и может требовать отката действий.

Рекомендуется планировать **около 1 часа** прерывания сервиса для выполнения обновления.
:::

Порядок выполнения обновления:

1.  Непосредственно перед началом работ сделайте снапшот виртуальной машины, где установлена Swarmica или полную резервную копию для быстрого отката в случае любых проблем с обновлением
2.  **Обязательный шаг**: обновите Postgres до версии 18 [по инструкции](https://support.swarmica.com/article/ru/2121-obnovlenie-postgresql-14-18-dlya-swarmica.html)
3.  Рекомендуется так же отключить JIT-оптимизацию Postgres [по инструкции](https://support.swarmica.com/article/ru/2144-kak-otklyuchit-jit-v-postgres-dlya-ustanovki-swarmica.html) - этот шаг можно пропустить или сделать позднее. Выполнение шага дает прирост производительности БД и более оптимизированное потребление ресурсов.
4.  Рекомендуется настроить логирование сервисов Swarmica в journald [по инструкции](https://support.swarmica.com/article/ru/2190-kak-nastroit-logi-docker-v-journald-dlya-swarmica.html) - этот шаг можно пропустить или сделать позднее. Выполнение шага дает возможность более гибкого управления логами контейнеров Swarmica, сохранение их после перезагрузки и ротацию, согласно вашим потребностям.
5.  После успешного выполнения предыдущих шагов убедитесь, что Swarmica полностью запустилась и работает.
6.  Запустите автообновление и следуйте инструкциям:

```bash
cd /root/swarmica
make upgrade
```

После успешной установки обновления запустите очистку неиспользуемых данных:

```txt
docker system prune -a
```

## ✨ Основные улучшения

### ✉️ Почта

Переработана работа с автоматическими письмами: Swarmica лучше распознаёт отбивки и автоответы, сама помечает свои уведомления как автоматические и не теряет входящие письма при ошибках обработки. Это защищает от «войны роботов» между почтовыми системами и при этом не скрывает от агентов важные уведомления о недоставке.

*   📬 Обработка отбивок о недоставке (bounce): если в почтовом канале выключен новый переключатель «Пропускать отбивки» (по умолчанию включён), отбивка определяется по исходному письму и добавляется в нужную заявку внутренним комментарием с исходным сообщением во вложении. Если отбивка пришла на уведомление о создании заявки или о новом комментарии, заявка в статусах «Ожидает ответа», «Отложена» или «Решена» переоткрывается; отбивки на служебные уведомления (например, рассылки администраторам) заявку не переоткрывают. Адрес почтового сервера не добавляется в копию заявки, учётная запись для него не создаётся, автоответ не отправляется
*   🧩 Почтовые заголовки в уведомлениях: в шаблонах почтовых уведомлений можно задавать собственные заголовки (служебные заголовки вроде `From`, `Subject`, `Message-ID` или `Return-Path` изменить нельзя, при ошибке показывается понятное сообщение). Стандартные уведомления получили заголовки `Auto-Submitted`, чтобы почтовые системы клиентов не отвечали на них автоответами; при восстановлении настроек уведомления по умолчанию восстанавливаются и заголовки
*   🆔 Исходящие уведомления по заявкам получают уникальный `Message-ID`, привязанный к заявке и получателю, а уведомление об отклонённом письме содержит ссылку на исходное сообщение (`In-Reply-To`) — так ответы и отбивки надёжнее связываются с заявкой
*   🤖 Точнее определяются автоответы по заголовку `Auto-Submitted`
*   🛟 Входящее письмо не помечается прочитанным в ящике, пока не будет успешно обработано, — при сбое разбора оно не теряется
*   🎛️ Обновлена форма настроек почтового канала и настройки SMTP
*   🔕 Уведомления о собственных комментариях агента (публичных и внутренних) теперь по умолчанию выключены
*   🧹 Письма, сохранённые из-за ошибок обработки, автоматически удаляются через 30 дней (срок настраивается, см. «Новые переменные окружения»)

### 📚 База знаний и хелпцентр

*   📊 Диаграммы Mermaid в статьях: в редакторе появилась кнопка вставки диаграммы с переключением «Код / Превью», а при просмотре статьи в интерфейсе и в публичном хелпцентре диаграммы отображаются графически, в том числе в полноэкранном режиме для больших схем. Диаграммы хранятся как обычный блок кода `mermaid`, поэтому там, где Markdown не отображается (например, в письмах), они показываются как текст
*   🔎 В списке статей можно искать статьи по номеру привязанной задачи из баг-трекера — так же, как в списке заявок
*   🌐 Страницы хелпцентра получили корректные канонические ссылки (`link rel="canonical"`), что улучшает индексацию поисковыми системами

### 💬 Чаты и чат-виджет

*   ⏱️ Счётчики SLA и OLA теперь отображаются и в заголовке чата — агенты видят сроки, не переходя в заявку
*   \#️⃣ Номер заявки в чат-виджете: клиент видит номер чата в списке чатов и в открытом чате. Включается настройкой виджет-канала `show_ticket_id` или параметром инициализации виджета (параметр имеет приоритет), по умолчанию выключено
*   ✈️ Тема заявки из Telegram формируется из имени клиента (или названия группы для групповых чатов) и имени бота вместо обрезанного первого сообщения — заявки проще различать в списке
*   🔐 Чат-виджет поддерживает вход с двухфакторной аутентификацией

### ⚙️ Автоназначение

*   👥 Новый переключатель в правиле автоназначения «Искать внутри текущей группы заявки»: ребалансер подбирает агента только из группы заявки и не меняет её группу. Теперь не нужно заводить отдельное правило на каждую группу
*   ⚖️ При равной загрузке заявка достаётся агенту, который дольше всех не получал назначений, — нагрузка распределяется равномернее
*   🔒 Защита от параллельных запусков ребалансера

### 🔍 RCA

*   🏷️ У заявки появился признак «Есть RCA», который можно использовать в фильтрах, триггерах, отчётах и условиях автоназначения. Для существующих заявок признак заполняется автоматически при обновлении

### 🖥️ Улучшения UI/UX

*   🧽 Кнопка «Очистить черновик» в форме создания заявки
*   🎨 Ответы из внешних и внутренних дочерних заявок получили разные CSS-классы, так что их можно оформить по-разному через тему бренда
*   👤 При поиске пользователей для полей «Заявка от», «Копия» и «Скрытая копия» показываются их идентити, а совпадения подсвечиваются
*   📅 В аналитике по умолчанию выбран прошлый месяц с группировкой по дням
*   ↩️ Кнопка сброса выбора в фильтрах скоркарт
*   ⌛ Для выгрузок фильтров, отчётов и расхода токенов показывается дата, до которой файл доступен для скачивания
*   🔑 После подтверждения регистрации пользователь входит в систему автоматически, а при выходе сессия завершается и на сервере (в интерфейсе и в виджете)
*   🛡️ Отключение собственной двухфакторной аутентификации требует подтверждения кодом

### ⚙️ Производительность и обслуживание

*   🐘 Шаблоны установки переведены на PostgreSQL 18, для PostgreSQL отключена JIT-компиляция, которая замедляла типичные запросы Swarmica
*   📜 В новых установках логи контейнеров пишутся в systemd-journald с ротацией (до 2 ГБ, не дольше двух недель)
*   🚀 Ускорена загрузка списка заявок: меньше повторяющихся запросов и быстрее подсчёт для постраничного вывода
*   🗑️ Экспорты заявок (HTML/PDF) теперь автоматически удаляются через 30 дней (срок настраивается)

### 🐞 Исправления

*   🔁 Исправлено объединение заявок: корректно пересчитываются поля целевой заявки (включая дату последнего ответа) и счётчики связей статей, объединение заявок с общей задачей больше не падает, при смене целевой заявки в массовом объединении можно вернуться назад
*   📨 Получатель письма из поля «Кому» сохраняется в копии заявки, если адрес канала был в копии; удалённый почтовый канал по умолчанию больше не используется для новых заявок и исходящих писем; исправлены ошибки разбора отдельных писем и проверки IMAP-подключения
*   ✈️ Исправлены потеря первого сообщения нового пользователя в групповом Telegram-боте и дублирование сообщений с картинками
*   ⭐ Запрос оценки CSAT снова отправляется в WhatsApp, в том числе для решённых чатов и заявок из любого виджета
*   📈 Первый комментарий агента при создании заявки больше не считается ответом в статусе, SLA и OLA
*   🤖 ИИ-эвалуаторы оставляют комментарии на языке интерфейса и не комментируют критерии с оценкой «Да»
*   🧩 Исправлены ошибки в Jinja-шаблонах при использовании фильтрации внутри блоков и циклов
*   ⚙️ Удаление навыка, используемого в правиле автоназначения, больше не приводит к ошибке и не оставляет в правиле пустое условие по навыкам
*   📝 Шаблоном заявки по умолчанию для одного набора ролей теперь может быть только один шаблон
*   🪪 Улучшены проверка и форматирование идентити пользователей (email, Telegram, VK, WhatsApp)
*   🖥️ Исправлены пагинация во вкладке «Клиенты», слишком узкое поле лицензионного ключа в форме создания заявки, выбор канала при создании заявки, увеличение картинок в статьях, оператор «равно» в фильтре чатов, лишняя кнопка «Удалить» при создании WhatsApp-канала, пропадание виджета при обновлении страницы и показ лицензионного соглашения в виджете после отправки кода регистрации
*   ✉️ Уменьшены отступы в письмах в брендировании по умолчанию
*   🔐 Исправлены уязвимости и повышена безопасность системы

### Новые переменные окружения

В версии 6.2.0 появились новые параметры в файле `.env`. Задавать их не обязательно: если переменная не указана, используется значение по умолчанию.

| Переменная                                    | По умолчанию | Описание                                                                                                                                    |
| --------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `EMAIL_STORE_FAILED_EMAILS_MAX_AGE_DAYS`      | `30`         | Через сколько дней удаляются письма, сохранённые из-за ошибок обработки. `0` — хранить бессрочно                                            |
| `TICKET_EXPORTS_MAX_AGE_DAYS`                 | `30`         | Срок хранения экспортов заявок (HTML/PDF) в днях                                                                                            |
| `RUNTIME_SCRIPT_RUN_THROTTLE_RATE`            | `10/min`     | Лимит ручных запусков скрипта на пользователя, формат `<число>/<s\|min\|hour\|day>`. `0` — без ограничений                                  |
| `EMAIL_AUTH_ADDRESS_THROTTLE_RATE`            | `3/hour`     | Лимит писем регистрации и смены пароля на один адрес. `0` — без ограничений                                                                 |
| `EMAIL_AUTH_CODE_COOLDOWN`                    | `60`         | Секунды после отправки кода, в течение которых повторный запрос не отправляет новое письмо. `0` — без паузы                                 |
| `EMAIL_AUTH_TOKEN_MAX_FAILED_ATTEMPTS`        | `3`          | Количество неверных вводов кода (регистрация, сброс пароля, подтверждение идентити), после которого код аннулируется. `0` — без ограничений |
| `EMAIL_AUTH_CONFIRM_THROTTLE_RATE`            | `5/min`      | Лимит попыток подтверждения кода регистрации и смены пароля с одного адреса клиента. `0` — без ограничений                                  |
| `EMAIL_AUTH_CONFIRM_FAILURES_THROTTLE_RATE`   | `20/hour`    | Общий лимит неверных кодов при подтверждении регистрации и смены пароля для всех клиентов. `0` — без ограничений                            |
| `IDENTITY_VERIFICATION_CONFIRM_THROTTLE_RATE` | `5/min`      | Лимит попыток подтверждения идентити для пользователя. `0` — без ограничений                                                                |
| `AI_ASSISTANT_EXTERNAL_THROTTLE_RATE`         | `10/min`     | Лимит запросов к ИИ-подсказке решения на одного клиентского пользователя. Внутренние роли не ограничиваются. `0` — без ограничений          |
| `AI_ASSISTANT_EXTERNAL_TOTAL_THROTTLE_RATE`   | `100/min`    | Общий лимит запросов к ИИ-подсказке решения для всех клиентских пользователей. `0` — без ограничений                                        |
| `REBALANCER_LOCK_TIMEOUT`                     | `1800`       | Сколько секунд держится блокировка от параллельных запусков ребалансера. Не устанавливайте `0`                                              |