Loading
The online Trailblazer Community becomes read-only Oct 30, 2026Read More
Experience Cloud
Use the API to Give Recognition Badges Sample Code

Use the API to Give Recognition Badges Sample Code

You can use the API to programmatically give recognition badges to Experience Cloud site members.

Assign a Recognition Badge and Notify a Member Using Apex

ID networkID = '0DBB0000000CdBaOAK';
ID badgeDefintionID = '0W1B0000000ekuJKAQ';
ID giverID = '005B0000003InDeIAK';
ID recipientID = '005B000000483dDIAQ';
String message = 'Welcome to the site';

WorkThanks thanks = new WorkThanks (
NetworkdID=networkID
GiverID=giverID,
Message=message
);
insert thanks;

WorkBadge badge = new WorkBadge(
DefinitionId=badgeDefinitionId,
NetworkID=networkID
RecipientId=recipientID,
SourceId=thanks.id
);
insert badge;

// optional: create a Chatter post on the user profile
// showing the badge. The user will be notified through
// the standard Chatter notification mechanisms.
FeedItem feedItem = new FeedItem(
NetworkScope=networkID,
ParentId=recipientID,
RelatedRecordId=thanks.id,
Body=message,
Type='RypplePost',
Visibility='AllUsers'
);
insert feedItem;

// Unfortunately, there is a limitation in the WDC API that
// prevents these 2 lines from working:
// thanks.FeedItemID = :feedItem.id;
// update thanks;

Assign a Recognition Badge When a Member Reaches a Number of Reputation Points

To avoid assigning the same badge twice, we’ve added a custom “hasBadge_c” field on the user object.

trigger NetworkMemberTrigger on NetworkMember (after update) {
              for (NetworkMember nm : Trigger.New) {
                   User user = [select ID, hasBadge_c from User where ID = 
:nm. MemberID]; 
         If (nm.ReputationPonts >= 40 && !user.hasBadge_c) {
             WorkThanks thanks = new WorkThanks(
             GiverId='005B00000036ukY',  
             Message='inserted by trigger',
             NetworkId=nm.NetworkId);
             insert thanks;

            WorkBadge badge = new WorkBadge(
            DefinitionId='0W1B0000000T1QBKA0',
            NetworkId=nm.NetworkId,
            RecipientId=nm.MemberId,
            SourceId=thanks.id);
            insert badge;

            user.hasBadge_c = true;
            update user;
      }  
   }
}

Automatically Add Reputation Points When Badge Is Assigned to a Member

To avoid hardcoding the number of reputation points that are assigned with the badge, this example assumes that the WorkBadgeDefinition entity has been customized with an additional "ReputationPoints__c" field.

trigger WorkBadgeTrigger on WorkBadge (after insert) {
             for (WorkBadge badge : Trigger.new) {
                 if (badge.DefinitionId == '0W1B0000000T1QBKA0') {
                     WorkBadgeDefinition badgeDefinition = [select Id,
ReputationPoints_c from WorkBadgeDefinition where Id = 
:badge.DefinitionId];
            NetworkMember member = [select Id, ReputationPoints from
NetworkMember where MemberID = :badge.RecipientId];
            member.ReputationPoints = member.ReputationPoints + 
badgeDefinition.ReputationPoints_c;
            update member;
      }
   }
}

Assign Recognition Badge When Member Creates Number of Posts or Comments

The ChatterActivity object contains the following useful fields:

  • CommentCount
  • CommentRecievedCount
  • LikeReceivedCount
  • PostCount

These counters can be used to programmatically assign badges based on various thresholds. For example, members could get a badge whenever they create 100 posts or whenever they received 100 likes.

trigger ChatterActivityTrigger on ChatterActivity (after update) {
              for (ChatterActivity ca : Trigger.New) {
                  if (ca.PostCount >= 10) {
                      // TODO: assign badge to user if he hasn't received one already
      }
   }
}
 
Loading
Salesforce Help | Article