用python编写slack机器人(一)

slack简介

slack是一种流行的团队沟通工具,相似阿里的钉钉,但我感受比钉钉简洁不少。如今国外不少公司都已经采用slack做为团队沟通工具,代替老旧的skype等工具。咱们公司也在不久前从skype转向了slack,效率确实是获得了很大的提高(主要是skype实在太渣了)。做为一个极客血统的工具,slack天然开放了接口,容许开发者开发基于slack的slack bot。当我发现咱们隔壁team基本都有本身的slack bot来提高工做效率后,我决定也深刻研究一下slack,开发咱们team的slack bot。python

slack机器人的几种实现方式

slack官方文档提供了如下几种方式来实现调用slack接口:web

  • Web API
  • Events API
  • RTM API

官方文档地址:api.slack.com/json

其中Events API能够很方便的和现有的restful API结合起来,应该是最容易的实现方式。但咱们组的状况是没法使用web service,因此我选择了RTM API来实现slack botapi

python操做slack的库:slackclient

RTM(Real Time Messaging API)的原理是链接到slack官方的实时消息接口,而后接收全部的实时消息。要发送的消息也能够传递到TRTM接口。其实咱们要作的就是封装消息就能够了。python下已经有人开发了与slack RTM API通讯的库slackclient,咱们就不用重复去造轮子了,直接来使用就好。bash

slackclient简介

链接到RTM API:restful

slack_client.rtm_connect()
复制代码

获取slack实时消息:工具

slack_client.rtm_read()
复制代码

获取的消息是一个json,其中包含消息来源的频道,用户,消息内容等信息post

向slack RTM API发送消息:spa

slack_client.api_call("chat.postMessage", channel=channel, text=response, as_user=True)
复制代码

其中channel是要发送到的频道,text是要发送的文本。若是要发送给特定的user,那么channel=user id便可。rest

建立thread: 经过rtm_read()获取的消息中有一个字段ts,这就是消息的thread id。若是须要建立thread,只须要在发送时添加thread_ts字段,而后指定要建立thread的消息的thread id便可。

slack_client.api_call("chat.postMessage", channel=channel, text=response, as_user=True,thread_ts=thread_id)
复制代码

发送附件:

slack_client.api_call()添加attachments字段便可,attachments的格式能够参考官方文档:https://api.slack.com/methods/chat.postMessage/

复制代码
相关文章
相关标签/搜索