Skip to content

Instantly share code, notes, and snippets.

@ccoenraets
Created January 12, 2016 20:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ccoenraets/fd3c960639805bcb1a11 to your computer and use it in GitHub Desktop.
Save ccoenraets/fd3c960639805bcb1a11 to your computer and use it in GitHub Desktop.
public with sharing class SlackOpportunityPublisher {
private static final String slackURL = 'YOUR_WEBHOOK_URL';
public class Oppty {
@InvocableVariable(label='Opportunity Name')
public String opptyName;
@InvocableVariable(label='Stage')
public String stage;
}
@InvocableMethod(label='Post to Slack')
public static void postToSlack(List<Oppty> oppties) {
Oppty o = oppties[0]; // If bulk, only post first to avoid overloading Slack channel
Map<String,Object> msg = new Map<String,Object>();
msg.put('text', 'The following opportunity has changed:\n' + o.opptyName + '\nNew Stage: *' + o.stage + '*');
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