Recuperar y monitorear los feeds de actividad del proyecto utilizando la API de Blue.
Recuperar Actividad del Proyecto
La consulta activityList
proporciona acceso a un feed de actividad integral para proyectos y empresas. Las actividades se generan automáticamente cuando los usuarios realizan acciones como crear tareas, comentarios o realizar cambios en el proyecto.
Ejemplo Básico
query ProjectActivity {
activityList(
projectId: "your-project-id"
first: 20
orderBy: createdAt_DESC
) {
activities {
id
category
html
createdAt
createdBy {
id
name
email
}
project {
id
name
}
}
pageInfo {
hasNextPage
endCursor
}
totalCount
}
}
Ejemplo Avanzado con Filtrado
query FilteredActivity {
activityList(
companyId: "your-company-id"
categories: [CREATE_TODO, MARK_TODO_AS_COMPLETE, CREATE_COMMENT]
userIds: ["user1-id", "user2-id"]
startDate: "2024-01-01T00:00:00Z"
endDate: "2024-12-31T23:59:59Z"
first: 50
orderBy: createdAt_DESC
) {
activities {
id
uid
category
html
createdAt
updatedAt
createdBy {
id
name
email
}
affectedBy {
id
name
}
todo {
id
title
}
comment {
id
text
}
project {
id
name
slug
}
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
}
}
Parámetros de Entrada
Consulta activityList
Parámetro | Tipo | Requerido | Descripción |
---|---|---|---|
companyId |
String | No | Filtrar actividades por ID de empresa o slug |
projectId |
String | No | Filtrar actividades por ID de proyecto o slug |
userId |
String | No | Filtrar actividades por un usuario específico |
userIds |
[String!] | No | Filtrar actividades por múltiples usuarios |
tagIds |
[String!] | No | Filtrar actividades por etiquetas de tareas |
categories |
[ActivityCategory!] | No | Filtrar por tipos de actividad específicos |
startDate |
DateTime | No | Filtrar actividades desde esta fecha |
endDate |
DateTime | No | Filtrar actividades hasta esta fecha |
skip |
Int | No | Omitir este número de registros (paginación de desplazamiento) |
first |
Int | No | Devolver los primeros N registros (paginación de cursor) |
last |
Int | No | Devolver los últimos N registros (paginación de cursor) |
after |
String | No | Devolver registros después de este cursor |
before |
String | No | Devolver registros antes de este cursor |
orderBy |
ActivityOrderByInput | No | Orden de clasificación para resultados |
Valores de ActivityCategory
El sistema rastrea varios tipos de actividades automáticamente:
Categoría | Descripción |
---|---|
CREATE_TODO |
Se creó una nueva tarea |
MARK_TODO_AS_COMPLETE |
Se marcó una tarea como completa |
CREATE_COMMENT |
Se agregó un comentario |
CREATE_DISCUSSION |
Se inició una discusión |
CREATE_STATUS_UPDATE |
Se publicó una actualización de estado |
CREATE_TODO_LIST |
Se creó una nueva lista de tareas |
MOVE_TODO |
Se movió una tarea entre listas |
COPY_TODO |
Se copió una tarea |
ADD_USER_TO_PROJECT |
Se agregó un usuario al proyecto |
REMOVE_USER_FROM_PROJECT |
Se eliminó un usuario del proyecto |
ARCHIVE_PROJECT |
El proyecto fue archivado |
UNARCHIVE_PROJECT |
El proyecto fue desarchivado |
CREATE_INVITATION |
Se invitó a un usuario |
ACCEPT_INVITATION |
Se aceptó una invitación |
CREATE_CUSTOM_FIELD |
Se creó un campo personalizado |
RECEIVE_FORM |
Se recibió una presentación de formulario |
Valores de ActivityOrderByInput
Valor | Descripción |
---|---|
createdAt_DESC |
Más reciente primero (predeterminado) |
createdAt_ASC |
Más antiguo primero |
updatedAt_DESC |
Más recientemente actualizado primero |
updatedAt_ASC |
Menos recientemente actualizado primero |
category_ASC |
Alfabético por categoría |
category_DESC |
Alfabético inverso por categoría |
Campos de Respuesta
Tipo de Actividad
Campo | Tipo | Descripción |
---|---|---|
id |
ID! | Identificador único para la actividad |
uid |
String! | Identificador único alternativo |
category |
ActivityCategory! | Tipo de actividad que ocurrió |
html |
String! | Descripción HTML enriquecida de la actividad |
createdAt |
DateTime! | Cuándo ocurrió la actividad |
updatedAt |
DateTime! | Cuándo se actualizó por última vez la actividad |
createdBy |
User! | Usuario que realizó la acción |
affectedBy |
User | Usuario que fue afectado por la acción |
company |
Company | Empresa asociada |
project |
Project | Proyecto asociado |
todo |
Todo | Tarea asociada (si corresponde) |
todoList |
TodoList | Lista de tareas asociada (si corresponde) |
comment |
Comment | Comentario asociado (si corresponde) |
discussion |
Discussion | Discusión asociada (si corresponde) |
statusUpdate |
StatusUpdate | Actualización de estado asociada (si corresponde) |
metadata |
String | Metadatos adicionales de la actividad |
Respuesta de ActivityList
Campo | Tipo | Descripción |
---|---|---|
activities |
[Activity!]! | Array de registros de actividad |
pageInfo |
PageInfo! | Información de paginación |
totalCount |
Int! | Número total de actividades que coinciden con los filtros |
Actualizaciones de Actividad en Tiempo Real
Suscríbete a los cambios de actividad utilizando la suscripción subscribeToActivity
:
subscription ActivityUpdates($companyId: String!, $projectId: String) {
subscribeToActivity(companyId: $companyId, projectId: $projectId) {
mutation
node {
id
category
html
createdAt
createdBy {
id
name
email
}
project {
id
name
}
}
}
}
Parámetros de Suscripción
Parámetro | Tipo | Requerido | Descripción |
---|---|---|---|
companyId |
String | No | Suscribirse a actividades a nivel de empresa |
projectId |
String | No | Suscribirse a actividades de proyectos específicos |
La suscripción te notificará sobre:
ACTIVITY_CREATED
- Nuevas actividadesACTIVITY_UPDATED
- Actividades modificadasACTIVITY_DELETED
- Actividades eliminadas
Filtrado y Privacidad
Filtrado Automático
El feed de actividad filtra automáticamente los resultados en función de:
- Configuraciones del Proyecto: Solo muestra actividades de proyectos con seguimiento de actividad habilitado
- Permisos de Usuario: Diferentes roles de usuario ven diferentes tipos de actividad
- Membresía del Proyecto: Los usuarios solo ven actividades de proyectos a los que tienen acceso
- Membresía de la Empresa: Las actividades se limitan a las empresas del usuario
Consideraciones de Privacidad
- Los usuarios con rol CLIENTE tienen visibilidad limitada sobre ciertas actividades administrativas
- Las actividades respetan las configuraciones de privacidad a nivel de proyecto
- Las operaciones sensibles pueden no generar actividades públicas
Respuestas de Error
Proyecto/Empresa Inválido
{
"errors": [{
"message": "Project not found",
"extensions": {
"code": "NOT_FOUND"
}
}]
}
Permiso Denegado
{
"errors": [{
"message": "You do not have permission to view activities for this project",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
Rango de Fechas Inválido
{
"errors": [{
"message": "Start date must be before end date",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
Mejores Prácticas
- Usar Paginación: Los feeds de actividad pueden ser grandes, siempre usa el parámetro
first
- Filtrar por Proyecto: Los feeds de actividad a nivel de empresa pueden ser abrumadores
- Actualizaciones en Tiempo Real: Usa suscripciones para feeds de actividad en vivo
- Filtrado por Fecha: Usa rangos de fechas para análisis de actividad histórica
- Filtrado por Categoría: Filtra por tipos de actividad específicos para feeds enfocados
- Filtrado por Usuario: Rastrear las actividades de miembros específicos del equipo usando
userIds
Notas Importantes
- Las actividades se generan automáticamente y no se pueden crear manualmente a través de la API
- El texto de la actividad utiliza formato HTML para una visualización enriquecida
- El campo
text
está obsoleto en favor dehtml
- Las actividades se almacenan de forma permanente y proporcionan un registro de auditoría completo
- Las suscripciones en tiempo real requieren autenticación de conexión WebSocket