slack简介
slack是一种流行的团队沟通工具,类似阿里的钉钉,但我感觉比钉钉简洁很多。现在国外很多公司都已经采用slack作为团队沟通工具,代替老旧的skype等工具。我们公司也在不久前从skype转向了slack,效率确实是得到了很大的提升(主要是skype实在太渣了)。作为一个极客血统的工具,slack自然开放了接口,允许开发者开发基于slack的slack bot。当我发现我们隔壁team基本都有自己的slack bot来提升工作效率后,我决定也深入研究一下slack,开发我们team的slack bot。
slack机器人的几种实现方式
slack官方文档提供了以下几种方式来实现调用slack接口:
- Web API
- Events API
- RTM API
官方文档地址:api.slack.com/
其中Events API可以很方便的和现有的restful API结合起来,应该是最容易的实现方式。但我们组的情况是无法使用web service,所以我选择了RTM API来实现slack bot
python操作slack的库:slackclient
RTM(Real Time Messaging API)的原理是连接到slack官方的实时消息接口,然后接收所有的实时消息。要发送的消息也可以传递到TRTM接口。其实我们要做的就是封装消息就可以了。python下已经有人开发了与slack RTM API通信的库slackclient,我们就不用重复去造轮子了,直接来使用就好。
slackclient简介
连接到RTM API:
slack_client.rtm_connect()
获取slack实时消息:
slack_client.rtm_read()
获取的消息是一个json,其中包含消息来源的频道,用户,消息内容等信息
向slack RTM API发送消息:
slack_client.api_call("chat.postMessage", channel=channel, text=response, as_user=True)
其中channel是要发送到的频道,text是要发送的文本。如果要发送给特定的user,那么channel=user id即可。
创建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/