slack是一種流行的團隊溝通工具,相似阿里的釘釘,但我感受比釘釘簡潔不少。如今國外不少公司都已經採用slack做爲團隊溝通工具,代替老舊的skype等工具。咱們公司也在不久前從skype轉向了slack,效率確實是獲得了很大的提高(主要是skype實在太渣了)。做爲一個極客血統的工具,slack天然開放了接口,容許開發者開發基於slack的slack bot。當我發現咱們隔壁team基本都有本身的slack bot來提高工做效率後,我決定也深刻研究一下slack,開發咱們team的slack bot。python
slack官方文檔提供瞭如下幾種方式來實現調用slack接口:web
官方文檔地址:api.slack.com/json
其中Events API能夠很方便的和現有的restful API結合起來,應該是最容易的實現方式。但咱們組的狀況是沒法使用web service,因此我選擇了RTM API來實現slack botapi
RTM(Real Time Messaging API)的原理是鏈接到slack官方的實時消息接口,而後接收全部的實時消息。要發送的消息也能夠傳遞到TRTM接口。其實咱們要作的就是封裝消息就能夠了。python下已經有人開發了與slack RTM API通訊的庫slackclient,咱們就不用重複去造輪子了,直接來使用就好。bash
鏈接到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/
複製代碼