Blueのレコード(TODO)にリッチテキストコンテンツ、ファイル添付、および@メンションを使用してコメントを追加します。
コメントを追加
createCommentミューテーションを使用すると、Blueのレコードにコメントを追加できます。コメントはリッチ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 |
レコード/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 | このコメントがAIによって生成されたかどうか |
必要な権限
ユーザーは、レコードにコメントを追加するために適切なプロジェクトアクセスを持っている必要があります:
アクセスレベル | コメントを追加できる |
---|---|
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エディタコンテンツのために特別なサニタイズを使用します - @メンション: コメント内のユーザーメンションは自動的に処理され、通知をトリガーします
パフォーマンスの考慮事項
- コメントは自動的に検索用にインデックスされます
- 大きな画像添付ファイルは非同期で処理されます
- 各コメントはプロジェクトタイムラインのためのアクティビティレコードを作成します
副作用
コメントを追加すると、いくつかの自動化プロセスがトリガーされます:
- アクティビティ作成: プロジェクトタイムラインに表示されるアクティビティレコードを作成します
- 検索インデックス: コメント内容がプロジェクト検索インデックスに追加されます
- 通知: 関連するユーザーにメール、プッシュ、およびアプリ内通知を送信します
- リアルタイム更新: コメントがGraphQLサブスクリプションに公開され、ライブ更新が行われます
- Webhook: プロジェクトに設定されている場合、外部Webhookをトリガーします
- @メンション処理: ユーザーメンションを処理し、ターゲット通知を送信します
- ファイル処理: HTMLコンテンツから埋め込まれた画像やファイルを抽出し、処理します
コンテンツセキュリティ
- すべてのHTMLは業界標準のライブラリを使用してサニタイズされます
- ファイルアップロードはタイプとサイズが検証されます
- 悪意のあるコンテンツは自動的に削除されます
- ユーザー生成コンテンツはすべてのコンテキストで適切にエスケープされます
統合機能
- アクティビティフィード: コメントはプロジェクトのアクティビティタイムラインに表示されます
- 検索: コメント内容はプロジェクト内で検索可能です
- 通知: 異なるコメントタイプに対する通知設定が可能です
- リアルタイム: コメントは同じレコードを表示している他のユーザーに即座に表示されます
- モバイルサポート: コメントはモバイルアプリケーションで完全にサポートされています
関連エンドポイント
- コメントのリスト: コメントをクエリして、レコードに対する既存のコメントを取得します
- コメントの更新: 既存のコメント内容を修正します
- コメントの削除: 適切な権限でコメントを削除します
- レコードのリスト: TODOをクエリして、コメント可能なレコードを見つけます