Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/* Example code publish to Slack channel */
/* Author: Chris Hemedinger */
/* See explanation at: */
/* http://blogs.sas.com/content/sasdummy/slack-channel-with-sas/ */
%macro echoResp(fn=);
data _null_;
infile &fn;
input;
put _infile_;
run;
%mend;
/* Replace with your own Incoming Webhook, which you add from a Slack configuration */
%let webhookUrl = https://hooks.slack.com/services/<your webhook URL here!>;
/*
Simple example with direct text
*/
filename resp temp;
proc http
url="&webhookUrl"
method="POST"
/* IN= supports text in SAS 9.4m3. Earlier release? Use fileref with content */
in='payload={"channel": "#fromsas",
"username": "sasprogram",
"text": "Created using PROC HTTP!"}'
out=resp
;
run;
/*
More complex messages, with multiple parts.
Use the attachments fields that Slack supports
*/
filename rich temp;
data _null_;
file rich;
infile datalines4;
input;
put _infile_;
datalines4;
payload=
{
"channel": "#fromsas",
"username": "sasprogram",
"icon_emoji": ":fax:",
"attachments":[
{
"fallback":"New SAS Dummy post!: <http://blogs.sas.com/content/sasdummy|The SAS Dummy blog>",
"pretext":"New SAS Dummy post!: <http://blogs.sas.com/content/sasdummy|The SAS Dummy blog>",
"color":"#3030F0",
"fields":[
{
"title":"Great news!",
"value":"That Chris...he's done it again!",
"short":false
}
]
}
]
}
;;;;
proc http
url="&webhookUrl"
method="POST"
in=rich
out=resp
;
run;
%echoResp(fn=resp);
/*
And finally an example that publishes values from data!
*/
/* Calculate some data */
proc means data=sashelp.class noprint;
var age;
output out=stats;
run;
/* file to hold the JSON payload */
filename msg temp;
/* Create the start of the JSON payload */
data _null_;
file msg ;
infile datalines4;
input;
put _infile_;
datalines4;
payload=
{
"channel": "#fromsas",
"username": "sasprogram",
"icon_emoji": ":fax:",
"attachments":[
{
"fallback":"Latest Stats for AGE in SASHELP.CLASS",
"pretext":"Latest Stats for AGE in SASHELP.CLASS",
"color":"#D000FF",
"fields":[
;;;;
/* fill in the data fields in the middle */
data _null_;
/* mod option will append to the file */
file msg mod;
set stats end=eof;
put '{ "short":false, "title": "' _stat_ '",';
put '"value": "' age '" }';
/* separate values with commas, except the last */
if not eof then put ",";
run;
/*
And finish with the tail end of the payload
*/
data _null_;
/* mod option will append to the file */
file msg mod;
infile datalines4;
input;
put _infile_;
datalines4;
]
}
]
}
;;;;
proc http
url="&webhookUrl"
method="POST"
in=msg
out=resp
;
run;
%echoResp(fn=resp);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment