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
      }
   }
}