2017-04-17 56 views
0

我正在嘗試使用機器人構建一個Slack應用程序來與用戶進行交互。Slack應用程序:如何管理與不同團隊的機器人連接?

我想將這個應用程序分佈在Slack應用程序目錄中。我必須爲每個團隊獲取oauth授權令牌,並將其存儲在我的數據庫中。

事情是我不確定我真的明白我該如何管理SlackClient與每個團隊的連接。讓我解釋一下我目前的情況。

  • 我可以授權我的應用通過使用Slack按鈕獲取授權令牌來訪問和發佈不同團隊中的內容。這爲每個啓用的團隊提供了訪問令牌和bot_token。
  • 要發佈一個團隊,我應該使用這些生成的令牌將SlackClient連接到這個特定的團隊嗎?所以是我的應用應該斷開/重新連接我的SlackClient每次它收到來自不同團隊的請求?或者SlackClient可以同時連接到多個團隊?

我跟着這個教程做的事情在工作第一,但它並沒有真正解釋如何管理不同的團隊方面,我認爲(https://github.com/slackapi/Slack-Python-Onboarding-Tutorial)。

謝謝

回答

2

不。連接由運行slackclient的Web服務器管理。所以你不必處理它們。你只需要對自己從Slack收到的每個事件請求進行個別反應。其他的都是由Web服務器管理(*)

這裏是如何工作的詳細:

你提到的機器人是用鬆弛的Events API與鬆弛的團隊進行溝通。在爲團隊安裝殭屍程序之後,無論何時發生您訂閱的事件,Slack都會向您的機器人發送事件請求。例如如果您訂閱了message events,那麼您的機器人將收到您的機器人受邀參加的所有頻道中發送的每封郵件的請求。

來自Slack的事件請求包含了團隊的團隊ID,因此您只需從他的數據庫中選擇相應的訪問令牌,並且其回覆(例如,使用所選令牌發送消息)將轉到正確的團隊。在消息事件的情況下,事件請求還將包含頻道和用戶ID,因此您的機器人可以將他的回覆發送到正確的頻道和用戶。

下面是從鬆弛的事件請求看起來像一個例子:

{ 
     "token": "z26uFbvR1xHJEdHE1OQiO6t8", 
     "team_id": "T061EG9RZ", 
     "api_app_id": "A0FFV41KK", 
     "event": { 
       "type": "reaction_added", 
       "user": "U061F1EUR", 
       "item": { 
         "type": "message", 
         "channel": "C061EG9SL", 
         "ts": "1464196127.000002" 
       }, 
       "reaction": "slightly_smiling_face" 
     }, 
     "event_ts": "1465244570.336841", 
     "type": "event_callback", 
     "authed_users": [ 
       "U061F7AUR" 
     ] 
} 

(*)從技術上講,Web服務器將產生你的機器人的多個實例來處理多個並行的(從官方文檔)事件請求。

+0

事情開始變得更加清晰。但是,在進行API調用時,我應該在什麼時候輸入相應的標記,例如發佈消息...:'self.client.api_call(「chat.postMessage」,channel = message_obj.channel,username = name ,icon_emoji = self.emoji,text = attachments)' – ypicard

相關問題