Добавляйте комментарии к записям (делам) в 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 очищается с использованием стандартных библиотек отрасли
  • Загрузки файлов проверяются по типу и размеру
  • Вредоносное содержимое автоматически удаляется
  • Контент, созданный пользователями, правильно экранируется во всех контекстах

Интеграционные функции

  • Лента активности: Комментарии появляются в временной шкале активности проекта
  • Поиск: Содержимое комментариев можно искать в рамках проекта
  • Уведомления: Настраиваемые предпочтения уведомлений для различных типов комментариев
  • В реальном времени: Комментарии мгновенно появляются для других пользователей, просматривающих ту же запись
  • Поддержка мобильных устройств: Комментарии полностью поддерживаются в мобильных приложениях

Связанные конечные точки

  • Список комментариев: Запрос комментариев для получения существующих комментариев к записям
  • Обновить комментарий: Изменить содержимое существующего комментария
  • Удалить комментарий: Удалить комментарии с соответствующими полномочиями
  • Список записей: Запрос дел для поиска записей, к которым можно добавлять комментарии

AI Ассистент

Ответы генерируются с использованием ИИ и могут содержать ошибки.

Как я могу вам помочь?

Спросите меня о чем угодно, связанном с Blue или этой документацией.

Введите для отправки • Shift+Enter для новой строки • ⌘I для открытия