# Комментарии

Комментарии обеспечивают коммуникацию участников внутри задач. В документе описаны типы комментариев, адресаты и видимость, настройки категории, автопрочтение, закреплённые комментарии, треды, вопросы, ссылки, оценки исполнителей, редактирование и удаление, подписка и уведомления. Поведение комментариев настраивается на уровне категории.

## Обзор — Комментарии

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


**Типы комментариев**

В ленте задачи отображается два вида записей: сообщения, написанные пользователями, и системные уведомления, которые 1Форма добавляет автоматически при изменениях в задаче.


**Пользовательские типы**

| Описание | Создаётся |
|---|---|
| Пользовательский комментарий | Вручную пользователем |
| Комментарий из подзадачи | Автоматически при публикации в подзадаче |
| Вложение файла (без текста) | Пользователем через drag&drop файла |
| Внесение трудозатрат | Пользователем через форму трудозатрат |

**Системные типы**

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

| Описание | Событие |
|---|---|
| Переход по маршруту | Смена шага/статуса задачи |
| Подпись (резолюция) | Согласование/подписание |
| Служебный | Различные системные действия |
| Изменение ДП или файлов | Изменение допараметра или файла |
| Создание задачи | Создание новой задачи |
| Изменение текста задачи | Редактирование описания |
| Смена категории | Перемещение задачи |
| Смена срока | Изменение дедлайна |
| Добавлен исполнитель | Назначение исполнителя |
| Добавлен подписчик | Добавление подписчика |
| Задача просрочена | Автоматически при просрочке |
| Смена заказчика | Изменение заказчика задачи |
| Удалён файл | Удаление файла |
| Утверждение трудозатрат | Акцепт фактических трудозатрат и снятие акцепта |

Текст системных комментариев формируется автоматически по событию задачи. Каждый читатель видит его на своём языке: шаблон выбирается по языку пользователя (`Users.LanguageID`), а если шаблона на этом языке нет — по языку системы по умолчанию. Международный язык в этой цепочке не участвует. Отрисованный текст кешируется отдельно для каждого языка, поэтому читатели с разными языками интерфейса видят каждый свой вариант одной и той же системной записи. Язык шаблона определяется для того, кто читает ленту, а не для того, кто вызвал событие: после смены языка интерфейса шаблонный текст при следующем получении ленты формируется для новой локали. Текст, который человек ввёл сам — например причину подписи или пояснение, — при этом не переводится.

Даты в тексте системных комментариев — например, новый срок или дата начала работы — в веб-интерфейсе показываются по часовому поясу из профиля читателя, так же как на карточке задачи. В push-уведомлениях и письмах такие даты приводятся к часовому поясу профиля получателя. Мобильные приложения показывают эти даты в часовом поясе сервера.

## Интерактивные отчёты в сообщениях

В комментарий можно приложить интерактивный отчёт — файл с именем, оканчивающимся на `.dash.html`. Такой файл отображается прямо в ленте отдельным блоком во всю ширину сообщения: его не нужно предварительно открывать в просмотрщике.

Интерактивные отчёты используются для наглядной подачи результатов: например, для KPI-плиток, диаграмм, динамики показателей или небольшого дашборда. Один комментарий может содержать несколько отчётов и обычные вложения одновременно.

### Как это выглядит для читателя

- отчёт показывается под текстом комментария;
- ширина блока подстраивается под ширину сообщения;
- высота меняется по содержимому отчёта;
- интерактивность графика работает внутри блока;
- обычные вложения в том же комментарии отображаются штатно.

### Тема и оформление

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

### Ограничения

Интерактивный отчёт предназначен для результатов, подготовленных Анфисой или автоматизацией. Пользователь создаёт и редактирует обычные файлы как прежде.

Если файл не распознан как интерактивный отчёт или его отображение недоступно, он остаётся обычным вложением, которое можно открыть или скачать.

В отчёт не добавляют растровые изображения, base64-данные и внешние загрузки. Для графиков используют векторную графику; для простых показателей достаточно HTML и CSS.

**Адресаты комментариев (кто видит что)**


**Ключевой принцип**

Видимость комментария определяется списком его адресатов. Если пользователь не попал в список — комментарий не появится у него в ленте.


**Типы адресатов**

У каждого адресата комментария есть роль, которая определяет, как именно он получит сообщение.

| Тип | Значение |
|---|---|
| Явный адресат | Выбран пользователем при отправке |
| Неявный адресат / подписчик | Подписчик задачи без прямой адресации |
| В копии | Получает сообщение, но без «непрочитанного» |
| Требует ответа | Получатель должен ответить (вопрос) |


**Что влияет на список адресатов**

Когда комментарий публикуется, система рассчитывает кому он будет показан:

- явно выбранные пользователи и группы из поля «Кому»/«Копия»,
- подписчики задачи (если категория не запрещает),
- ограничения через смарт-события (тип «Перед отправкой уведомления»),
- персональные настройки пользователей (подписка на тип, автопрочтение).


## Изменение адресатов при редактировании

При редактировании комментария можно изменить список адресатов. Система пересчитывает список и корректирует push-уведомления:

- Добавленные адресаты получают push о комментарии и начинают видеть его в ленте.
- Исключённые адресаты получают сигнал удаления push (уведомление исчезает из центра уведомлений на устройстве), и комментарий перестаёт быть видимым для них в ленте.
- При сужении «Всем» до конкретного пользователя push остаётся только у указанного.

