Send Slack messages with Python

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 Name and 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

<span>import</span> <span>requests</span>
<span>class</span> <span>SlackBot</span><span>:</span>
<span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>app_id</span><span>,</span> <span>secret_id</span><span>,</span> <span>token</span><span>):</span>
<span>"""</span><span> Get an </span><span>"</span><span>incoming-webhook</span><span>"</span><span> URL from your slack account. @see https://api.slack.com/incoming-webhooks eg: https://hooks.slack.com/services/<app_id>/<secret_id>/<token> </span><span>"""</span>
<span>self</span><span>.</span><span>_url</span> <span>=</span> <span>"</span><span>https://hooks.slack.com/services/%s/%s/%s</span><span>"</span> <span>%</span> <span>(</span>
<span>app_id</span><span>,</span>
<span>secret_id</span><span>,</span>
<span>token</span><span>,</span>
<span>)</span>
<span>def</span> <span>slack_it</span><span>(</span><span>self</span><span>,</span> <span>msg</span><span>):</span>
<span>"""</span><span> Send a message to a predefined slack channel.</span><span>"""</span>
<span>headers</span> <span>=</span> <span>{</span><span>"</span><span>content-type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>}</span>
<span>data</span> <span>=</span> <span>'</span><span>{</span><span>"</span><span>text</span><span>"</span><span>:</span><span>"</span><span>%s</span><span>"</span><span>}</span><span>'</span> <span>%</span> <span>msg</span>
<span>resp</span> <span>=</span> <span>requests</span><span>.</span><span>post</span><span>(</span><span>self</span><span>.</span><span>_url</span><span>,</span> <span>data</span><span>=</span><span>data</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>)</span>
<span>return</span> <span>"</span><span>Message Sent</span><span>"</span> <span>if</span> <span>resp</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span> <span>else</span> <span>"</span><span>Failed to send message</span><span>"</span>
<span>slack</span> <span>=</span> <span>SlackBot</span><span>(</span><span>app_id</span><span>,</span> <span>secret_id</span><span>,</span> <span>token</span><span>)</span>
<span>slack</span><span>.</span><span>slack_it</span><span>(</span><span>"</span><span>Hello</span><span>"</span><span>)</span>
<span>import</span> <span>requests</span>


<span>class</span> <span>SlackBot</span><span>:</span>
    <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>app_id</span><span>,</span> <span>secret_id</span><span>,</span> <span>token</span><span>):</span>
        <span>"""</span><span> Get an </span><span>"</span><span>incoming-webhook</span><span>"</span><span> URL from your slack account. @see https://api.slack.com/incoming-webhooks eg: https://hooks.slack.com/services/<app_id>/<secret_id>/<token> </span><span>"""</span>
        <span>self</span><span>.</span><span>_url</span> <span>=</span> <span>"</span><span>https://hooks.slack.com/services/%s/%s/%s</span><span>"</span> <span>%</span> <span>(</span>
            <span>app_id</span><span>,</span>
            <span>secret_id</span><span>,</span>
            <span>token</span><span>,</span>
        <span>)</span>

    <span>def</span> <span>slack_it</span><span>(</span><span>self</span><span>,</span> <span>msg</span><span>):</span>
        <span>"""</span><span> Send a message to a predefined slack channel.</span><span>"""</span>
        <span>headers</span> <span>=</span> <span>{</span><span>"</span><span>content-type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>}</span>
        <span>data</span> <span>=</span> <span>'</span><span>{</span><span>"</span><span>text</span><span>"</span><span>:</span><span>"</span><span>%s</span><span>"</span><span>}</span><span>'</span> <span>%</span> <span>msg</span>
        <span>resp</span> <span>=</span> <span>requests</span><span>.</span><span>post</span><span>(</span><span>self</span><span>.</span><span>_url</span><span>,</span> <span>data</span><span>=</span><span>data</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>)</span>
        <span>return</span> <span>"</span><span>Message Sent</span><span>"</span> <span>if</span> <span>resp</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span> <span>else</span> <span>"</span><span>Failed to send message</span><span>"</span>


<span>slack</span> <span>=</span> <span>SlackBot</span><span>(</span><span>app_id</span><span>,</span> <span>secret_id</span><span>,</span> <span>token</span><span>)</span>
<span>slack</span><span>.</span><span>slack_it</span><span>(</span><span>"</span><span>Hello</span><span>"</span><span>)</span>
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")

Enter fullscreen mode Exit fullscreen mode

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.

原文链接:Send Slack messages with Python

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
So what if we fall down? At least we are still young.
摔倒了又怎样,至少我们还年轻
评论 抢沙发

请登录后发表评论

    暂无评论内容