Reactions

Overview

You can react to both activities and comments. It’s possible to configure any reaction types that best fit your app.

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 an activity
$response = $feedsClient->addActivityReaction(
    "activity_123",
    new GeneratedModels\AddReactionRequest(
        type: 'like',
        userID: 'user123',
        // Optionally override existing reaction
        enforceUnique: true,
        custom: (object)['emoji' => '❤️']
    )
);

// Adding a reaction without triggering push notifications
$response = $feedsClient->addActivityReaction(
    "activity_123",
    new GeneratedModels\AddReactionRequest(
        type: 'like',
        userID: 'user123',
        custom: (object)['emoji' => '❤️'],
        skipPush: true
    )
);

// Add a reaction to a comment
$response = $feedsClient->addCommentReaction(
    "comment_456",
    new GeneratedModels\AddCommentReactionRequest(
        type: 'like',
        userID: 'user123',
        // Optionally override existing reaction
        enforceUnique: true,
        custom: (object)['emoji' => '👍']
    )
);

// Adding a comment reaction without triggering push notifications
$response = $feedsClient->addCommentReaction(
    "comment_456",
    new GeneratedModels\AddCommentReactionRequest(
        type: 'like',
        userID: 'user123',
        custom: (object)['emoji' => '👍'],
        skipPush: true
    )
);

// Delete activity reaction
$response = $feedsClient->deleteActivityReaction(
    "activity_123",
    "like",
    "user123"
);

Overview of the reaction model

FeedsReactionResponse

NameTypeDescriptionConstraints
activity_idstringID of the activity that was reacted toRequired
comment_idstringID of the comment that was reacted to-
created_atnumberWhen the reaction was createdRequired
customobjectCustom data for the reaction-
typestringType of reactionRequired
updated_atnumberWhen the reaction was last updatedRequired
userUserResponseUser who created the reactionRequired

By default creating a reaction doesn’t create an activity.

When you read a feed the reactions are included. Here’s an example:

// Get feed data with reactions
$feedResponse = $feedsClient->getOrCreateFeed(
    "user",
    "sara",
    new GeneratedModels\GetOrCreateFeedRequest(
        userID: "sara"
    )
);

// Access reaction data from activities
$activities = $feedResponse->getData()->activities;
if (!empty($activities)) {
    $firstActivity = $activities[0];
    echo "Own reactions: " . json_encode($firstActivity->ownReactions ?? []) . "\n";
    echo "Latest reactions: " . json_encode($firstActivity->latestReactions ?? []) . "\n";
    echo "Reaction groups: " . json_encode($firstActivity->reactionGroups ?? []) . "\n";
}

// Query reactions to a specific activity
$response = $feedsClient->queryActivityReactions(
    "activity_123",
    new GeneratedModels\QueryActivityReactionsRequest(
        limit: 10,
        filter: (object)['reaction_type' => 'like']
    )
);

Querying Reactions

You can query reactions to both activities and comments. Here are some examples:

// Query reactions to a specific activity
$response = $feedsClient->queryActivityReactions(
    "activity_123",
    new GeneratedModels\QueryActivityReactionsRequest(
        limit: 10,
        filter: (object)['reaction_type' => 'like']
    )
);

// Handle activity reactions
$reactions = $response->getData()->reactions;
foreach ($reactions as $reaction) {
    echo "Reaction: " . $reaction->type . " by " . $reaction->user->id . "\n";
}

// Query reactions to a specific comment
$response = $feedsClient->queryCommentReactions(
    $commentId,
    new GeneratedModels\QueryCommentReactionsRequest(
        limit: 10,
        filter: (object)['reaction_type' => 'like']
    )
);

// Handle comment reactions
$reactions = $response->getData()->reactions;
foreach ($reactions as $reaction) {
    echo "Comment reaction: " . $reaction->type . " by " . $reaction->user->id . "\n";
}

Reaction Queryable Built-In Fields

nametypedescriptionsupported operationsexample
reaction_typestring or list of stringsThe type of reaction$in, $eq{ reaction_type: { $in: [ 'like', 'heart', 'thumbs_up' ] } }
user_idstring or list of stringsThe ID of the user who created the reaction$in, $eq{ user_id: { $eq: 'user_123' } }
created_atstring, must be formatted as an RFC3339 timestampThe time the reaction was created$eq, $gt, $gte, $lt, $lte{ created_at: { $gte: '2023-12-04T09:30:20.45Z' } }
© Getstream.io, Inc. All Rights Reserved.