Slack is a great tool for data scientists and data engineers and is now being adopted across businesses, so it’s probable that you already use it in your workplace. Besides being a great tool for quick communications, it’s also perfect for alerting.
In this project, we’ll create a really basic Slack application that you can use to send messages or alerts to specific channels using the webhooks system. This is really easy to do in Python, and you can add Slack messaging functionality to your application in just a few minutes. Here’s how it’s done.
You can configure your Slack app to post to a shared channel, so everyone in your team can see the message, or use a private channel, to which only you have access.
First, head over to the Slack website and register a new Slack app using your account. Give your app a name, add it to your workspace, then click Create App to finalise it.
In order for your Slack app to take advantage of the easy-to-use webhooks functionality, you need to click the “Incoming Webhooks” button and set the toggle switch to “On”. Once this is in place, we can just send some data to the webhook URL using a POST
request.
Scroll to the bottom of the page and click “Add New Webhook to Workspace” and give it access to the channel you created above, then save the details. After saving, you’ll be redirected back to the Webhooks page, where you’ll find your webhook URL.
Next, open up a Python script or a Jupyter notebook and import the requests
and json
packages. These are pre-installed, so there’s no need to use pip
.
import requests
import json
The actual code required to send a Slack message in Python is very simple indeed. We just create a simple dictionary (known as a payload
) containing our data, then we use json.dumps()
to convert it to JSON, then we use requests.post()
to POST
the data to our webhook address.
def send_slack_message(payload, webhook):
"""Send a Slack message to a channel via a webhook.
Args:
payload (dict): Dictionary containing Slack message, i.e. {"text": "This is a test"}
webhook (str): Full Slack webhook URL for your chosen channel.
Returns:
HTTP response code, i.e. <Response [503]>
"""
return requests.post(webhook, json.dumps(payload))
Finally, we can construct a simple payload
dictionary, define our webhook
URL, and pass the values to our send_slack_message()
function. Run the code and you should see the Slack message appear in your account a split second later.
webhook = "https://hooks.slack.com/services/XXXX/XXXX/XXXX"
payload = {"text": "Anomaly detected!"}
send_slack_message(payload, webhook)
This is obviously the most basic of examples, however, you can do a lot more with Slack messages. If you want to make your Slack messages a bit richer, check out Slack’s Bolt framework, which allows you to control the display of your messages with style.
Matt Clarke, Thursday, March 11, 2021