Blue APIを使用してプロジェクトアクティビティフィードを取得および監視します。
プロジェクトアクティビティの取得
activityList
クエリは、プロジェクトおよび企業の包括的なアクティビティフィードにアクセスするためのものです。アクティビティは、ユーザーがTODOの作成、コメント、またはプロジェクトの変更を行うと自動的に生成されます。
基本的な例
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
}
}
フィルタリングを使用した高度な例
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
}
}
入力パラメータ
activityList クエリ
パラメータ | 型 | 必須 | 説明 |
---|---|---|---|
companyId |
String | いいえ | 会社IDまたはスラグでアクティビティをフィルタリング |
projectId |
String | いいえ | プロジェクトIDまたはスラグでアクティビティをフィルタリング |
userId |
String | いいえ | 特定のユーザーでアクティビティをフィルタリング |
userIds |
[String!] | いいえ | 複数のユーザーでアクティビティをフィルタリング |
tagIds |
[String!] | いいえ | TODOタグでアクティビティをフィルタリング |
categories |
[ActivityCategory!] | いいえ | 特定のアクティビティタイプでフィルタリング |
startDate |
DateTime | いいえ | この日付以降のアクティビティをフィルタリング |
endDate |
DateTime | いいえ | この日付までのアクティビティをフィルタリング |
skip |
Int | いいえ | この数のレコードをスキップ(オフセットページネーション) |
first |
Int | いいえ | 最初のNレコードを返す(カーソルページネーション) |
last |
Int | いいえ | 最後のNレコードを返す(カーソルページネーション) |
after |
String | いいえ | このカーソル以降のレコードを返す |
before |
String | いいえ | このカーソル以前のレコードを返す |
orderBy |
ActivityOrderByInput | いいえ | 結果のソート順 |
ActivityCategory 値
システムはさまざまなタイプのアクティビティを自動的に追跡します:
カテゴリ | 説明 |
---|---|
CREATE_TODO |
新しいTODO/タスクが作成されました |
MARK_TODO_AS_COMPLETE |
TODOが完了としてマークされました |
CREATE_COMMENT |
コメントが追加されました |
CREATE_DISCUSSION |
議論が開始されました |
CREATE_STATUS_UPDATE |
ステータス更新が投稿されました |
CREATE_TODO_LIST |
新しいTODOリストが作成されました |
MOVE_TODO |
TODOがリスト間で移動されました |
COPY_TODO |
TODOがコピーされました |
ADD_USER_TO_PROJECT |
ユーザーがプロジェクトに追加されました |
REMOVE_USER_FROM_PROJECT |
ユーザーがプロジェクトから削除されました |
ARCHIVE_PROJECT |
プロジェクトがアーカイブされました |
UNARCHIVE_PROJECT |
プロジェクトがアーカイブ解除されました |
CREATE_INVITATION |
ユーザーが招待されました |
ACCEPT_INVITATION |
招待が受け入れられました |
CREATE_CUSTOM_FIELD |
カスタムフィールドが作成されました |
RECEIVE_FORM |
フォームの提出が受信されました |
ActivityOrderByInput 値
値 | 説明 |
---|---|
createdAt_DESC |
最新のものが最初(デフォルト) |
createdAt_ASC |
古いものが最初 |
updatedAt_DESC |
最も最近更新されたものが最初 |
updatedAt_ASC |
最も最近更新されていないものが最初 |
category_ASC |
カテゴリ別のアルファベット順 |
category_DESC |
カテゴリ別の逆アルファベット順 |
レスポンスフィールド
アクティビティタイプ
フィールド | 型 | 説明 |
---|---|---|
id |
ID! | アクティビティの一意の識別子 |
uid |
String! | 代替の一意の識別子 |
category |
ActivityCategory! | 発生したアクティビティのタイプ |
html |
String! | アクティビティのリッチHTML説明 |
createdAt |
DateTime! | アクティビティが発生した時刻 |
updatedAt |
DateTime! | アクティビティが最後に更新された時刻 |
createdBy |
User! | アクションを実行したユーザー |
affectedBy |
User | アクションの影響を受けたユーザー |
company |
Company | 関連会社 |
project |
Project | 関連プロジェクト |
todo |
Todo | 関連TODO(該当する場合) |
todoList |
TodoList | 関連TODOリスト(該当する場合) |
comment |
Comment | 関連コメント(該当する場合) |
discussion |
Discussion | 関連議論(該当する場合) |
statusUpdate |
StatusUpdate | 関連ステータス更新(該当する場合) |
metadata |
String | 追加のアクティビティメタデータ |
ActivityList レスポンス
フィールド | 型 | 説明 |
---|---|---|
activities |
[Activity!]! | アクティビティレコードの配列 |
pageInfo |
PageInfo! | ページネーション情報 |
totalCount |
Int! | フィルターに一致するアクティビティの総数 |
リアルタイムアクティビティ更新
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
}
}
}
}
サブスクリプションパラメータ
パラメータ | 型 | 必須 | 説明 |
---|---|---|---|
companyId |
String | いいえ | 会社全体のアクティビティを購読 |
projectId |
String | いいえ | 特定のプロジェクトアクティビティを購読 |
サブスクリプションは次の通知を行います:
ACTIVITY_CREATED
- 新しいアクティビティACTIVITY_UPDATED
- 修正されたアクティビティACTIVITY_DELETED
- 削除されたアクティビティ
フィルタリングとプライバシー
自動フィルタリング
アクティビティフィードは次の基準に基づいて結果を自動的にフィルタリングします:
- プロジェクト設定: アクティビティトラッキングが有効なプロジェクトからのアクティビティのみを表示
- ユーザー権限: 異なるユーザーロールは異なるアクティビティタイプを表示
- プロジェクトメンバーシップ: ユーザーはアクセス権のあるプロジェクトからのアクティビティのみを表示
- 会社メンバーシップ: アクティビティはユーザーの会社にスコープされます
プライバシーに関する考慮事項
- CLIENTロールのユーザーは特定の管理アクティビティに対する可視性が制限されています
- アクティビティはプロジェクトレベルのプライバシー設定を尊重します
- 機密操作は公開アクティビティを生成しない場合があります
エラー応答
無効なプロジェクト/会社
{
"errors": [{
"message": "Project not found",
"extensions": {
"code": "NOT_FOUND"
}
}]
}
権限が拒否されました
{
"errors": [{
"message": "You do not have permission to view activities for this project",
"extensions": {
"code": "FORBIDDEN"
}
}]
}
無効な日付範囲
{
"errors": [{
"message": "Start date must be before end date",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
ベストプラクティス
- ページネーションを使用する: アクティビティフィードは大きくなる可能性があるため、常に
first
パラメータを使用してください - プロジェクトでフィルタリングする: 会社全体のアクティビティフィードは圧倒的になる可能性があります
- リアルタイム更新: ライブアクティビティフィードにはサブスクリプションを使用してください
- 日付フィルタリング: 歴史的アクティビティ分析には日付範囲を使用してください
- カテゴリフィルタリング: 特定のアクティビティタイプでフィルタリングして集中したフィードを得る
- ユーザーフィルタリング:
userIds
を使用して特定のチームメンバーのアクティビティを追跡する
重要な注意事項
- アクティビティは自動的に生成され、APIを介して手動で作成することはできません
- アクティビティテキストはリッチ表示のためにHTMLフォーマットを使用します
text
フィールドはhtml
に代わって非推奨です- アクティビティは永久に保存され、完全な監査証跡を提供します
- リアルタイムサブスクリプションにはWebSocket接続の認証が必要です