Добавляйте комментарии к записям (делам) в Blue с содержимым в формате rich text, вложениями файлов и @упоминаниями.
Добавить комментарий
Мутация createComment позволяет вам добавлять комментарии к записям в Blue. Комментарии поддерживают содержимое в формате rich HTML, вложения файлов, @упоминания и автоматически интегрируются с лентой активности и системой уведомлений.
Простой пример
Добавьте простой текстовый комментарий к записи:
mutation AddComment {
createComment(
input: {
html: "<p>This task is progressing well!</p>"
text: "This task is progressing well!"
category: TODO
categoryId: "clm4n8qwx000008l0g4oxdqn7"
}
) {
id
html
text
createdAt
user {
id
name
}
}
}
Расширенный пример
Добавьте комментарий с богатым форматированием, изображениями и обработкой редактора TipTap:
mutation AddCommentAdvanced {
createComment(
input: {
html: "<p>Here's my <strong>feedback</strong> on this task:</p><ul><li>Great progress on the design</li><li>Need to review the API integration</li></ul><p>Attaching screenshot:</p><img src='data:image/png;base64,iVBOR...' />"
text: "Here's my feedback on this task: - Great progress on the design - Need to review the API integration Attaching screenshot:"
category: TODO
categoryId: "clm4n8qwx000008l0g4oxdqn7"
tiptap: true
}
) {
id
html
text
createdAt
user {
id
name
avatar
}
activity {
id
}
isRead
isSeen
}
}
Входные параметры
CreateCommentInput
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
html |
String! | ✅ Да | HTML-содержимое комментария (будет очищено для безопасности) |
text |
String! | ✅ Да | Версия содержимого комментария в обычном тексте |
category |
CommentCategory! | ✅ Да | Тип сущности, к которой добавляется комментарий (используйте TODO для записей) |
categoryId |
String! | ✅ Да | ID сущности (записи), к которой добавляется комментарий |
tiptap |
Boolean | Нет | Включить специфическую для редактора TipTap очистку и обработку HTML |
Значения CommentCategory
Значение | Описание |
---|---|
TODO |
Комментарий к записи/делу |
DISCUSSION |
Комментарий к обсуждению |
STATUS_UPDATE |
Комментарий к обновлению статуса |
Поля ответа
Мутация возвращает объект Comment с подробной информацией:
Поле | Тип | Описание |
---|---|---|
id |
ID! | Уникальный идентификатор комментария |
uid |
String! | Альтернативный уникальный идентификатор |
html |
String! | HTML-содержимое комментария |
text |
String! | Версия комментария в обычном тексте |
category |
CommentCategory! | Тип сущности, к которой добавлен комментарий |
createdAt |
DateTime! | Когда был создан комментарий |
updatedAt |
DateTime! | Когда комментарий был последний раз обновлен |
deletedAt |
DateTime | Когда комментарий был удален (null, если активен) |
deletedBy |
User | Пользователь, который удалил комментарий |
user |
User! | Пользователь, который создал комментарий |
activity |
Activity | Связанная запись активности |
discussion |
Discussion | Связанное обсуждение (если категория DISCUSSION) |
statusUpdate |
StatusUpdate | Связанное обновление статуса (если категория STATUS_UPDATE) |
todo |
Todo | Связанная запись (если категория TODO) |
isRead |
Boolean | Читал ли текущий пользователь этот комментарий |
isSeen |
Boolean | Видел ли текущий пользователь этот комментарий |
aiSummary |
Boolean | Был ли этот комментарий сгенерирован ИИ |
Требуемые разрешения
Пользователи должны иметь соответствующий доступ к проекту, чтобы комментировать записи:
Уровень доступа | Может добавлять комментарии |
---|---|
OWNER |
✅ Да |
ADMIN |
✅ Да |
MEMBER |
✅ Да |
CLIENT |
✅ Да |
COMMENT_ONLY |
✅ Да |
VIEW_ONLY |
❌ Нет |
Важно: Пользователь должен быть членом проекта, содержащего запись, и не должен иметь уровень доступа VIEW_ONLY
.
Ошибки ответов
UnauthorizedError
{
"errors": [{
"message": "You don't have permission to comment on this record",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
Когда: У пользователя нет разрешения комментировать указанную запись/сущность.
ValidationError
{
"errors": [{
"message": "Invalid input parameters",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Когда: Обязательные поля отсутствуют или содержат недопустимые данные.
CommentNotFoundError
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "COMMENT_NOT_FOUND"
}
}]
}
Когда: Указанный categoryId
не соответствует существующей записи.
UserInputError
{
"errors": [{
"message": "Content validation failed",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Когда: HTML-содержимое не прошло очистку или содержит вредоносный код.
Важные заметки
Обработка содержимого
- Очистка HTML: Все HTML-содержимое автоматически очищается для предотвращения атак XSS
- Извлечение файлов: Изображения и вложения, встроенные в HTML, извлекаются и хранятся в S3
- Режим TipTap: Когда
tiptap: true
, используется специализированная очистка для содержимого редактора TipTap - @Упоминания: Упоминания пользователей в комментариях автоматически обрабатываются и вызывают уведомления
Соображения по производительности
- Комментарии автоматически индексируются для поиска
- Большие вложения изображений обрабатываются асинхронно
- Каждый комментарий создает запись активности для временной шкалы проекта
Побочные эффекты
Добавление комментария запускает несколько автоматизированных процессов:
- Создание активности: Создает запись активности, видимую в временной шкале проекта
- Индексация поиска: Содержимое комментария добавляется в индекс поиска проекта
- Уведомления: Отправляет электронные письма, push-уведомления и уведомления в приложении соответствующим пользователям
- Обновления в реальном времени: Публикует комментарий в подписках GraphQL для живых обновлений
- Webhook: Запускает внешний webhook, если он настроен для проекта
- Обработка @Упоминаний: Обрабатывает упоминания пользователей и отправляет целевые уведомления
- Обработка файлов: Извлекает и обрабатывает любые встроенные изображения или файлы из HTML-содержимого
Безопасность содержимого
- Весь HTML очищается с использованием стандартных библиотек отрасли
- Загрузки файлов проверяются по типу и размеру
- Вредоносное содержимое автоматически удаляется
- Контент, созданный пользователями, правильно экранируется во всех контекстах
Интеграционные функции
- Лента активности: Комментарии появляются в временной шкале активности проекта
- Поиск: Содержимое комментариев можно искать в рамках проекта
- Уведомления: Настраиваемые предпочтения уведомлений для различных типов комментариев
- В реальном времени: Комментарии мгновенно появляются для других пользователей, просматривающих ту же запись
- Поддержка мобильных устройств: Комментарии полностью поддерживаются в мобильных приложениях
Связанные конечные точки
- Список комментариев: Запрос комментариев для получения существующих комментариев к записям
- Обновить комментарий: Изменить содержимое существующего комментария
- Удалить комментарий: Удалить комментарии с соответствующими полномочиями
- Список записей: Запрос дел для поиска записей, к которым можно добавлять комментарии