My goal: Create a helper utility to simplify the process
It was simple enough to deconstruct and normalize the code since there were some very obvious overlaps: Adding a TextSegment, adding a MentionSegment, etc. At this time, those are the only two I've tackled, but I plan to continue to build this out and will post an update when it makes sense.
This makes it very easy to post a message into Chatter. As an example, if I wanted to post a message to a record that started with an @mention to someone, then had a text body, followed by a list of CC worthy @mentions, it would look roughly like:
postChatterFeedItem(ConnectApi.FeedType.Record, recordId, userId, textBody, List<userId>);
1. Create a new Apex Class (Setup > Develop > Apex Classes > New) and paste the following code:
global class UtilsChatter {
//** Turn an input String into a useful TextSegmentInput
global static void postChatterFeedItem(ConnectApi.FeedType FeedType, Id SubjectID, ConnectApi.FeedItemInput Input) {
ConnectApi.ChatterFeeds.postFeedItem(null, FeedType, SubjectID, Input, null);
}
//** Turn an input String into a useful TextSegmentInput
global static ConnectApi.TextSegmentInput addTextSegment(String thisString) {
ConnectApi.TextSegmentInput textSegment = new ConnectApi.TextSegmentInput();
textSegment.text = thisString;
return textSegment;
}
//** Turn an input Id into a useful MentionSegmentInput
global static ConnectApi.MentionSegmentInput addMentionSegment(Id thisId) {
ConnectApi.MentionSegmentInput mentionSegment = new ConnectApi.MentionSegmentInput();
mentionSegment.id = thisId;
return mentionSegment;
}
//** Create and post a message to Chatter (Text)
global static void postChatterFeedItem(ConnectApi.FeedType FeedType, Id SubjectId, String TextString1) {
//** Combine the needed messageSegments into one coherent messageInput
ConnectApi.MessageBodyInput messageInput = new ConnectApi.MessageBodyInput();
messageInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
messageInput.messageSegments.add(addTextSegment(TextString1));
//** Attach the messageInput as the Input.body
ConnectApi.FeedItemInput Input = new ConnectApi.FeedItemInput();
Input.body = messageInput;
//** Post to Chatter
postChatterFeedItem(FeedType, SubjectId, Input);
}
//** Create and post a message to Chatter (Mention)
global static void postChatterFeedItem(ConnectApi.FeedType FeedType, Id SubjectId, Id UserId1) {
//** Combine the needed messageSegments into one coherent messageInput
ConnectApi.MessageBodyInput messageInput = new ConnectApi.MessageBodyInput();
messageInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
messageInput.messageSegments.add(addMentionSegment(UserId1));
//** Attach the messageInput as the Input.body
ConnectApi.FeedItemInput Input = new ConnectApi.FeedItemInput();
Input.body = messageInput;
//** Post to Chatter
postChatterFeedItem(FeedType, SubjectId, Input);
}
//** Create and post a message to Chatter (Mention List)
global static void postChatterFeedItem(ConnectApi.FeedType FeedType, Id SubjectId, List<Id> UserId1) {
//** Combine the needed messageSegments into one coherent messageInput
ConnectApi.MessageBodyInput messageInput = new ConnectApi.MessageBodyInput();
messageInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
for (Id i : UserId1) {
messageInput.messageSegments.add(addMentionSegment(i));
}
//** Attach the messageInput as the Input.body
ConnectApi.FeedItemInput Input = new ConnectApi.FeedItemInput();
Input.body = messageInput;
//** Post to Chatter
postChatterFeedItem(FeedType, SubjectId, Input);
}
}
A few notes:
- I only posted the three headlining postChatterFeedItem methods above for simplicity, but these do not give much posting flexibility in and of themselves. I have built out many more scenarios (e.g. Mention List + Text + Mention + Text + Mention List), let me know if you want the entire class (I'll send it offline so as not to clog up a post with the code).
- I've only tackled MentionSegment and Text Segment (no support yet for Polls, Attachments, etc), but I plan to continue to build this out and will post an update when it makes sense.
Happy Coding!