Updated 31 May, 2019
*Originally published at blog.mphomphego.co.za on May 26, 2019.
We use and love Slack for team messaging, throughout the day. I needed to integrate slack with some of my IoT devices in the office and at home primarily because of its simplistic API as compared to WhatsApp and Telegram (that I never use).
The reason is pretty straight forward, I wanted my devices to SlackMe messages. For example, I have soil moisture sensor(s) planted in my flowers pot at the office as well as in my vegetable garden at home, and I wanted my plants to SlackMe should they need me to water them.
Note, this is an ongoing side project if you have interest on it go here, I will make a detailed blog post soon.
My solution was to have a simple Python script that sends me a message in the appropriate Slack channel at specific/random times or when xValue goes beyond a certain threshold.
Slack provides Incoming-Webhooks and they have a well documented Incoming-Webhooks guide. However, the guide only tells you what they expect you to do, but it doesn’t really explain what you actually need to do.
The first thing I needed to do was to find out from Slack the correct URL it will use to post the messages.
- Go to https://api.slack.com/apps?new_app and sign in then follow the instructions here
- Choose the channel to which you want to send messages and then Add Incoming WebHooks Integration.
- Note that you can find the
Display Nameand change what will appear in the channel. Slack gives you the URL to which you’ll be posting your messages. Similar to this:https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Posting to a Slack channel
From the URL Slack gave you, extract the app_id, secret_id and token which are denoted as /T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX on the URL Slack gave you. Below is the simplified Python code snippet
import requests
class SlackBot:
def __init__(self, app_id, secret_id, token):
"""
Get an "incoming-webhook" URL from your slack account.
@see https://api.slack.com/incoming-webhooks
eg: https://hooks.slack.com/services/<app_id>/<secret_id>/<token>
"""
self._url = "https://hooks.slack.com/services/%s/%s/%s" % (
app_id,
secret_id,
token,
)
def slack_it(self, msg):
""" Send a message to a predefined slack channel."""
headers = {"content-type": "application/json"}
data = '{"text":"%s"}' % msg
resp = requests.post(self._url, data=data, headers=headers)
return "Message Sent" if resp.status_code == 200 else "Failed to send message"
slack = SlackBot(app_id, secret_id, token)
slack.slack_it("Hello")
Wrapping Up
Now you've got a simplified Slack message bot which can be expanded and used in various ways.
If you would like to dig even further, there's a 'bloated' Python package called slackclient which is a developer kit for interfacing with the Slack Web API and Real Time Messaging (RTM) API on Python 3.6 and above.

Top comments (0)