Activity Feeds v3 is in beta — try it out!

Comments

Overview

Comments support voting, ranking, threading, images, URL previews, mentions and notifications.

Adding Comments

// Adding a comment to an activity
$response = $feedsClient->addComment(
    new GeneratedModels\AddCommentRequest(
        comment: 'So great!',
        objectID: 'activity_123',
        objectType: 'activity',
        userID: 'user123',
        custom: (object)[
            'sentiment' => 'positive'
        ]
    )
);

// Adding a reply to a comment
$response = $feedsClient->addComment(
    new GeneratedModels\AddCommentRequest(
        comment: 'I agree!',
        objectID: 'activity_123',
        objectType: 'activity',
        parentID: 'comment_456',
        userID: 'user123'
    )
);

// Adding a comment without triggering push notifications
$response = $feedsClient->addComment(
    new GeneratedModels\AddCommentRequest(
        comment: 'Silent comment',
        objectID: 'activity_123',
        objectType: 'activity',
        userID: 'user123',
        skipPush: true
    )
);

Updating Comments

// Update a comment
$response = $feedsClient->updateComment(
    'comment_123',
    new GeneratedModels\UpdateCommentRequest(
        comment: 'Updated comment',
        custom: (object)[
            'edited' => true
        ]
    )
);

Removing Comments

// Delete a comment (soft delete)
$response = $feedsClient->deleteComment('comment_123', false);

Reading Comments

You’ll also want to show/return these comments. The most important is when reading the feed.

// Get comments for an activity
// activity id, object type, depth, sort, replies limit, limit, prev, next
$response = $feedsClient->getComments('activity_123', 'activity', 3, 'best', 10, 10, '', '');

echo json_encode($response->getData());

// Access comments from feed response
$feedResponse = $feedsClient->feed('user', 'eric')->getOrCreateFeed(
    new GeneratedModels\GetOrCreateFeedRequest(
        userID: 'eric'
    )
);
$comments = $feedResponse->getData()->activities[0]['comments'];

Querying Comments

You can also query the comments so you can show all comments for a given activity or user:

// Search in comment texts
$response = $feedsClient->queryComments(
    new GeneratedModels\QueryCommentsRequest(
        filter: (object)['comment_text' => ['$q' => 'oat']],
        limit: 10
    )
);

// Comments of a user
$response = $feedsClient->queryComments(
    new GeneratedModels\QueryCommentsRequest(
        filter: (object)['user_id' => 'jane'],
        limit: 20
    )
);

// Query comments for an activity
$response = $feedsClient->queryComments(
    new GeneratedModels\QueryCommentsRequest(
        filter: (object)['object_id' => 'activity_123'],
        limit: 10
    )
);

Comment Queryable Built-In Fields

nametypedescriptionsupported operationsexample
idstring or list of stringsThe ID of the comment$in, $eq{ id: { $in: [ 'comment_123', 'comment_456' ] } }
user_idstring or list of stringsThe ID of the user who created the comment$in, $eq{ user_id: { $eq: 'user_123' } }
object_typestring or list of stringsThe type of object being commented on$eq, $ne, $in, $nin{ object_type: { $in: [ 'activity', 'post' ] } }
object_idstring or list of stringsThe ID of the object being commented on$in, $eq{ object_id: { $eq: 'activity_123' } }
parent_idstring or list of stringsThe parent comment ID for replies$in, $eq{ parent_id: { $eq: 'comment_parent_123' } }
comment_textstringThe text content of the comment$q{ comment_text: { $q: 'search terms' } }
statusstring or list of stringsThe status of the comment$eq, $ne, $in{ status: { $in: [ 'approved', 'pending' ] } }
reply_countnumberThe number of replies to this comment$gt, $gte, $lt, $lte{ reply_count: { $gte: 5 } }
upvote_countnumberThe number of upvotes on the comment$gt, $gte, $lt, $lte{ upvote_count: { $gte: 10 } }
downvote_countnumberThe number of downvotes on the comment$gt, $gte, $lt, $lte{ downvote_count: { $lt: 5 } }
scorenumberThe overall score of the comment$gt, $gte, $lt, $lte{ score: { $gte: 0 } }
confidence_scorenumberThe confidence score of the comment$gt, $gte, $lt, $lte{ confidence_score: { $gte: 0.5 } }
controversy_scorenumberThe controversy score of the comment$gt, $gte, $lt, $lte{ controversy_score: { $lt: 0.8 } }
created_atstring, must be formatted as an RFC3339 timestampThe time the comment was created$eq, $gt, $gte, $lt, $lte{ created_at: { $gte: '2023-12-04T09:30:20.45Z' } }

Comment Reactions

When adding reactions and the enforce_unique flag is set to true, the existing reaction of a user will be overridden with the new reaction. Use this flag if you want to ensure users have a single reaction per each comment/activity. The default value is false, in which case users can have multiple reactions.

// Add a reaction to a comment
$response = $feedsClient->addCommentReaction(
    $response->getData()->comment->id,
    new GeneratedModels\AddCommentReactionRequest(
      type: 'like',
      userID: 'user123',
      // Optionally override existing reaction
      enforceUnique: true
    )
);

// Remove a reaction from a comment
$response = $feedsClient->deleteCommentReaction(
  $response->getData()->comment->id,
  'like',
  userID: 'user123'
);

Comment Threading

// Get comments for an activity with threading
// activity id, object type, depth, sort, replies limit, limit, prev, next
$response = $feedsClient->getComments('activity_123', 'activity', 3, 'best', 20, 20, '', '');

// Get replies of a specific parent comment
// parent id, depth, sort, replies limit, limit, prev, next
$response = $feedsClient->getCommentReplies('parent_123', 3, 'best', 20, 20, '', '');
© Getstream.io, Inc. All Rights Reserved.