See how to send text messages and files directly from an R script to Slack with the slackr package Credit: Thinkstock Using R to send a Slack message may sound like a parlor trick, but there are actually a lot of cases where that could come in handy. I’ve used Slack to send graphs to colleagues showing the latest web analytics trends. You can also use Slack to notify yourself or others when a lengthy R script finishes running. Bob Rudis created the R package slackr that makes it easy to send Slack messages with R. It’s on CRAN, so you can install it with install.packages("slackr"). By far, the most complicated part of using slackr is initial setup. Fortunately, you only need to do that once. You’ll need to authorize R to use your specific Slack. Bob shows a sample configuration file to do this, in the following format: api_token: YOUR_FULL_API_TOKEN channel: #general username: slackr incoming_webhook_url: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX So, you need an API token and an incoming webhook URL. Slack’s developer documentation for this can be tough to find. It turns out that you want to create a new Slack app in whatever Slack you want to message. Go to api.slack.com/apps and click the green Create New App button. Sharon Machlis, IDG Create a Slack app as part of setting up R to work with a Slack workspace. Next, select Incoming Webhooks. Sharon Machlis, IDG Add a webhook to your new Slack app. You’ll then see an option to activate them. Sharon Machlis The switch to active Webhooks on a Slack app. Finally, scroll down and add a new webhook. You’ll be asked what channel you want to post to. Don’t worry, you can override that—you don’t need a new hook for each channel. Select a default channel, and then click install. You can see what all these steps look like in the video embedded at the top of this article. After enabling webhooks, copy the resulting webhook URL into your R Slack configuration file. And make sure your configuration file is a plain text file and not an R script. You also need an API token. A Slack “legacy” token works for this. Slack will flash many warnings advising you not to use them, but they do in fact let you connect R to your Slack. To get a legacy token, go to api.slack.com/custom-integrations/legacy-tokens. You should see your Slack workspace listed on that page. Click the Create Token button and copy the token string into your authorization file. Slack setup is done. Next up: Configure slackr to use the authorization file. That part is more straightforward, requiring one line of code with the slackr_setup() function. slackr_setup() defaults to expecting a file named .slackr in your home directory. If you want to use another file in another location, add its name—including full file path if it’s not in your working directory—to slackr_setup(). In the code below, I’m using a file called .morewithr_slack in my current project directory. slackr_setup(config_file = ".morewithr_slack") You need to run the slackr_setup() function and any necessary arguments at the start of each session in which you’re using slackr. Finally, the fun part: Send messages and files. Below, I created a simple text string with my current system date and time and saved it to a variable my_message. To send it to Slack, I used the slackr_msg() function with the first argument my message text and the second argument the channel. my_message <- paste("I'm sending a Slack message at", Sys.time(), "from my R script.") slackr_msg(my_message, channel = "#slack-from-r") Notice the channel name has a pound sign in front of it. If you want to send someone a private message, set the channel to their Slack name with an @ sign in front. slackr_msg(paste("Now I'm sending a private message at", Sys.time()), channel = "@sharon_machlis") It’s also easy to send an image or other file with the slackr_upload() command. As I did in the last “Do More With R” episode (“How to send email from R and Gmail”) I’ll create a graph of monthly U.S. unemployment data and save it to the file unemployment_graph.png. (That’s not the important part. I just need a break from mtcars and iris sample data.) The code below first sends a text message to Slack, followed by uploading the file. pacman::p_load(quantmod, glue, xts, dplyr, ggplot2) getSymbols("UNRATE", src="FRED") unemployment <- coredata(UNRATE) month_starting <- index(UNRATE) series_length <- length(unemployment) latest_msg <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month.") un_df <- data.frame(month_starting, unemployment) %>% filter(month_starting >= as.Date("2000-01-01")) %>% rename(unemployment = UNRATE) mygraph <- ggplot(un_df, aes(month_starting, unemployment)) + geom_line() + ggtitle("US Monthly Unemployment") + xlab("Month Starting") + ylab ("") ggsave("unemployment_graph.png") msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. Here's a graph of the data since January 2000:") slackr_msg(msg_text, channel = "#slack-from-r") slackr_upload("unemployment_graph.png", "US Monthly Unemployment Since Jan 2000", channels = "#slack-from-r") There you have it: Slack messages directly from an R script. For more R tips, head to the “Do More With R” video page on InfoWorld or check out the “Do More With R” YouTube playlist. Related content feature What is Rust? Safe, fast, and easy software development Unlike most programming languages, Rust doesn't make you choose between speed, safety, and ease of use. Find out how Rust delivers better code with fewer compromises, and a few downsides to consider before learning Rust. By Serdar Yegulalp Nov 20, 2024 11 mins Rust Programming Languages Software Development how-to Kotlin for Java developers: Classes and coroutines Kotlin was designed to bring more flexibility and flow to programming in the JVM. Here's an in-depth look at how Kotlin makes working with classes and objects easier and introduces coroutines to modernize concurrency. By Matthew Tyson Nov 20, 2024 9 mins Java Kotlin Programming Languages analysis Azure AI Foundry tools for changes in AI applications Microsoft’s launch of Azure AI Foundry at Ignite 2024 signals a welcome shift from chatbots to agents and to using AI for business process automation. By Simon Bisson Nov 20, 2024 7 mins Microsoft Azure Generative AI Development Tools news Microsoft unveils imaging APIs for Windows Copilot Runtime Generative AI-backed APIs will allow developers to build image super resolution, image segmentation, object erase, and OCR capabilities into Windows applications. By Paul Krill Nov 19, 2024 2 mins Generative AI APIs Development Libraries and Frameworks Resources Videos