Подробнее о поведении push-уведомлений при изменении адресатов — см. [notifications/business.md → Редактирование адресатов комментария](https://help.1forma.ru/domains/notifications/business.md#редактирование-адресатов-комментария).

## Поведение поля адресата при отправке

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

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

При перезагрузке страницы или открытии другой задачи поле «Кому» инициализируется заново согласно настройкам категории и списку подписчиков.

## Индикатор «печатает»

Когда собеседник набирает сообщение в ленте задачи, остальные участники видят индикатор «печатает…». По умолчанию его видят все подписчики задачи. Функция поддерживает адресный режим: индикатор можно показать только определённым участникам (например, когда сообщение готовится для одного адресата), не отвлекая остальных. Показать индикатор пользователю, у которого нет доступа к задаче, нельзя — система всегда сверяет список адресатов с подписчиками.

Состав данных о печатающем считается под того, кто смотрит, а не под того, кто печатает: сведения об отсутствии коллеги приходят в объёме прав смотрящего. Коллеге без доступа к календарю печатающего индикатор отдаёт только признак активности — без темы, места и текста отсутствия и без списка участников; владелец данных и пользователи с полным доступом видят их полностью.


**Настройки категории, влияющие на видимость**

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

| Настройка | Влияние |
|---|---|
| Скрытие системных комментариев | Системные комментарии записываются, но не показываются никому в ленте |
| Передача комментариев всем исполнителям | При адресации одному исполнителю комментарий получают все исполнители задачи |
| Включение комментариев в категории | Если выключено — лента комментариев в задаче полностью отключена |
| Режим видимости в главной ленте | Режимы «Только задачи» / «Ничего не показывать» скрывают комментарии из главной ленты |
| Запрет удаления пользовательских комментариев | Автор не может удалить собственные комментарии |


**Видимость при чтении ленты**


**Как формируется лента**

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


**Когда пользователь может НЕ видеть отправленный комментарий**

| Причина |
|---|
| Пользователь не попал в список адресатов комментария |
| В категории включено скрытие системных комментариев, а тип системный |
| У пользователя отключена подписка на этот тип комментариев в настройках |
| Смарт-событие «Перед отправкой уведомления» заблокировало адресацию |
| В категории отключены комментарии |
| Категория скрывает комментарии из главной ленты |
| Комментарий удалён |
| Пользователь не подписан на задачу |
Подписка и отписка не пересматривают прошлое: при подписке на задачу её прошлые сообщения в ленту не добавляются.


**Автопрочтение**

Комментарий может быть автоматически помечен как прочитанный без участия пользователя:

1. Если в профиле включена настройка автопрочтения комментариев.
2. Если пользователь исключён из адресатов смарт-событием.
3. Для событий календаря — при выключенном уведомлении по событию.
4. По персональным настройкам уведомлений пользователя.


## Закреплённые комментарии

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

Закрепление доступно в трёх контекстах: в чате, в обычной ленте задачи и внутри отдельного обсуждения (треда). В чате закреплять и откреплять вправе владелец, администратор и модератор чата, а также подписчик, если в настройках чата включена опция «Закреплять сообщения для всех». В обычной задаче закрепление доступно тем, кому доступно добавление комментариев: комментарии в категории не запрещены и задача не закрыта, если в категории стоит запрет комментировать закрытые задачи. Закреп внутри обсуждения виден только в нём — в общую панель он не попадает.

При закреплении или откреплении в ленте появляется системное сообщение. Push- и email-уведомления при этом не отправляются. Изменение отражается у всех участников мгновенно.

В панели закреплённых сообщений чата доступно действие **«Открепить все сообщения»** — оно снимает закрепление сразу со всех сообщений и для всех участников. Перед откреплением запрашивается подтверждение. Действие доступно тем же, кто вправе закреплять сообщения в этом чате.

**Все закреплённые сообщения задачи.** В карточке задачи вне режима чата в меню «…» в шапке, сразу после пункта включения или отключения уведомлений, есть пункт **«Все закрепленные сообщения»**. Он виден всегда, даже если закреплённых сообщений нет, и открывает окно со списком закреплённых сообщений задачи; при пустом списке в окне написано «Нет закреплённых сообщений». Выбор сообщения закрывает окно и прокручивает ленту к нему, кнопка «Назад» закрывает окно. Действие «Открепить все сообщения» в меню «Больше действий» этого окна доступно тем, кто вправе добавлять комментарии в задаче.

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

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

**Закреплённые вверху ленты задачи.** На вкладке «Лента» карточки задачи закреплённые сообщения поднимаются в начало ленты под разделителем «Закреплённые» и убираются со своего места по времени. Сообщение, закрепление которого пользователь скрыл у себя пунктом «Скрыть закрепленное сообщение», остаётся на своём месте по времени. У закреплённых сообщений в ленте виден значок закрепления. В режиме чата и внутри открытого обсуждения сообщения не поднимаются.

**Скрыть закреп у себя.** Закреплённое сообщение можно убрать из закрепов персонально — и в чате, и в обычной задаче. Пункт «Скрыть закреп» есть в контекстном меню самого сообщения; он доступен, пока сообщение закреплено и не скрыто, и не показывается внутри обсуждения. Скрытие действует только для того, кто его сделал: само закрепление остаётся, другие участники видят сообщение закреплённым. Вернуть закреп себе можно тем же меню — пунктом «Вернуть в закреплённые», — а восстановить все скрытые разом получится из списка закреплённых сообщений, одним запросом на задачу.

**Действия на вкладке «Закреплённые».** Вкладка показывает отдельную подборку сообщений, но действия над сообщением на ней те же, что в обычной ленте: изменить, удалить, снять непрочитанность, посмотреть прочтения. Результат виден прямо на вкладке — переключаться в «Ленту» и обратно не нужно: после правки показывается новый текст, после снятия непрочитанности — обновлённый признак. Удаление сообщения с вкладки удаляет и приложенные к нему файлы, как при удалении из ленты.



### Треды (обсуждения)

Тред = корневой комментарий + дочерние ответы. Статусы: открыт / закрыт. В закрытом треде публикация запрещена (кроме транскрибации): недоступны и одиночные действия с сообщением (ответ, редактирование своего сообщения, отметка вопроса и снятие вопроса, удаление), и групповые — при множественном выборе групповое удаление скрывается, если выбор выполняется внутри закрытого треда или среди выделенных есть хотя бы одно его сообщение. Пересылка выделенных сообщений остаётся доступной. Подробнее — см. [chat/business.md → Права на управление обсуждениями](https://help.1forma.ru/domains/chat/business.md#права-на-управление-обсуждениями).  Просмотр закрытого треда не меняет его статус: чтобы вернуть тред в работу, нужно явно выбрать **«Открыть обсуждение»** — при простом открытии закрытого треда для чтения он остаётся закрытым.


## Создание обсуждения пользователем

Обсуждение можно создать в ленте задачи и в чате двумя способами.

**Из уже отправленного сообщения.** Нужно перейти к сообщению в ленте, вызвать контекстное меню и выбрать пункт **Начать обсуждение**. Создать обсуждение из сообщения можно также **кнопкой создания обсуждения** в меню быстрых действий. Открывается модальное окно ввода темы обсуждения; поскольку обсуждение создаётся из существующего сообщения, тема автоматически заполняется его текстом — при необходимости её можно изменить. Текст исходного сообщения отображается отдельно в начале обсуждения.

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

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

**Из задачи без привязки к сообщениям.** На панели инструментов карточки задачи есть **кнопка обсуждений** — она доступна всем участникам задачи. Рядом с кнопкой указано количество активных обсуждений; отсутствие числа означает, что обсуждений ещё нет либо все закрыты. По нажатию открывается модальное окно **«Все обсуждения»** со строкой поиска вверху (поиск по названию обсуждения) и тремя вкладками:

| Вкладка | Содержимое |
|---|---|
| **Все** | Все созданные в задаче обсуждения |
| **Активные** | Только открытые обсуждения |
| **Закрытые** | Только завершённые обсуждения, выделены серым цветом; оставлять в них новые сообщения нельзя |

Из этого же окна можно создать новое обсуждение. Нажатие на строку списка открывает выбранное обсуждение. В строке каждого обсуждения справа выводятся счётчики: непрочитанные сообщения, вопросы к вам (красный) и вопросы от вас (зелёный).

**Закрытие и переоткрытие.** Активное обсуждение закрывается через ПКМ по строке списка → **«Закрыть обсуждение»**. Закрытое обсуждение можно переоткрыть через ПКМ → **«Открыть обсуждение»**. Обсуждение, в котором последнее сообщение отправлено более 2 недель назад, закрывается автоматически.

**Удаление.** Удалённое обсуждение исчезает из списка вместе со всеми сообщениями, а в задаче создаётся служебная запись «Обсуждение удалено» от имени пользователя, выполнившего удаление. Запись видна как обычное системное сообщение во вкладках «Лента» и «Журнал» — без префикса «Начато обсуждение», без ссылки и без перехода в удалённое обсуждение. Уведомления по ней не рассылаются.

Чужим ответом считается сообщение другого участника внутри обсуждения. Служебная запись о начале обсуждения создаётся системой от лица автора и чужим ответом не считается, поэтому сама по себе права автора не отнимает. Как только в обсуждении ответил кто-то другой, автор удалить его уже не может — остаются владелец, администратор и модератор чата, а также участник с правами администратора категории. Если прав не хватает, удаление отклоняется целиком: обсуждение и все его сообщения остаются на месте — ничего не удаляется. Подробнее — в разделе «Удаление комментариев» в конце документа.

**Тема обсуждения.** Тему можно отредактировать в любой момент — пункт доступен по кнопке **Дополнительные действия** в панели инструментов обсуждения. Отредактировать тему может только автор обсуждения.

После создания обсуждение отображается в ленте под исходным сообщением. В задачу также отправляется системное сообщение без адресата с текстом **«Начато обсуждение»** и активной ссылкой на него; уведомления о нём зависят от настроек уведомлений в задаче, но само сообщение всегда попадает в список непрочитанных. Под веткой обсуждения показывается последнее написанное сообщение, справа — общее количество ответов и индикатор непрочитанных. Каждый подписчик задачи может перейти в обсуждение и принять в нём участие.


### Шапка открытого обсуждения

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

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

**Создание обсуждения через смарт-действие**

Доступно как смарт-действие «Создать тред» в смарт-автоматизации.


**Права**

| Действие | Кто может |
|----------|-----------|
| Создать тред | Любой участник задачи |
| Закрыть | Автор, Owner, Admin, Moderator |
| Удалить | Автор — пока в обсуждении нет чужих ответов; Owner/Admin/Moderator чата — любое; администратор категории — любое |

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

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


## Вопрос-ответ

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

![Входящий вопрос (розовый фон) — требует ответа](https://help.1forma.ru/help-images/comments/tickers_and_notifications-16.png)


**Подсветка ответа на ваш вопрос.** Непрочитанный ответ на ваше сообщение выделяется в ленте информационным цветом, но только если исходное сообщение было вопросом: подсветка отвечает на вопрос «мне ответили?», а не «кто-то что-то написал после меня». Если исходное сообщение вопросом не было, ответ ему не подсвечивается. Подсветку видит только автор вопроса: получателям в копии и подписчикам задачи ответ так не выделяется. Собственные сообщения не подсвечиваются, а ответ, помеченный как вопрос, сохраняет цвет вопроса — красный или зелёный. Выделение снимается, как только сообщение прочитано. Правило работает во всех видах ленты — в карточке задачи, в чате и в представлениях категории.

**Состояния вопроса**

| Состояние | Что значит для пользователя |
|---|---|
| Комментарий помечен как вопрос | Автор отправил сообщение с запросом ответа |
| На вопрос дан ответ | Кто-то ответил, и вопрос считается закрытым |
| Конкретный получатель должен ответить | В счётчике этого пользователя есть требование ответа |

Быстро открыть все активные вопросы к вам или ваши собственные можно чипами над лентой — см. «Фильтр неотвеченных вопросов».

![Исходящий вопрос (зелёный фон) — отправлен вами](https://help.1forma.ru/help-images/comments/tickers_and_notifications-17.png)


**Действия с вопросом**

Управлять состоянием вопроса можно так:

1. **Пометить сообщение как вопрос.** Автор отправляет комментарий с включённым флажком «Нужен ответ» — у всех адресатов (явных, не в копии) появляется требование ответить.
2. **Ответить на вопрос.** Любой адресат отвечает на вопрос текстом — вопрос автоматически помечается как отвеченный, требование ответа снимается у всех.
3. **«Вопрос не мне».** Адресат может убрать требование ответа лично для себя через контекстное меню сообщения. Если ни у кого больше не осталось требования ответить — вопрос автоматически помечается как отвеченный.
4. **Пометить как отвеченный вручную.** Автор может явно отметить свой вопрос как отвеченный через контекстное меню.
5. **Массово отметить все мои вопросы отвеченными.** В разделе входящих доступно действие «Отметить все мои вопросы отвеченными» (`POST /api/comments/mark-all-as-answered`). С версии **2.268.336** оно закрывает **только авторские** вопросы пользователя — `Comments.IsAnswered` и все `CommentRecipients` симметрично, как при ручной пометке. Персональные записи во входящих чужих вопросах (когда пользователь — один из адресатов) **не меняются**: для отказа от конкретного входящего используйте «Вопрос не мне». До 2.268.336 действие затрагивало и авторские, и входящие, из-за чего у других адресатов того же `commentId` записи рассинхронизировались, а через 30 дней фоновая процедура архивации могла переносить целые группы получателей в архив — на одном из клиентских стендов баг привёл к потере 154 `commentId` и ещё 14 находились в очереди на потерю.


```mermaid
stateDiagram-v2
    [*] --> Обычное
    Обычное --> Вопрос : пометить «Нужен ответ» (требование у всех адресатов)
    Вопрос --> Отвечен : адресат ответил (требование снято у всех)
    Вопрос --> Отвечен : автор пометил отвеченным (вручную или массово)
    Вопрос --> Вопрос : «Вопрос не мне» — снять требование лично
    Вопрос --> Отвечен : больше ни у кого нет требования ответить
```

**Ответ на входящий вопрос: автор вопроса не удаляется из адресатов**

Если вопрос был задан вам (вы указаны в поле «Кому»), при ответе автор вопроса остаётся среди получателей — удалить его нельзя:

- чип автора вопроса в полях «Кому» и «Копия» подсвечен светло-красным фоном, как сам вопрос;
- крестик удаления на чипе недоступен;
- контекстное меню (ПКМ) позволяет перенести автора вопроса между «Кому» и «Копия», но не удалить его;
- очистить поле или выбрать «Только этому адресату» без автора вопроса нельзя;
- отправить ответ «никому» или только другим получателям нельзя — автор вопроса обязательно остаётся в «Кому» или «Копия».

Правило действует только для неотвеченного входящего вопроса. Для собственных и уже отвеченных вопросов чип не подсвечивается и удаление доступно как обычно.

## Автодетекция вопроса

Система автоматически ставит флажок «Нужен ответ» при наборе текста, если:

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

Текст признаётся вопросом по одному из 4 правил (достаточно одного):

| # | Правило | Примеры |
|---|---------|---------|
| 1 | Символ `?` в тексте | «Это работает?», «Когда будет готово?» |
| 2 | Вопросительные слова в начале строки (RU + EN) | «Когда будет готово», «Как это работает», «Could you check», «Is there a way» |
| 3 | Императивные просьбы (RU) | «Подскажите», «Прошу уточнить», «Сообщите» |
| 4 | Императивные просьбы (EN) | «Please let me know», «Kindly confirm» |

Императивные правила (RU) срабатывают по конкретным перечням:

- **Глаголы в повелительном наклонении на `-ите`/`-и`** в начале строки или предложения: «покажите»/«покажи», «узнайте»/«узнай», «сделайте»/«сделай», «отправьте»/«отправь», «направьте»/«направь», «верните»/«верни», «переделайте»/«переделай», «исправьте»/«исправь», «поправьте»/«поправь», «обновите»/«обнови», «дополните»/«дополни», «подготовьте»/«подготовь», «согласуйте»/«согласуй», «подтвердите»/«подтверди», «предоставьте»/«предоставь», «организуйте»/«организуй», «переведите»/«переведи», «настройте»/«настрой», «выгрузите»/«выгрузи», «загрузите»/«загрузи».
- **Слово «Пожалуйста»** в сочетании с глагольными корнями: «покаж», «узнай», «сделай», «отправ», «направ», «верн», «исправ», «поправ», «обнов», «дополн», «подготов», «согласу», «подтверд», «предостав», «настро», «выгруз», «загруз».
- **«Прошу» + инфинитив**: «показать», «узнать», «сделать», «отправить», «исправить», «поправить», «обновить», «дополнить», «подготовить», «согласовать», «организовать», «перевести», «настроить», «выгрузить», «загрузить».


**Настройка пользователя**

Автодетекцию можно отключить в профиле: **Профиль → Прочее → «Не помечать сообщение как вопрос автоматически»**. После этого флажок «Нужен ответ» автоматически не ставится. При ручном переключении флажка настройка не мешает.


**Ссылки в комментариях (Comment Links)**


**Обзор**

При создании или редактировании комментария система автоматически извлекает из текста два типа ссылок:

| Тип | Как распознаётся | Пример |
|-----|-----------------|--------|
| Ссылка на задачу | `#номер` в тексте | `#12345` |
| Внешний URL | Полный адрес `https://...` | `https://example.com/page` |
| Домен без протокола | Последняя часть адреса — существующая доменная зона | `yandex.ru` — открывается как `https://yandex.ru` |
| Ссылка на сообщение | `#!номер` в тексте | `#!12345` |


**Автопарсинг и ручные ссылки**

По умолчанию система сама извлекает ссылки из текста (автопарсинг). Через SmartAction «Написать комментарий» можно управлять тем, показываются ли найденные ссылки в UI (параметр «Показывать найденные ссылки»).

Скрыть найденные ссылки можно не только действием: при отправке комментария через API и через инструмент AI-агента превью-карточки выключаются отдельным признаком. У комментариев агента карточки скрыты по умолчанию, у запросов через API — нет, поэтому привычное поведение интерфейса не меняется. Скрытие не удаляет ссылку: адрес остаётся кликабельным в тексте, а запись о ссылке сохраняется в задаче; карточка связи с задачей платформы подчиняется тому же признаку. Все ссылки, найденные в комментариях задачи, — внутренние ссылки на задачи и внешние адреса — собраны на отдельной вкладке «Ссылки» блока вложений задачи (см. «Блок «Файлы» в карточке задачи» в домене «Файлы»); ссылки со скрытыми превью на вкладку не попадают. Признак учитывается при создании комментария — если позже отредактировать его текст, ссылки разбираются заново и карточки возвращаются.

**Ссылки без протокола.** Домен, написанный в комментарии без протокола — например `yandex.ru` — распознаётся как ссылка и открывается по адресу с `https://`. Дописывать протокол вручную не нужно. Для таких ссылок, как и для адресов с `http://` или `https://`, подгружается превью-карточка страницы.

Если сайт по https не отвечает — соединение не устанавливается, имя не разрешается, соединение сбрасывается или истекает время, — система один раз повторяет запрос по http, и сайты, доступные только по http, продолжают показывать превью. Если же сайт по https отвечает и отвечает перенаправлением на http, повтора не будет: понижение схемы запрещено, и превью не появится. Для сайтов, которые сами уводят с http на https, пишите адрес сразу с `https://`.

**Фоновый разбор ссылок.** Домен без протокола подхватывает не только момент сохранения комментария: фоновый разбор по истории комментариев тоже находит такие адреса и создаёт по ним связь-ссылку. Поэтому у комментариев, сохранённых до появления распознавания доменов без протокола, со временем также появляется связь-ссылка — без ручных действий автора. Уже разобранные комментарии (у которых связь-ссылка уже есть) повторно не обрабатываются, а новые разбираются как обычно. Дата и время, к которым «догон» доходит, зависят от положения фонового разбора, поэтому точный момент появления связи заранее неизвестен.

Ссылкой становится только домен, зона которого есть в справочнике доменных зон и не совпадает с именем файлового расширения, и в самом домене есть хотя бы одна буква. Полный список расширений-исключений — 28 зон: `zip`, `mov`, `app`, `dev`, `md`, `sh`, `so`, `rs`, `java`, `ai`, `pl`, `ps`, `py`, `map`, `docs`, `video`, `cc`, `pm`, `ml`, `am`, `mk`, `in`, `as`, `sv`, `la`, `gd`, `st`, `to` — приведён в разделе [«Ограничения и поддержка на платформах»](https://help.1forma.ru/domains/comments/text-formatting.md).

Поэтому ссылками не становятся даты (`15.02`, `15.02.2024`), дробные числа (`1.5`), IP-адреса (`8.8.8.8`), имена файлов (`файл.txt`, `main.cc`, `Module.pm`, `config.h.in`) и строки вида `function.onload`. Знаки препинания после адреса в ссылку не входят.

Исключение действует на зону целиком: в зонах `cc`, `pm`, `ml`, `am`, `mk`, `in`, `as`, `sv`, `la`, `gd`, `st`, `to` обычным текстом остаются и настоящие сайты — `site.in`, `example.to`, `site.la`. Такой адрес оформляется ссылкой, если указать его с протоколом (`https://site.in`).

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

Если превью для адреса получить не удалось — например, это внутренний сайт компании, — комментарий всё равно отправляется сразу: ожидание превью отправку не задерживает.


### Прямая ссылка на сообщение и на обсуждение

Сообщение и обсуждение можно передать ссылкой — двумя способами.

**Из меню сообщения.** Чтобы скопировать ссылку на сообщение, откройте его контекстное меню правой кнопкой мыши, выберите **«Переслать»**, затем — **«Копировать ссылку»**. В подменю пункт стоит после **«В текущую задачу»** (в чате — **«В текущий чат»**) и перед **«Ещё»**. Ссылка копируется в буфер обмена и открывает нужное место переписки. В шапке и в списке обсуждений действие «Копировать ссылку» остаётся доступным в своих меню. Пункт «Копировать ссылку» доступен там, где показывается «Переслать»: если «Переслать» недоступен, скопировать ссылку через это подменю нельзя.

**В тексте сообщения.** Запись `#!` с номером сообщения — подробнее в разделе [форматирование текста](https://help.1forma.ru/domains/comments/text-formatting.md) — становится ссылкой на это сообщение.

Как ведёт себя переход:

| Что указано в ссылке | Что происходит |
|----------------------|----------------|
| Задача и сообщение | Открывается чат, лента прокручивается к сообщению и подсвечивает его |
| Задача, сообщение и обсуждение | Сначала раскрывается обсуждение, затем лента прокручивается к сообщению внутри него |
| Задача и обсуждение, без сообщения | Открывается само обсуждение; прокрутки к конкретному сообщению нет |

Если сообщения нет в загруженной части ленты, она подгружает переписку вокруг него сама — нажимать ничего дополнительно не нужно. Если сообщение удалено или загрузить его не удалось, чат открывается, но показывается сообщение об ошибке, а номер сообщения и обсуждения убираются из адреса — ссылку можно переслать заново, без старой привязки. Нажатие с `Ctrl` или `Cmd` открывает сообщение в новой вкладке. Переход работает в веб-интерфейсе: в мобильных приложениях запись `#!12345` остаётся текстом.

## OpenGraph-превью (сниппеты)

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



Для внешних URL-ссылок доступно автоматическое формирование превью: система загружает страницу, извлекает заголовок, изображение и другие Open Graph-метаданные, и показывает карточку-превью прямо в ленте.

**Требование:** функция работает только если на сервере разрешены исходящие HTTP-запросы. Если превью не формируется — обратитесь к администратору сервера.

Превью-карточка строится загрузкой самой страницы. Если страница или её распакованный ответ превышает предел размера, либо адрес ведёт в служебную или приватную сеть, карточка не показывается; ссылка в тексте остаётся обычной кликабельной ссылкой, а другие ссылки того же комментария разбираются как обычно. Разбор обычных страниц этим ограничением не затрагивается.

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

| Причина | Как выглядит | Что делать |
|---|---|---|
| Сайт по https отвечает перенаправлением на http | превью нет | написать адрес с `https://`, если сайт поддерживает https |
| Цепочка перенаправлений длиннее десяти | превью нет | проверить адрес: обычно это ссылка через сокращатель или редирект-петля |
| Перенаправление без адреса перехода | превью нет | обратиться к владельцу страницы: сайт отдаёт некорректный ответ |
| Адрес ведёт в служебную или приватную сеть | превью нет | это защита: превью внутренних адресов не строится |
| Страница или её распакованный ответ больше предела | превью нет | превью тяжёлых страниц не строится |
| Исходящие HTTP-запросы на сервере запрещены | превью нет ни для одной ссылки | включить исходящие HTTP-запросы на сервере |


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

- **Создание/редактирование** ссылок: только автор комментария, если есть доступ к задаче.
- **Чтение** ссылок: любой, кто имеет доступ к задаче.

---


**Оценки исполнителей**

В категориях с включённым режимом оценки исполнителей заказчик после завершения задачи может оценить работу каждого исполнителя по **пятибалльной шкале**.

| Аспект | Правило |
|---|---|
| Кто оценивает | Заказчик задачи |
| Кого оценивает | Каждый исполнитель (кроме себя, если заказчик сам является исполнителем) |
| Обязательность комментария | Заказчик **обязан** прокомментировать оценку |
| Видимость оценок | Открытые (всем) или закрытые (только пользователям с соответствующим правом) |
| Где отображаются | Комментарии к оценке показываются в ленте комментариев задачи |

Оценка проставляется из карточки задачи или из ленты задач и комментариев.


**Геолокация в комментариях**

Если в профиле включена геолокация и мобильное устройство дало разрешение на определение местоположения, при отправке комментария через мобильное приложение к сообщению прикрепляются координаты. В веб-интерфейсе в контекстном меню такого комментария появляется пункт **Посмотреть в Google картах** — по нажатию откроется карта с указанием места, откуда было отправлено сообщение.

Функция работает только при одновременном выполнении двух условий: геолокация включена в настройках профиля **и** устройство разрешило приложению доступ к местоположению.


## Опросы (SurveyJS)

В специально настроенных категориях поддерживается проведение опросов и тестирований через интеграцию с SurveyJS.


**Создание опросов**

Опросы создаются в визуальном редакторе (конструктор SurveyJS) в категории-каталоге опросов. Поддерживаются:

- Текстовые поля, чекбоксы, радиокнопки, загрузка файлов и другие типы вопросов
- Логика прохождения (разветвление, пропуск вопросов)
- Таймер на прохождение
- Отображение правильных/неправильных ответов
- Перемешивание вопросов для тестирований
- JSON-редактор для гибкой настройки


## Редактор опросов

В пользовательском режиме в категории-каталоге опросов доступна кнопка **Редактор**. По её нажатию открывается редактор, в котором можно создавать, настраивать и предварительно тестировать логику прохождения опросов. Редактор разделён на вкладки.

| Вкладка | Назначение |
|---|---|
| **Обзор конструктора** | Визуальное построение структуры опроса: добавление страниц, вопросов разных типов (текстовые поля, чекбоксы, радиокнопки и др.), вариантов ответов, управление порядком следования. Новый вопрос добавляется перетаскиванием элемента из левой панели. Панель общих настроек по умолчанию раскрыта, её можно скрыть и раскрыть повторно. Изменения сохраняются кнопкой сохранения; есть кнопки отмены и повтора последнего изменения |
| **Тестировать опросник** | Просмотр опроса с точки зрения респондента перед сохранением |
| **Логика опросника** | Настройка логики работы: условия отображения вопросов в зависимости от ответов, ветвления, динамическое изменение содержимого |
| **JSON редактор** | Гибкая настройка опроса через JSON |

На вкладке **«Тестировать опросник»** в панели инструментов доступны:

- **Кнопка выбора устройства** — переключение между типами устройств для проверки адаптивности; размер окна автоматически подстраивается под выбранный формат экрана.
- **Кнопка смены ориентации** (книжная/альбомная) — изменяет ориентацию экрана устройства; недоступна в десктопном режиме.
- **Кнопка показа скрытых элементов** — делает видимыми служебные блоки, инструкции, логические триггеры и прочие невидимые для обычных пользователей части опроса; полезна для диагностики логики. Повторное нажатие снова скрывает элементы.

На вкладке **«JSON редактор»** в панели инструментов: кнопка загрузки файла `.json` с устройства для вставки в редактор, кнопка скачивания текущего скрипта и кнопка копирования кода со страницы в буфер обмена.

### Динамические варианты ответа по ссылке

В вопросах опроса (SurveyJS) варианты ответа можно подставлять из внешнего для формы источника — по адресу (URL) списка: при открытии опроса браузер респондента запрашивает этот адрес и показывает полученные варианты.

Подгрузка выполняется, только если адрес ведёт на тот же сервис (origin), с которого открыт опрос, — совпадают схема, хост и порт. Относительный адрес (путь к API своего стенда) подходит; абсолютный адрес другого сайта, порта или схемы не запрашивается. Поэтому в опросе указывайте относительный путь или адрес того же стенда, где работает 1Форма.

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

## Прохождение опроса

Задачи на прохождение создаются для каждого участника. В карточке задачи доступна кнопка **Пройти опрос**. Администратор может настроить видимость кнопки **Пройти опрос** для ролей в задаче и групп пользователей на различных статусах задачи.

Кнопку видит только ответственный исполнитель задачи и только пока у него нет завершённого результата. Если доступ к кнопке не настраивали, она показывается ответственному исполнителю на всех статусах; настроенная матрица может скрыть кнопку и у него.

⚠️ В задаче обязательно должен быть назначен ответственный исполнитель — прохождение разрешено только ему. Каждая задача предназначена для одного исполнителя.

**Режимы сохранения:**

- По умолчанию — результат сохраняется только при полном завершении опроса и нажатии **Готово**
- При разрешённом частичном прохождении — каждый ответ сохраняется автоматически, при повторном входе пользователь продолжает с места остановки

После завершения повторное прохождение недоступно.

🗂️ Файлы-вложения в ответах на вопросы типа «Загрузка файла» корректно сохраняются и восстанавливаются при частичном прохождении — даже при очистке кеша браузера или работе в режиме инкогнито. Настройка вопроса «Хранить содержимое файла в формате JSON как текст» не обязательна для корректного отображения. Исправлено в сборке 2.264 «Кассиопея».



**Результаты**

Результаты отображаются в карточке задачи в виде древовидной таблицы (вопросы сгруппированы по страницам). Администратор может настроить видимость блока результатов для ролей в задаче и групп пользователей на различных статусах задачи.
Наличие результата определяется по задаче, а не по её ответственному исполнителю: как только в задаче появляется завершённый результат опроса, признак наличия результата взводится для задачи и не теряется при смене ответственного исполнителя. Доступ к самому содержимому результата определяет матрица видимости блока результатов: участник с правом просмотра видит завершённый результат, даже если этот опрос он не проходил. Для анонимного опроса поведение прежнее — чужой отдельный ответ без указания результата не отдаётся. Запись ответа не изменилась: проходить опрос и сохранять ответ может только ответственный исполнитель.

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

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

Также доступны сводные таблицы и графики.


Опросы могут быть персонализированными и анонимными.


**Лента сообщений в задаче**

Блок «Лента» в карточке задачи отделён синей полосой — это позволяет сразу увидеть, где в задаче начинаются сообщения.


**Вкладки ленты**

![Вкладки ленты сообщений в карточке задачи](https://help.1forma.ru/help-images/comments/block_comments-01.png)

| Вкладка | Что показывает |
|---------|---------------|
| **Лента** (по умолчанию) | Все типы событий и сообщения с учётом настроек пользователя |
| **Закреплённые** | Только закреплённые сообщения задачи. Вкладка есть, пока в задаче есть закреплённые |
| **Сообщения** | Только пользовательские сообщения |
| **Журнал** | Системные события (без сообщений пользователей) |
| **Все** | Все события вне зависимости от настройки «Видно в ленте» |

**Вкладки, когда не помещаются.** Если для всех вкладок не хватает ширины — лента открыта в правой панели таблицы, левый сайдбар развёрнут или окно узкое, — вкладки не обрезаются и не уходят за край панели. Непоместившиеся собираются под кнопкой **«Ещё»** с раскрывающимся списком: у активной вкладки в списке стоит галочка, а выбор вкладки из списка сразу открывает её. Состав списка пересчитывается при изменении ширины — после сворачивания или разворачивания сайдбара вкладки возвращаются на полосу без перезагрузки страницы. Пока все вкладки помещаются, кнопки «Ещё» на полосе нет.

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


**Источник сообщений**

По кнопке меню над лентой выбирается источник:

- **Текущая задача** (по умолчанию) — сообщения текущей задачи
- **Из подзадач** — сообщения подзадач уровнем ниже
- **Используется** — сообщения задач, где данная задача выбрана в ДП

![Меню выбора источника сообщений](https://help.1forma.ru/help-images/comments/block_comments-02.png)

Если выбран источник, отличный от умолчания, на кнопке отображается синяя точка.

Кнопка «Отметить всё как прочитанное» автоматически прочитывает все новые сообщения в ленте задачи; если задача открыта из ленты непрочитанных, её строка в фоновом списке этой ленты сразу меняет начертание на обычное, без перезагрузки страницы.
**Фильтр неотвеченных вопросов.** Над лентой, рядом с вкладками, могут быть два чипа со счётчиком: «Входящие» — неотвеченные вопросы к вам, «Исходящие» — неотвеченные вопросы, которые поставили вы. Чип появляется, только если таких вопросов больше нуля, а число на нём — по всей задаче, а не только по уже загруженным сообщениям.

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

Чипов нет на вкладках «Журнал» и «Закреплённые»: при переходе туда отбор снимается. На узком экране и в мобильном режиме чипы тоже скрыты; вкладки, источник сообщений и поиск остаются. Пока чип включён, настройка «Фильтровать комментарии в задаче согласно настройкам ленты» не применяется.


## Сортировка ленты

По умолчанию комментарии отображаются в **обратном хронологическом порядке** (свежие сверху). Стрелки в шапке ленты переключают порядок на прямой и обратно.


**Фильтрация по типам сообщений**

Настройка `Все типы событий` на вкладке «Уведомления» в профиле пользователя:

- **Включена** — в ленте отображаются комментарии **всех типов**, независимо от персональных настроек.
- **Выключена** — отображаются только типы, отмеченные флажком «Видно в ленте».

Связана с настройкой профиля **«Фильтровать комментарии в задаче согласно настройкам ленты»**: настройки фильтрации действуют на все задачи в категории; в разных категориях могут отличаться.

Фильтрация влияет только на **отображение** — комментарии всех типов всегда публикуются и хранятся. Изменив настройки, можно увидеть ранее скрытые комментарии.


**Адресация сообщений**

Каждое сообщение отправляется в рамках задачи или чата. У сообщения один автор и несколько адресатов.

| Адресат | Поведение |
|---------|-----------|
| **Явный** (поле «Кому») | Сообщение помечается непрочитанным у адресата |
| **Копия** | Получает сообщение, но «непрочитанным» не помечается |
| **Всем** | Отправить всем подписчикам задачи |
| **Никому** | Сообщение всегда попадает в список непрочитанных, уведомление — по настройкам категории |

> Рекомендуется всегда отправлять сообщения адресно — указывая конкретных адресатов. Если сообщения отправляются всем подписчикам задачи, пользователи получают много лишних сообщений, воспринимают их как спам и читают невнимательно — так легко пропустить важную информацию.

По умолчанию в выборе адресатов отображаются только подписчики задачи. Для выбора других пользователей — ввести имя в строку поиска. Поиск работает по имени, фамилии и основной должности. Начиная с версии 2.265 «Цефей» в выпадающем списке под именем и фамилией пользователя отображаются его основная должность и отдел, что ускоряет поиск нужного человека в организациях с большим числом сотрудников.

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

**Ограничения сохранения состава адресатов.** Явно указанное «Себе» отображается в шапке, если отправитель выбран в «Кому» вместе с другими адресатами или указан только в «Копии». В этом случае собственное сообщение отправителя автоматически считается прочитанным и не создаёт ему обычное уведомление; при включённой принудительной отправке на почту отправитель получает письмо. Если отправитель выбран одновременно в «Кому» и «Копии», он отображается только в «Кому». Одиночное «Себе» в «Кому» работает как прежде.

Шапка показывает состав, который система сохранила для сообщения, но некоторые совпадающие адресаты не сохраняются отдельными чипами. Если один и тот же пользователь указан в «Кому» и «Копии», пользователь явно выбран внутри добавленной группы или группы пересекаются, часть исходных чипов может не отобразиться: исходный состав уже потерян при записи. Отображение после перезагрузки, ответа или пересылки эти чипы не восстанавливает. Доставка участникам группы при этом не страдает — речь именно о сохранении исходного состава для шапки.

**Выбор групп** в поле адресатов доступен только сотрудникам компании и администраторам категории.

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

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

**Отметки в списке выбора адресата.** Уже выбранный адресат в раскрытом списке не помечен: отметка снимается сразу после выбора. Поэтому список показывает только то, что происходит сейчас, — если адресат убран из поля, его строка отмечена не будет. Это верно и для удаления последнего адресата, и когда выбрано несколько: в поле может стоять чип, а в списке не будет отмечено ни одной строки. О том, кто выбран, видно по чипам в самом поле. Снятого адресата можно выбрать снова — он добавится обычным чипом, как при первом выборе.

**Где открывается список выбора адресата.** Список в полях «Кому» и «Копия» открывается в ту сторону, где он помещается целиком: если места под полем хватает, список идёт вниз, если нет — вверх, над полем. Это работает и при первом открытии сразу после загрузки страницы, и при повторном. Пока список сотрудников догружается, в панели видны только индикатор загрузки и пункт «Всем»; когда подписчики показаны, панель сразу встаёт в выбранную сторону — обрезанного снизу списка нет. Выбор адресата кликом, поиск по имени и добавление чипа работают как раньше.

**Перетаскивание адресатов.** Чипы пользователей и групп в полях «Кому» и «Копия» можно перетаскивать: внутри поля — чтобы поменять порядок, между полями — чтобы перенести адресата из «Кому» в «Копия» и обратно. Адресат встаёт туда, где его отпустили, и убирается из другого поля. Пользователя из блока «Подписчики» можно перетащить сразу в нужное место поля «Кому» или «Копия», а чип, перетащенный из поля обратно в блок «Подписчики», убирается из адресатов.

**Как выглядит перетаскивание.** Пока адресат «висит» на курсоре, остальные чипы в поле расходятся, освобождая место, — видно, куда адресат встанет. Сам перетаскиваемый чип приподнимается тенью, а если чип отпустить вне полей «Кому» и «Копия», перенос считается отменой: чип возвращается на прежнее место, адресат остаётся в поле.

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

**Адресаты в шапке сообщения.** В ленте и в чате в шапке сообщения показывается не больше пяти адресатов **в каждом из полей** — лимит «Кому» и лимит «Копии» считаются отдельно, — в порядке: пользователи, затем группы; группа занимает одно место, как и ярлык «Всем». Остальные скрыты за ссылкой «и ещё N», где N — число скрытых адресатов этого поля. Ссылка своя у каждого поля: у «Копии» она стоит внутри скобок, поэтому у сообщения может быть две ссылки — «и ещё» после имён «Кому» и своя внутри блока «Копия». Клик по любой из них раскрывает полный список этого сообщения целиком; обратно список не сворачивается, другие сообщения остаются свёрнутыми. Клик по шапке сообщения — вне имени автора и ссылок — раскрывает список так же.

**Дополнительные адресаты рядом с «Всем».** «Всем» — это тег, а не сокращение фактического состава подписчиков. Сообщение, отправленное «Всем», показывается ярлыком «Всем»; если вместе с тегом в нём названы другие адресаты — любой пользователь в «Кому» или «Копии», в том числе сам отправитель и подписчик задачи, а также группа, — рядом с ярлыком выводится и этот состав. Правило действует и когда подписчика поставили вместе с тегом: его имя стоит рядом с ярлыком, как и у любого другого адресата. В один ярлык «Всем» состав сворачивается, только когда других адресатов нет. Правило одинаково в ленте задачи и в чате, и оно не зависит от числа подписчиков: ни небольшой состав, ни тег «Всем» не подменяются одним ярлыком. Видимый рядом состав на склейку соседних сообщений одного автора не влияет — они по-прежнему объединяются под одним аватаром.

**Сортировка результатов поиска адресатов:**

1. Подписчики и частые собеседники (по рейтингу общения)
2. Сотрудники той же оргструктуры
3. Сотрудники компании (выше внешних пользователей)

Сортировка остаётся гибкой и подстраивается под контекст (например, при поиске в конкретном чате подписчики этого чата показываются раньше). При назначении исполнителей в задачах сохранён привычный алфавитный порядок.

**Отправка без адресата** невозможна для вопросов — кнопка «Как вопрос» блокируется, пока не указан адресат.


**@-упоминание (визитка)**

Символ `@` после пробела, начала строки или открывающей скобки раскрывает список подписчиков. Выбор добавляет пользователя в поле «Кому». После отправки @-упоминание отображается как кликабельное имя — по нажатию открывается краткая карточка пользователя.


## Панель команд (slash-команды)

В поле ввода сообщения можно быстро вставить команду или шаблон ответа через панель команд. Чтобы её открыть, введите `/` в начале поля или после пробела — появится список доступных команд с фильтрацией.

**Где работает.** В полях ввода сообщений — в ленте задачи, в карточке задачи и в чате.

**Русская раскладка.** Если на клавише «/» набирается точка (например, в русской раскладке), нажатие этой клавиши в поле ввода подставляет «/» и открывает панель — переключать раскладку не нужно. Замена срабатывает только там, где панель открывается; в остальных местах вводится точка. Backspace сразу после замены возвращает точку.

**Что показывает.** В одном списке два источника:

- **шаблоны быстрых ответов** — заготовленные фразы, настроенные администратором категории;
- **платформенные slash-команды** — команды Анфисы (`/clear`, `/program:`, `/format` и др.) и выбор модели.

Состав зависит от роли: администратор видит весь каталог, обычный сотрудник — команды без пометки «только для админа» (в частности, выбор модели `/claude`, `/kimi` доступен только администраторам), внешний пользователь платформенные команды не получает.

**Как выбрать.** Навигация — стрелками вверх/вниз, выбор — `Enter`, `Tab` или клик. Команда вставляется без пробела после неё, чтобы можно было сразу дописать параметры. Команда `/clear` при нажатии `Enter` отправляет сообщение сразу.

**Несколько команд подряд.** Команды набираются через пробел, пока каждое слово начинается с `/`. Как только после пробела идёт слово без `/`, дальнейший текст считается обычным сообщением:

`/clear /claude проверь задачу`

**Параметры.** Параметр записывается через двоеточие без пробела. У части команд есть русские написания (`/модуль:` = `/box:`, `/программа:` = `/program:`, `/формат` = `/format`):

- `/program:my-tasks-query` — запуск программы по машинному имени;
- `/program:"Мои задачи" за неделю` — по человекочитаемой подписи в кавычках;
- `/program:a,b` — несколько программ через запятую.

**Если панель не появляется** — для текущего пользователя нет ни шаблонов быстрых ответов, ни доступных платформенных команд.

**Момент загрузки данных панели.** Шаблоны быстрых ответов и список команд загружаются не при открытии чата, а при первом обращении к полю ввода — фокусе или вводе `/`; при первом вызове панели содержимое может появиться с небольшой задержкой. Список сотрудников для полей получателей загружается при раскрытии списка; если загрузка не удалась, закройте и откройте список снова — запрос повторится. Команды относятся к текущему чату: после перехода в другой чат подсказки предыдущего не показываются. В чате с Анфисой подсказки в ленте загружаются сразу при открытии — это отдельный список, и на него правило не распространяется.

### Режимы вставки готовых ответов и подсказок (чипы и шаблоны)

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

- **полная замена** (по умолчанию): текст подсказки заменяет весь ранее набранный текст в поле;
- **добавление в конец**: текст дописывается в конец сообщения независимо от позиции курсора; если текст в поле уже был, перед вставкой добавляется пробел;
- **вставка по шаблону**: текст вставляется сразу после фрагмента, найденного по заданному шаблону. Если совпадений нет или шаблон некорректен, текст в поле остаётся без изменений.

**Короткие названия чипов.** На чипе может показываться короткое понятное название (например, «Service Desk»), а в поле при клике подставляется полный текст или команда (например, `/servicedesk`). Полный текст, который будет вставлен, всегда видно во всплывающей подсказке при наведении на чип.

В режиме чата клик по чипу сразу вставляет текст в поле и закрывает панель подсказок; у чипов кнопки сворачивания скрыты.

## Аватар автора сообщения

Рядом с сообщением показывается аватар его автора: загруженное фото, а если фото нет — инициалы. Инициалы подчиняются общей настройке цвета аватаров: в режиме «цветные» у каждого человека свой устойчивый цвет, в режиме «фирменные» все инициалы окрашены основным цветом бренда, в режиме «серые» — серым. На фотографию режим не влияет. Поверх аватара показывается точка присутствия — и в ленте задачи, и в чатах. Пока автор в сети, точка горит зелёным. Если у автора идёт отсутствие, точка окрашивается в цвет этого типа отсутствия, и тем же цветом выводится его имя. Когда автор не в сети и текущего отсутствия у него нет, точки нет. У сообщений, отправленных от имени группы, точки на аватаре нет.

## Аватар адресата в полях «Кому» и «Копия»

Каждый выбранный адресат показан в поле чипом, а в раскрытом списке — строкой с аватаром, именем, должностью и подразделением. Вид аватара зависит от того, кто адресат.

| Кто адресат | Аватар | Точка присутствия |
|---|---|---|
| Пользователь | фото, если оно загружено, иначе инициалы с устойчивым цветом | есть |
| Группа, орг. единица, адрес электронной почты, группа встречи | значок соответствующего типа | нет |

У пользователя точка зелёная, когда он в сети, и цвета текущего отсутствия, когда за ним зарегистрировано отсутствие с заполненным сообщением. Если человек не в сети и отсутствия нет, точки нет. Состояние обновляется по событиям присутствия, поэтому цвет имени адресата и точка показывают одно и то же. Цвет инициалов без фото подчиняется общей настройке цвета аватаров.

## Индикаторы сообщений

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

**Блок отметок у сообщения.** Рядом с сообщением справа стоит одна строка служебных отметок. В ленте они идут в порядке: звезда избранного, значок закрепления, подпись «изменено», галки прочтения, время. В чате в виде баблов время и галки меняются местами: звезда, значок закрепления, «изменено», время, галки. Порядок одинаков и в списке чата, и в представлениях чата вне него — например, в закреплённых сообщениях. Звезда появляется у сообщения, добавленного в избранное, и окрашена жёлтым на обычном фоне и приглушённым серым на цветных баблах — вопросах к вам, ваших вопросах, непрочитанных ответах и ваших сообщениях в чате. Подпись «изменено» показывается у отредактированного сообщения, галки — у собственных отправленных сообщений и меняются по мере прочтения получателями. Имя автора и блок отметок стоят одной строкой: когда ширины не хватает, отметки отодвигают имя автора или переносят его на следующую строку, а текст сообщения остаётся читаемым. У сообщений без шапки — подряд идущих от одного автора и со скрытым получателем — время и отметки стоят в одной строке с содержимым сообщения и на узкой ширине на него не наезжают: содержимым может быть текст, превью ответа, пересылка, вложение, превью ссылки, опрос или блок виджетов. Аватар, точка присутствия и отступ от аватара до текста не изменились.


**Набора текста**

Когда собеседник набирает сообщение, над строкой ввода появляется «ФИО печатает...».


**Отправки и прочтения**

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

| Индикатор | Состояние |
|-----------|-----------|
| ✓ (одинарный) | Сообщение доставлено на сервер, никем не прочитано |
| ✓✓ (двойной, серый) | Прочитано кем-то из адресатов, но не всеми |
| ✓✓ (двойной, синий) | Прочитано всеми получателями |

Индикатор не отображается для сообщений без адресата и для чужих сообщений.

Просмотр кто и когда прочитал — пункт **Прочтения** в контекстном меню. Показываются первые 5 пользователей, кнопка «Ещё» открывает полный список.

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

**«Прочтения» и вкладка «Новые».** Список «Прочтения» — не только справка о том, кто прочитал сообщение. В главной ленте на вкладке «Новые» при включённом переключателе «Прочитано» прочитанное сообщение остаётся в списке, если текущий пользователь есть в его «Прочтениях»: он значится в адресатах, в копии или отмечен прочитавшим автоматически. Если пользователя в «Прочтениях» нет — сообщение собственное или адресовано только другим, — в этой вкладке оно не появится.

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


**Черновик**

При закрытии задачи недописанный черновик сохраняется. При повторном открытии текст восстанавливается.


**Форматирование текста**

При выделении текста в поле ввода появляется панель форматирования; она автоматически скрывается, как только выделение пропадает — при наборе, удалении или вставке текста с клавиатуры, навигации клавишами (стрелки, `Esc`) или клике в пустую область. Также доступен markdown — жирный `**текст**`, курсив `__текст__`, зачёркнутый, подчёркнутый, код, ссылки, заголовки, таблицы, списки, спойлер: полная таблица разметки с разбивкой по клиентам (веб, iOS, Android) — в [форматировании текста](https://help.1forma.ru/domains/comments/text-formatting.md).

Специфика поля ввода комментария поверх общей разметки: `#номер` и `№номер` дают активную ссылку на задачу, `+#номер` — устанавливает связь с задачей.

**Горячие клавиши форматирования:** `Ctrl/Cmd+B` (жирный), `Ctrl/Cmd+I` (курсив), `Ctrl/Cmd+U` (подчёркивание), `Ctrl/Cmd+Shift+X` (зачёркивание). Повторное применение снимает форматирование.

**Вставка из внешних источников** (`Ctrl/Cmd+V`): система автоматически приводит Markdown и HTML (Word, веб-страницы) к единому виду — заголовки → жирный, маркированные списки, ссылки, переносы строк сохраняются.

**Превью ссылок:** при добавлении ссылки на задачу, чат, пространство — автоматически формируется блок-превью (аватарка, текст, категория, номер). Полная ссылка на карточку задачи этой площадки превращается в такой же блок-превью при отправке комментария, поэтому ссылка, добавленная при редактировании уже отправленного комментария, превью не даёт. При добавлении внешнего URL — превью-карточка с заголовком и описанием из OG-метаданных.

**Безопасность текста комментария.** Опасные фрагменты разметки не исполняются: теги (`<script>`, `<iframe>`, `<img>`, `<form>`, `<style>`), атрибуты-обработчики событий (`onclick=`, `onerror=`, `onload=`) и ссылки с запрещённой схемой (`javascript:`, `data:`, `vbscript:`, `file:`, `blob:`). Такой фрагмент не удаляется молча, а заменяется видимой пометкой — тег на `⚠ [tag заблокирован]`, атрибут на `⚠ [атрибут заблокирован]`, ссылка на `⚠ [ссылка заблокирована]`; пометка выглядит как фрагмент кода. Текст внутри блока кода не проверяется и сохраняется как набран. Если в отправленном сообщении был заблокированный фрагмент, в шапке сообщения показывается значок с подсказкой «Часть содержимого заблокирована».

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

**Что остаётся в тексте, а что нет.** Проверка разметки не должна задевать обычный текст:

- угловая скобка `>` внутри значения атрибута не обрывает распознавание тега. Комментарий с тегом, у которого в атрибуте стоит сравнительный знак или продолжение адреса (например, `span` с `title="a > b"`), сохраняется целиком — текст после такого тега не теряется;
- упоминание в тексте имени известного HTML-элемента без закрывающей скобки — например, `List<object>`, `до <svg> хвост`, `math`, `video`, `title` — не считается тегом. Такой фрагмент вне блока кода сохраняется как набран, вместе с текстом после него; маска на него не ставится;
- но если у такого незакрытого элемента стоит атрибут-обработчик (например, `onload`), атрибут блокируется: хвост комментария и видимая пометка `⚠ [атрибут заблокирован]` остаются, значение обработчика не сохраняется, а у сообщения выставляется признак блокировки;
- тот же текст, поставленный рядом с заблокированным тегом (`script`), не теряет ни хвост, ни видимую пометку.

**Разметка в системных комментариях.** Системные записи ленты собираются на сервере: имя задачи и текст подставляются в готовую разметку ссылки на задачу. Имя задачи берётся как текст — после снятия разметки — и кодируется перед вставкой в HTML системного комментария, поэтому угловые скобки и амперсанд в имени не превращаются в теги, а ссылка на задачу продолжает работать. Имя задачи с введённым через HTML-сущности тегом не исполняется в системных записях: переход по маршруту, создание задачи, изменение текста, смена срока и служебные записи показывают имя как обычный текст. Кодирование выполняется на сервере и от клиента не зависит.

**Автоспойлер при вставке большого текста.** Если при вставке из буфера (`Ctrl/Cmd+V`) текст длиннее шести строк или содержит больше 500 символов, система сама ставит в него маркер спойлера `+++`: вставляемая часть сворачивается под «Показать больше», а то, что уже было набрано в поле, остаётся видимым. Пороги считаются по вставляемому тексту, разметка из буфера при этом приводится к общему виду как обычно. Маркер вставляется обычным текстом — до отправки его можно убрать или перенести вручную.

**Длинный текст:** текст комментария, превышающий шесть строк, после отправки автоматически обрезается многоточием. Под текстом появляется кликабельная ссылка **«Показать полностью»** для отображения полного содержимого сообщения. В МТФ и в виде чата обрезка по строкам не применяется: текст показывается целиком и сворачивается только по маркеру спойлера `+++`.

**Сообщения только из эмодзи** (один или несколько, в т.ч. через пробел) отображаются увеличенным шрифтом.

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


## Ссылки на файлы и папки Диска в сообщениях

В комментариях, сообщениях чата и при просмотре Markdown-файлов платформа автоматически распознаёт ссылки на объекты Диска. Если путь соответствует существующему файлу или папке и у пользователя есть права доступа, путь отображается как ссылка: по нажатию открывается файл во встроенном просмотрщике или соответствующая папка на Диске.

Исходный текст сообщения или файла при этом не изменяется — преобразование выполняется только визуально при отображении. Если путь не найден или недоступен, он остаётся обычным текстом.

Во встроенном просмотрщике `.md`-файлов дополнительно поддерживаются относительные ссылки на другие `.md`-файлы и ссылки с якорями (`#anchor`) для навигации внутри документа.

> Механизм ориентирован на пути Диска и markdown-ссылки. Произвольные строки со слешами в ссылки автоматически не преобразуются — нераспознанные или недоступные пути остаются без преобразования.


**Действия с сообщениями**


**Контекстное меню сообщения**

![Сообщение в ленте с кнопками быстрых действий](https://help.1forma.ru/help-images/comments/tickers_and_notifications-007.png)

Открывается по ПКМ на сообщении (единое для текста, файла и превью):

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

| Выбрать | Войти в режим массового выбора сообщений |
| Прочтения | Кто и когда прочитал сообщение |
| Создать → Задачу / Подзадачу | Создать задачу из текста сообщения (с опцией копирования файлов). В окне выбора категории над деревом предлагаются текущая категория и рекомендуемые категории (список настраивается администратором); в личных и групповых чатах текущая категория не предлагается |
| Ответы | Кто ответил на вопрос (только для вопросов с несколькими адресатами) |
| Удалить | Удалить сообщение (только своё; чужое — только для администраторов категории) |

Также: **Реакции** — короткий список эмодзи вверху меню; стрелка раскрывает полный список.


**Поиск в ленте**

Кнопка поиска в правой части блока ленты. Поиск работает по тексту, в т.ч. по названиям обсуждений.

На десктопе поиск в панели блока главной ленты представлен кнопкой с иконкой лупы рядом с меню сортировки. По нажатию строка поиска разворачивается поверх панели инструментов — по её высоте и со скруглением углов, — перекрывая на время поиска соседние элементы управления (сортировку, переключатель непрочитанных, вкладки). После нажатия крестика или очистки строки поиск сворачивается обратно в кнопку-лупу, и элементы управления возвращаются на место. В общей ленте на вкладке «Лента», если включена опция «Группировать», непустой поисковый запрос временно переключает результат на плоский список найденных комментариев. Сама настройка «Группировать» при этом не отключается и не меняется: после очистки запроса снова показываются карточки задач в сгруппированном виде. На остальных вкладках ленты поиск и очистка работают в их обычном представлении.

## Вложение файлов в сообщение

## Служебный комментарий с техническими данными

В задачах, созданных через пункт «Помощь» в меню профиля, лента начинается со служебного комментария «Технические данные». В нём — среда пользователя: браузер и операционная система, адрес страницы, версия клиента, время клиента и сервера, последние ошибки JavaScript и неуспешные HTTP-запросы текущей сессии. Комментарий добавляет система; уведомления по нему не рассылаются, а при большом объёме данных подробности прикладываются файлом к задаче. Если у пользователя нет права комментировать созданную задачу, комментарий не добавляется.

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

Кнопка прикрепления в поле ввода предлагает варианты:

| Вариант | Поведение |
|---|---|
| Файлы | Передача в исходном виде, без сжатия. Используется для изображений с мелким текстом и видео для дальнейшей обработки. В форме набора мессенджера изображения из этого пункта, наоборот, добавляются сжатыми по умолчанию — режим можно поменять до отправки (см. ниже) |
| Фото или видео | Медиа-режим: изображения и видео автоматически сжимаются и оптимизируются. Удобно для быстрого просмотра |
| Создать | Текстовый документ, таблица или текстовый файл — прямо в поле сообщения, без загрузки с устройства. Подробнее — в [Диске](https://help.1forma.ru/domains/disk/business.md), раздел «Создание документа из поля сообщения» |
| Создать опрос| Создать опрос | Простой опрос в ленте сообщений. См. раздел [«Простые опросы в ленте сообщений»](#простые-опросы-в-ленте-сообщений) |
| Вставить из вложений | Выбор файла из числа прикреплённых к задаче. Файл встаёт вложением в неотправленное сообщение, загружать его с устройства не нужно |
| Вставить из диска | Выбор файла из доступных разделов Диска в окне выбора. Сообщение прикрепляется ссылкой на существующий файл |

**Вставка существующих файлов.** Пункты «Вставить из вложений» и «Вставить из диска» отделены от остальных пунктов меню разделительной линией. Они не загружают файл заново и не создают его копию или новую версию — сообщение ссылается на уже существующий файл, поэтому приложить один и тот же файл можно повторно. Файл, вставленный с Диска, помечается во вложении иконкой «облачко». Пункты доступны и в ленте задачи, и в поле ввода чата.

**Что доступно для выбора.** В списке «Вставить из вложений» — все файлы, которые видит пользователь у задачи: и прикреплённые к сообщениям раньше, и загруженные прямо в блок «Файлы». Один и тот же файл можно указывать в сообщениях сколько угодно раз — каждый раз добавляется ссылка на тот же файл, второй копии не создаётся.

Вставленный файл сразу включает отправку: пока в поле нет текста, справа от него стоит кнопка «Отправить сообщение», а не кнопка микрофона.

**Отправка файла в сообщение со стороны файла.** Файл попадает в сообщение не только через кнопку прикрепления: пункт «Поделиться в сообщении» есть в меню файла на Диске и в меню файла, прикреплённого к задаче. В окне «Поделиться файлом» выбирается задача или чат — поиск по номеру и тексту, пользователи и пространства в списке не предлагаются. После выбора открывается лента задачи или вид чата, файл встаёт вложением в поле ввода, и сообщение отправляется обычным способом — само оно не уходит. Вложением файл становится таким же, как при вставке с Диска: ссылкой с иконкой «облачко». Пункта нет в мобильной версии и в диалогах «Вставить из вложений» и «Вставить из диска».

Файлы можно перетащить в поле ввода с компьютера или использовать горячие клавиши `Ctrl+U` (Windows) / `Ctrl+Cmd+U` (Mac). После добавления в поле автоматически появляется фокус — можно сразу набирать текст. При переносе файла в окно браузера поле ввода комментария — в ленте задачи и в карточке — и область переписки в чате подсвечиваются мягким фоном, а при наведении непосредственно на поле выделяются пунктирной рамкой. После добавления файла в поле автоматически появляется фокус — можно сразу набрать сопровождающий текст.

**Кнопка отправки после добавления файла.** Как только в поле ввода есть вложение — неважно, добавлено ли оно с устройства, через «Вставить из вложений», «Вставить из диска» или «Поделиться в сообщении», — вместо кнопки микрофона показывается кнопка «Отправить сообщение». Вводить текст для этого не нужно: сообщение из одного вложения отправляется и по кнопке, и по Enter. Кнопка «Записать аудиосообщение» остаётся только в пустом поле без вложений.

**Предложение сжать изображения в чате.** Если в чате выбрать шесть и более файлов, среди которых есть изображения, появляется вопрос, отправлять ли изображения сжатыми: ответ «Да» сжимает изображения, «Нет» прикрепляет их без сжатия, а закрытие окна отменяет добавление выбранной пачки файлов — набранный текст и ранее добавленные вложения при этом сохраняются. Вопрос задаётся независимо от выбранного варианта прикрепления — «Файлы» или «Фото или видео».

> Файлы 0 байт не загружаются: «Файлы не переданы или не содержат данных».
> Сообщение, состоящее только из вложения без текста, **нельзя редактировать**.

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

**Отправка не прерывается уходом с формы.** Начатая отправка продолжается, даже если уйти из формы: файлы докачиваются в фоне, и по завершении загрузки сообщение уходит в ленту. Пока отправка не завершена, сообщение видно в ленте локальной строкой — вместо времени у неё индикатор хода загрузки. Если отправка не удалась, индикатор сменяется значком ошибки, а в меню сообщения появляются пункты «Повторить отправку» и «Удалить». Удаление такой строки отменяет и отправку, и незавершённую загрузку её файлов.

**Результат отправки после ухода со страницы.** Если к моменту завершения отправки пользователь уже ушёл из формы, переключился на другую задачу, открыл другой чат или закрыл ленту, результат сообщается всплывающим уведомлением: при успехе — «Сообщение отправлено», при неудаче — «Не удалось отправить сообщение» с действием **«Перейти»**. Переход возвращает в исходное место — задачу, чат или обсуждение, — где сообщение осталось неотправленным и доступны **«Повторить отправку»** и **«Удалить»**; отдельной очереди отправки нет.

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

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

**Пока открыта вкладка.** Фоновая догрузка работает, пока открыто приложение. Если закрыть вкладку или обновить страницу во время незавершённой отправки, браузер спросит подтверждение — отправка при этом прерывается, а сообщение остаётся неотправленным. Как только все отправки завершились, подтверждение больше не появляется.

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

**Превью крупных изображений.** Изображение большого размера (примерно от 16 МБ) показывается в ленте и во вложениях значком-заглушкой вместо миниатюры. Это не значит, что файл повреждён — чтобы увидеть изображение в полном размере, откройте файл.

**Режим сжатия у добавленного изображения.** В форме набора мессенджера решение о сжатии можно изменить уже после добавления файла — до отправки сообщения. Правый щелчок по карточке изображения открывает меню **«Сжатый файл / Без сжатия»**, текущий выбор отмечен галочкой. Пункт доступен только для изображений и только в мессенджере: в ленте задачи, в карточке задачи, у файлового дополнительного параметра, на Диске и в опубликованном комментарии меню не появляется и вид карточки не меняется. У сжатого файла рядом с именем серым дописывается метка **(Сжатый)**; у файла без сжатия метки нет. Переключение на «Без сжатия» заново загружает оригинал и заменяет выбранный вариант — в отправленном сообщении остаётся один файл, без копий. Имя, заданное в форме набора, при смене режима сохраняется. Переключение доступно только до отправки сообщения: в отправленном сообщении режим файла уже не меняется и признак сжатия не показывается.

**Действия с файлом в сообщении**

Контекстное меню по ПКМ на файле:

| Пункт | Описание |
|---|---|
| Изменить | Редактирование (только для текстовых вложений) |
| Скачать / Скачать все | Скачать конкретный файл / все файлы из сообщения |
| Открыть в папке диска | Перейти к папке Диска (только для файлов из Диска — отмечены иконкой) |
| Просмотр версий | Окно истории версий |
| Открыть актуальную версию | Только если у файла есть более новая версия |
| Скопировать ссылку | Полный URL файла |
| Удалить | Убрать файл из сообщения |
| Переименовать | Изменить имя файла |
| Сжатый файл / Без сжатия | Переключение режима сжатия изображения в форме набора мессенджера; текущий выбор отмечен галочкой. Пункт есть только у изображений и только в мессенджере |

**Число версий файла.** В сообщении с файлом видно, сколько у файла версий, — это число приходит вместе с данными ленты, отдельного запроса для счётчика не делается. Когда версий несколько, открывается список версий; для одного файла без истории счётчик версий не показывается.

Файл из сообщения можно поместить в файловое дополнительное поле задачи или сохранить туда копию. При помещении файл остаётся в сообщении. Подробности — в разделе «Копирование и перемещение файла между файловыми полями» на странице [«Файлы»](https://help.1forma.ru/domains/files/business.md).

Контекстное меню также доступно в режиме редактирования сообщения.

Пункт «Переименовать» показывается, только когда выполнены все три условия: у пользователя есть право изменять файлы в задаче, статус задачи не запрещает править и удалять файлы, файл не зашифрован. Для файла в сообщении действуют права задачи, а не права папки Диска, из которой файл добавлен.

Исправить имя можно и до отправки — у файла, вложенного в ещё не отправленное сообщение. Пока файл загружается, пункт недоступен; после загрузки имя меняется сразу в окне написания, и сообщение уходит уже с новым именем.

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

У интерактивных отчётов (вложения `*.dash.html`) пункта «Переименовать» нет: имя файла служит признаком, по которому отчёт распознаётся и выводится в сообщении.

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

**Перезапись и просмотр**

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

**Просмотр или скачивание файла из нового сообщения** в ленте приравнивается к **прочтению** сообщения.

Видео в превью ленты:
- Размер ≤ 50 МБ — автоматически воспроизводится при клике на превью прямо в ленте.
- Размер > 50 МБ — клик открывает отдельное окно [просмотрщика](https://help.1forma.ru/domains/files/business.md#просмотрщик-файлов).

### Документы, созданные прямо в поле комментарияКроме пустого документа, в поле комментария можно создать файл по шаблону: пункты списка шаблонов появляются в том же меню вложения и настроены для блока вложений задачи. Такой файл, как и обычный созданный документ, до публикации лежит в «Черновиках»: он уходит вложением в отправленный комментарий и удаляется из «Черновиков», а снятый крестиком остаётся там.

В меню вложения композера можно создать новый документ, не уходя на Диск ([домен Диска](https://help.1forma.ru/domains/disk/business.md#создание-документа-из-поля-сообщения-композер)). Такой документ до публикации лежит в «Черновиках» и удаляется оттуда, когда комментарий с ним успешно опубликован или когда пользователь сам отменяет отправку и закрывает поле. Снятие документа крестиком до отправки файл не удаляет. Обычные вложения эта логика не затрагивает; ошибка удаления пользователю не показывается, и файл в этом случае остаётся в «Черновиках».

Вид вложения одинаков во всех местах, где файл прикреплён к переписке — карточка задачи, лента сообщений, чат, письмо. Как выглядит плашка и какие у неё кнопки — в разделе «Как выглядит вложение» на странице [«Файлы»](https://help.1forma.ru/domains/files/business.md).

### Просмотр и редактирование вложенных документов

Офисные документы, прикреплённые к комментарию, открываются во встроенном просмотрщике прямо из ленты. Если у пользователя есть право изменять файлы задачи, в панели инструментов просмотрщика доступна кнопка «Редактировать» — так же, как при открытии из блока «Файлы» в карточке. При просмотре устаревшей версии файла редактирование недоступно, пока не перейти по ссылке к актуальной версии.

### Вложения в цитате ответа

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

- Если среди вложений есть картинка, в квадрат идёт она — первая по порядку, кадрированная до квадрата. Картинками считаются JPEG, PNG, GIF и WebP.
- Если картинки нет, показывается плитка с фоном по типу файла и его расширением — та же, что у вложения в сообщении. Так же выглядит вложение-видео: отдельного превью первого кадра нет.
- Формат SVG и вложение без типа тоже показываются плиткой.

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

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


**Переход к исходному сообщению по цитате**

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

Если исходного сообщения нет в уже загруженной странице (лента подгружается постранично, а сообщение может быть старше), общая лента сама дозагружает фрагмент переписки вокруг него и прокручивается к нему. Дополнительно ничего нажимать не нужно, переход к сообщению происходит по тому же клику.

| Где вызвано | Поведение |
|---|---|
| Общая лента комментариев (страница ленты задачи, открытая из главной ленты, ленты по категории или канала) | Переход к сообщению; при необходимости лента сначала дозагружает фрагмент переписки вокруг него |
| Карточка задачи | Переход к сообщению |
| Чат и открытое обсуждение | Переход к сообщению, как раньше |

Если переход выполняется, пока лента ещё загружается, он не теряется: лента сначала доходит до конца загрузки и выполняет переход после неё.

## Простые опросы в ленте сообщений

> Простой опрос в ленте — это **отдельный механизм**, не связанный с опросами-тестами на базе SurveyJS (см. раздел [«Опросы (SurveyJS)»](#опросы-surveyjs)).

Простые опросы доступны начиная с версии 2.265 «Цефей». Опрос публикуется прямо в ленте сообщений карточки задачи. Для создания нужно нажать **кнопку прикрепления файла** в поле ввода и выбрать опцию **Создать опрос**.

Опрос в ленте работает непрерывно с момента публикации и не имеет ограничения по времени сбора ответов. К одному сообщению может быть прикреплён один опрос. Действует правило: один пользователь — один голос. Поддерживается создание опроса только с одним вопросом.

**Форма создания опроса:**

| Элемент | Описание |
|---|---|
| Вопрос | Обязательное поле, текст ограничен 100 символами |
| Варианты ответа | Поля с ограничением 100 символов каждое. По умолчанию отображается два поля; новые добавляются по кнопке **Добавить ответ** |
| Анонимный опрос | Скрывает информацию о том, кто за какой вариант проголосовал — имена и аватары участников не отображаются в результатах |
| Выбор нескольких ответов | Разрешает участнику выбрать несколько вариантов одновременно. Без этой настройки доступен только один вариант |

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

При нажатии кнопки **Создать опрос** форма опроса добавляется как вложение к новому сообщению. В этом же окне можно указать адресатов и при необходимости добавить текстовый комментарий к опросу. До момента отправки опрос остаётся черновиком и доступен для редактирования — для этого служит **кнопка редактирования опроса** справа от текста вопроса.

**Опрос после публикации.** В ленте опрос отображается с вариантами ответов, счётчиком голосов и процентным соотношением результатов. В публичных опросах отмечается вариант, выбранный текущим пользователем, и виден список проголосовавших. Для публичного опроса, где уже проголосовали другие пользователи, отображается ссылка **«Проголосовали X человек»** — по клику открывается модальное окно, в котором варианты ответов представлены вкладками; выбрав вкладку, можно увидеть список отдавших за этот вариант голос.

**Отмена голоса.** Пользователь может снять ранее отданный голос и проголосовать заново. В опросе с одним вариантом ответа для отмены достаточно повторно нажать на выбранный пункт. В опросах с несколькими вариантами голос отменяется через контекстное меню (ПКМ) пунктом **Отменить свой голос**. Голос можно отменить в любой момент после ответа на опрос.


## Стикеры в сообщениях

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

**Как отправить.** Кнопка выбора стикера находится в панели ввода и показывается только при включённой настройке «Стикеры» в «Возможностях чата»; в карточке задачи и в тредах её нет. Нажатие открывает панель с вкладками паков и сеткой стикеров, клик по стикеру сразу отправляет сообщение.

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

**Где доступны.** Стикер принимается только там, где стикеры разрешены настройками чата. Если у задачи нет настроек чата или стикеры в них выключены, отправка отклоняется. Так же отклоняется отправка стикера, которого нет в наборе. Стикер из выключенного пака или пака чужой компании отклоняется так же, как несуществующий: при приёме действует тот же отбор, что и в панели выбора.

**С чем не сочетается.** Стикер занимает сообщение целиком. Вместе с ним в одном сообщении нельзя отправить файлы (в том числе ссылки на файлы Диска), опрос, ссылки-превью и пересылаемое чужое сообщение — такая отправка отклоняется. Уже отправленное сообщение со стикером не редактируется: попытка дописать в него текст, приложить файл или добавить ссылку тоже отклоняется.

**Что видит получатель.** В ленте стикер приходит отдельным элементом сообщения, а не вложением: в список файлов задачи он не попадает и в блоке вложений не показывается.

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

**Уведомления.** Текста у сообщения со стикером нет, поэтому в push-уведомлении, письме и СМС вместо текста приходит пометка «[Стикер]». Сама картинка в уведомление не вкладывается.

**Ответ, пересылка и цитирование.** Ответить стикером на чужое сообщение можно — цитата исходного сообщения при этом сохраняется. Само сообщение со стикером пересылается только целиком: вариант «только файл» для него не работает, вложений в таком сообщении нет. В пересланном сообщении и в цитате ответа стикер выводится картинкой: сервер вместе с исходным сообщением передаёт признак стикера, и клиент показывает по нему изображение. Когда на сообщение со стикером отвечают письмом или пересылают его письмом, в теме и в цитате вместо пустого текста стоит пометка «[Стикер]»; если к стикеру был дописан текст, цитируется этот текст.


**Пересылка стикера.** Пересланное сообщение со стикером публикуется стикером: новый комментарий несёт тот же стикер, что исходный, текста у него нет, а в уведомлении стоит пометка «[Стикер]». Стикер переносится, если исходное сообщение доступно отправителю и не лежит в зашифрованной задаче. Пересылка недоступного или зашифрованного сообщения — единственный случай, когда стикер не переносится: новое сообщение создаётся без него, чтобы в ленту не попала картинка из чужого источника. Пересылка в чат с выключенными стикерами отклоняется так же, как прямая отправка. Вместе со стикером нельзя приложить файл, опрос или ссылку: такая отправка отклоняется, и сообщение не появляется.

## Отложенная отправка сообщения

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

**Где доступно.** Отложить можно сообщение из панели ввода, открытой в контексте задачи, — в ленте задачи, в чате, в карточке задачи. В постах соцсети отложенной отправки нет. Не предлагается она и там, где отправка потеряла бы часть сообщения: у анонимных сообщений (анонимность в отложенную отправку не передаётся) и при пересылке нескольких сообщений сразу (принимается только одна пересылка).

Пункта «Отправить позже» нет и в режиме правки уже отправленного сообщения. Нет его и у кнопки записи аудио: пока поле ввода пусто и в панели показывается микрофон, отложить голосовое сообщение нельзя.

**Как отложить.** У кнопки отправки есть меню — оно открывается правым щелчком по кнопке или удержанием (около 0,3 с), пункт меню — «Отправить позже». Дальше открывается общий выбор даты и времени: по умолчанию подставлен момент на час вперёд, выбрать время раньше текущего нельзя. Подтверждение ставит сообщение в очередь с тем, что набрано в панели ввода, — текстом, вложениями, адресатами, опросом. Панель после этого очищается, но только от того, что ушло в отложенное: если после постановки в очередь в ней успели набрать новое сообщение, оно не пропадёт. Если панель заполнена некорректно (например, в опросе нет вопроса или второго варианта) или вложение не удалось загрузить, отложенная отправка не создаётся — пользователь видит сообщение об ошибке.

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

**Список отложенных.** В панели ввода есть кнопка «Отложенная отправка» — она появляется, когда у пользователя есть хотя бы одно отложенное сообщение или не удалось получить список, и скрывается, пока в поле ввода набран текст. Кнопка открывает окно «Отложенная отправка» со списком своих отложенных сообщений. Строки идут по назначенному времени, ближайшее — сверху; в строке видны время, текст сообщения, пометки «Вложения: N» и «Опрос», если они есть, и сообщение о сбое, если публикация не удалась. Пустой список выглядит как «Нет отложенных сообщений»; если список не загрузился, в окне стоит «Ошибка загрузки» и кнопка «Попробовать еще раз».

**Удаление и отмена — одно действие.** Отдельной операции отмены у отложенного сообщения нет: отменить отправку и удалить сообщение — одна и та же операция, поэтому в меню строки один пункт «Удалить». Перед удалением показывается подтверждение: «Отложенное сообщение будет удалено и не отправится. Продолжить?». Пока сообщение уже отправляется, действие в строке недоступно. Если к моменту удаления сервер уже забрал сообщение в отправку, оно исчезает из списка с сообщением «Сообщение уже отправляется, отменить его нельзя.» Удаление последней строки закрывает окно.

## Пересылка сообщений

![Форма пересылки сообщения с вложением](https://help.1forma.ru/help-images/comments/tickers_and_notifications-19.png)

| Вариант | Поведение |
|---------|-----------|
| **В текущую задачу** | Переходит к полю написания с закреплённым исходным сообщением |
| **Выбрать** | Модальное окно: поиск по номеру/тексту задач и чатов, фильтр «Только задачи» / «Только пользователи» |
| Из задачи в чат | После выбора открывается вид чата |
| Из чата в задачу | После выбора открывается форма задачи |
| Из любого источника в пространство | После выбора открывается страница пространства |

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

Пересланное сообщение публикуется как новое (реакции и служебные данные не переносятся). При пересылке с вложением можно выбрать — пересылать полностью или только файл.

**Отказ при пересылке «только файлы».** Если выбран режим передачи только файлов, но среди выбранных сообщений нет ни одного вложения (например, выбраны текстовые сообщения или стикеры), отправка отклоняется с сообщением вида «В пересылаемых комментариях нет файлов: » — в нём перечисляются номера тех сообщений, у которых вложений нет. Пересылка в этом режиме возможна только для сообщений с файлами.

![Выбор режима пересылки: полностью или только файлы](https://help.1forma.ru/help-images/comments/tickers_and_notifications-20.png)

⚠️ Из зашифрованной задачи пересылка возможна только в текущую задачу.

Стикер пересылается вместе с сообщением: в новом сообщении он приходит той же картинкой, что и в исходном, с пометкой «Переслано», а в уведомлении вместо текста стоит пометка «[Стикер]». Не переносится он только из недоступного или зашифрованного сообщения — в этом случае возможна пометка пересылки без картинки стикера. Пересылка стикера в чат с выключенными стикерами отклоняется, как и обычная отправка стикера.

**Целевое обсуждение.** Помимо задачи-приёмника при пересылке можно указать конкретное обсуждение внутри неё — тогда пересланные сообщения публикуются в этом треде, а не в общей ленте задачи. В качестве цели принимается как корневое сообщение обсуждения, так и любое сообщение внутри него: тред в обоих случаях определяется по корню. Обсуждение должно принадлежать задаче-приёмнику; обычное сообщение вне обсуждений целью быть не может. Если обсуждение не указано, пересланные сообщения попадают в общую ленту задачи-приёмника — даже когда исходное сообщение находилось в треде.

**Пересылка из обсуждения.** Если меню пересылки вызвано внутри обсуждения, приёмником становится основная лента задачи, а не обсуждение, из которого меню вызвали. Вариант «В текущую задачу» публикует сообщение в основной ленте той же задачи и закрывает исходное обсуждение; набранный в поле ленты текст и выбранные адресаты при этом сохраняются. Пересылка из обсуждения в другую задачу или чат работает как обычно: сообщение попадает в общую ленту приёмника либо в открытое в нём обсуждение.

**Обсуждение в приёмнике.** Отдельного списка обсуждений в окне выбора цели нет. Если в задаче-приёмнике открыто обсуждение, пересланное сообщение и сопроводительный текст к нему публикуются в этом обсуждении; если открытого обсуждения нет — в общей ленте.

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


**Массовая обработка**

Режим выбора активируется через пункт **Выбрать** в контекстном меню — у сообщений появляются чекбоксы.

![Режим выбора сообщений с чекбоксами](https://help.1forma.ru/help-images/comments/select_comment_2.png)

Отмеченные сообщения можно переслать или удалить через контекстное меню; выход — пунктом «Отмена».

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

![Контекстное меню в режиме выбора: Переслать / Удалить / Отмена](https://help.1forma.ru/help-images/comments/select_comment_3.png)


## Реакции и пересылка комментариев

Реакция — emoji-отметка на комментарии другого пользователя. Доступность определяется настройкой категории «Разрешить пользовательские реакции».


**Установка и удаление**

В контекстном меню сообщения (по ПКМ) в верхней части — короткий список реакций. Стрелка вниз раскрывает полное меню; если реакции уже использовались, в начале списка отображаются недавно использованные.

Правила:

- Один пользователь — **одна** реакция на сообщение. Повторное нажатие на ту же реакцию убирает её.
- При установке реакции на новое сообщение оно автоматически отмечается прочитанным.
- При пересылке комментария реакции исходного сообщения **не копируются**.
- Реакции не влияют на видимость комментариев.


**Отображение**

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

При наведении на реакцию появляется всплывающее окно со списком пользователей. Клик по нему открывает модальное окно «Все реакции» — там можно переключаться между разными реакциями и видеть авторов каждой; иконка профиля рядом с пользователем открывает его карточку.


**Кнопка emoji в поле ввода**

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

Вид реакций может отличаться в зависимости от устройства.


**Пересылка комментариев**

При пересылке в другую задачу файлы из исходного комментария копируются в целевую задачу. В целевой задаче создаётся новый комментарий с вложенным оригиналом.


**Удаление комментариев**

| Условие | Разрешено |
|---|---|
| Своё сообщение | Автору — если в категории не включён запрет удаления пользовательских комментариев |
| Чужое сообщение вне обсуждения | Администратору категории и участнику с правом изменять задачи в категории |
| Системное сообщение | Нет — служебные записи ленты удаляются только системой |
| Обсуждение целиком | Автору — пока в нём нет ответов других участников; владельцу, администратору и модератору чата — любое; администратору категории — любое |

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

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

**Отмена удаления смарт-пакетом.** Если в категории на событии «Перед удалением комментария» настроено действие «Отменить» с текстом причины, комментарий остаётся в ленте, а удаляющий видит окно с этим текстом — заголовок «SmartCancel», кнопки «Ок» и «Копировать». Кнопки «Создать задачу в техподдержку» в таком окне нет: отмена задумана администратором и ошибкой системы не считается. Правило действует на всех поверхностях удаления — в карточке задачи и в лентах.

### Что происходит с вложениями при удалении сообщения

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

**Удаление головы обсуждения.** Если удаляется корневое сообщение обсуждения, оно уходит вместе с ответами, и вместе с ними снимаются вложения всех сообщений треда — и головы, и ответов; тред обрабатывается целиком, а не только его первая загруженная страница. Результат совпадает с поштучным удалением тех же сообщений.

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

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

**Обновление карточки задачи.** После удаления сообщения с файлами счётчик вложений и блок «Документы» в карточке задачи обновляются сразу, без перезагрузки страницы.

### Выбор задачи по «#» при наборе сообщения

При наборе сообщения в ленте или в чате знак «#» открывает список задач: с пустым вводом показываются недавние задачи, при вводе — результат поиска. Список управляется с клавиатуры: стрелки двигают выбор, Enter и Tab подставляют задачу, Esc закрывает список и возвращает фокус в поле. Выбранная задача вставляется в текст обычной ссылкой с номером, текущий набранный фрагмент заменяется, а формат ссылки в тексте не меняется. Загрузка, ошибка загрузки и пустой результат показываются разными состояниями списка.
