Agrega comentarios a registros (tareas) en Blue con contenido de texto enriquecido, archivos adjuntos y menciones @.
Agregar Comentario
La mutación createComment permite agregar comentarios a registros en Blue. Los comentarios admiten contenido HTML enriquecido, archivos adjuntos, menciones @ y están integrados automáticamente con el feed de actividad y el sistema de notificaciones.
Ejemplo Básico
Agrega un comentario de texto simple a un registro:
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
}
}
}
Ejemplo Avanzado
Agrega un comentario con formato enriquecido, imágenes y procesamiento del editor 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
}
}
Parámetros de Entrada
CreateCommentInput
Parámetro | Tipo | Requerido | Descripción |
---|---|---|---|
html |
String! | ✅ Sí | Contenido HTML del comentario (será sanitizado por seguridad) |
text |
String! | ✅ Sí | Versión de texto plano del contenido del comentario |
category |
CommentCategory! | ✅ Sí | Tipo de entidad sobre la que se comenta (usa TODO para registros) |
categoryId |
String! | ✅ Sí | ID de la entidad (registro) sobre la que se comenta |
tiptap |
Boolean | No | Habilitar la sanitización y procesamiento HTML específicos del editor TipTap |
Valores de CommentCategory
Valor | Descripción |
---|---|
TODO |
Comentario sobre un registro/tarea |
DISCUSSION |
Comentario sobre un hilo de discusión |
STATUS_UPDATE |
Comentario sobre una actualización de estado |
Campos de Respuesta
La mutación devuelve un objeto Comment con detalles completos:
Campo | Tipo | Descripción |
---|---|---|
id |
ID! | Identificador único para el comentario |
uid |
String! | Identificador único alternativo |
html |
String! | Contenido HTML del comentario |
text |
String! | Versión de texto plano del comentario |
category |
CommentCategory! | Tipo de entidad comentada |
createdAt |
DateTime! | Cuándo se creó el comentario |
updatedAt |
DateTime! | Cuándo se actualizó por última vez el comentario |
deletedAt |
DateTime | Cuándo se eliminó el comentario (nulo si está activo) |
deletedBy |
User | Usuario que eliminó el comentario |
user |
User! | Usuario que creó el comentario |
activity |
Activity | Registro de actividad asociado |
discussion |
Discussion | Discusión asociada (si la categoría es DISCUSIÓN) |
statusUpdate |
StatusUpdate | Actualización de estado asociada (si la categoría es ACTUALIZACIÓN_DE_ESTADO) |
todo |
Todo | Registro asociado (si la categoría es TAREA) |
isRead |
Boolean | Si el usuario actual ha leído este comentario |
isSeen |
Boolean | Si el usuario actual ha visto este comentario |
aiSummary |
Boolean | Si este comentario fue generado por IA |
Permisos Requeridos
Los usuarios deben tener acceso adecuado al proyecto para comentar en registros:
Nivel de Acceso | Puede Agregar Comentarios |
---|---|
OWNER |
✅ Sí |
ADMIN |
✅ Sí |
MEMBER |
✅ Sí |
CLIENT |
✅ Sí |
COMMENT_ONLY |
✅ Sí |
VIEW_ONLY |
❌ No |
Importante: El usuario debe ser miembro del proyecto que contiene el registro y NO debe tener nivel de acceso VIEW_ONLY
.
Respuestas de Error
UnauthorizedError
{
"errors": [{
"message": "You don't have permission to comment on this record",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
Cuándo: El usuario no tiene permiso para comentar en el registro/entidad especificada.
ValidationError
{
"errors": [{
"message": "Invalid input parameters",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Cuándo: Faltan campos requeridos o contienen datos inválidos.
CommentNotFoundError
{
"errors": [{
"message": "Record not found",
"extensions": {
"code": "COMMENT_NOT_FOUND"
}
}]
}
Cuándo: El categoryId
especificado no corresponde a un registro existente.
UserInputError
{
"errors": [{
"message": "Content validation failed",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Cuándo: El contenido HTML no pasa la sanitización o contiene código malicioso.
Notas Importantes
Procesamiento de Contenido
- Sanitización HTML: Todo el contenido HTML se sanitiza automáticamente para prevenir ataques XSS
- Extracción de Archivos: Imágenes y archivos adjuntos incrustados en HTML se extraen y almacenan en S3
- Modo TipTap: Cuando
tiptap: true
, utiliza sanitización especializada para el contenido del editor TipTap - @Menciones: Las menciones de usuarios en comentarios se procesan automáticamente y desencadenan notificaciones
Consideraciones de Rendimiento
- Los comentarios se indexan automáticamente para búsqueda
- Los archivos adjuntos de imágenes grandes se procesan de manera asíncrona
- Cada comentario crea un registro de actividad para la línea de tiempo del proyecto
Efectos Secundarios
Agregar un comentario desencadena varios procesos automatizados:
- Creación de Actividad: Crea un registro de actividad visible en la línea de tiempo del proyecto
- Indexación de Búsqueda: El contenido del comentario se agrega al índice de búsqueda del proyecto
- Notificaciones: Envía notificaciones por correo electrónico, push y en la aplicación a los usuarios relevantes
- Actualizaciones en Tiempo Real: Publica el comentario en suscripciones GraphQL para actualizaciones en vivo
- Webhooks: Desencadena un webhook externo si está configurado para el proyecto
- Procesamiento de @Menciones: Procesa menciones de usuarios y envía notificaciones dirigidas
- Procesamiento de Archivos: Extrae y procesa cualquier imagen o archivo incrustado del contenido HTML
Seguridad del Contenido
- Todo el HTML se sanitiza utilizando bibliotecas estándar de la industria
- Las cargas de archivos se validan por tipo y tamaño
- El contenido malicioso se elimina automáticamente
- El contenido generado por el usuario se escapa adecuadamente en todos los contextos
Características de Integración
- Feed de Actividad: Los comentarios aparecen en la línea de tiempo de actividad del proyecto
- Búsqueda: El contenido del comentario es buscable dentro del proyecto
- Notificaciones: Preferencias de notificación configurables para diferentes tipos de comentarios
- En Tiempo Real: Los comentarios aparecen instantáneamente para otros usuarios que ven el mismo registro
- Soporte Móvil: Los comentarios son totalmente compatibles en aplicaciones móviles
Endpoints Relacionados
- Listar Comentarios: Consultar comentarios para recuperar comentarios existentes en registros
- Actualizar Comentario: Modificar el contenido de un comentario existente
- Eliminar Comentario: Eliminar comentarios con la autorización adecuada
- Listar Registros: Consultar tareas para encontrar registros que se pueden comentar