Created
May 12, 2016 19:47
-
-
Save ccoenraets/4f73ba7e37f9b9dc49197e2cca7ed272 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public with sharing class SlackOpportunityPublisher { | |
private static final String slackURL = 'YOUR_WEBHOOK_URL'; | |
@InvocableMethod(label='Post to Slack') | |
public static void postToSlack(List<Id> opportunityId) { | |
Id oppId = opportunityId[0]; // If bulk, only post first to avoid overloading Slack channel | |
Opportunity opportunity = [SELECT Name, StageName from Opportunity WHERE Id=:oppId]; | |
Map<String,Object> msg = new Map<String,Object>(); | |
msg.put('text', 'The following opportunity has changed:\n' + opportunity.Name + '\nNew Stage: *' | |
+ opportunity.StageName + '*'); | |
msg.put('mrkdwn', true); | |
String body = JSON.serialize(msg); | |
System.enqueueJob(new QueueableSlackCall(slackURL, 'POST', body)); | |
} | |
public class QueueableSlackCall implements System.Queueable, Database.AllowsCallouts { | |
private final String url; | |
private final String method; | |
private final String body; | |
public QueueableSlackCall(String url, String method, String body) { | |
this.url = url; | |
this.method = method; | |
this.body = body; | |
} | |
public void execute(System.QueueableContext ctx) { | |
HttpRequest req = new HttpRequest(); | |
req.setEndpoint(url); | |
req.setMethod(method); | |
req.setBody(body); | |
Http http = new Http(); | |
HttpResponse res = http.send(req); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment