over 2 years ago

發想

將兩個API有差異的社群功能做一連結,使原服務的使用者能夠將訊息轉信至Slack,能夠增加Slack的使用者。

做法

  1. 定期檢查兩個服務的最新貼文。為了避免造成伺服器太大的負擔,設計了尖峰與離峰的機制,一段時間沒有收到新訊息就降低檢查的頻率。
  2. 如果有更新,將收到的資料重新編碼,往另一邊送。我的作法是開一個新的物件將兩者資料統一,兩邊來的資料都用此物件接收,根據原始資料的特徵(有哪些key)判斷是何處來的資料、決定該如何解析,最後可依需求匯出成不同形式的物件輸出給server端或是console。
  3. 避免發出去的訊息又被轉回來。很重要。在Slack端因為發出去的訊息都是bot-message,所以可以很簡單地在檢查時過濾掉,另一服務我則是用一個沒有用到的欄位來辨別。一般來說需要設計屬性標記這類轉送過的訊息。
  4. 控制轉送速率。Slack限制1秒只能發送至多一次請求(官網的說明是可以短時間內超過這個限制,不要太超過就好),所以需要修改request模組使其延遲送出請求。我的算法是每多一次在等待的請求就延遲1秒,並且與前一請求也保持至少1秒,但是沒很仔細驗證到底這樣做對不對。

整體而言做法不難,然而細節很瑣碎,除了兩者的API與資料結構差異很大需要仔細調整,不同類別訊息如何轉換也大大增加了code的量。未來可以對這個專案進行修改,向其他服務雙向同步。

Repo

server放在Heroku上。
Repo: https://github.com/andy0130tw/slack-lm-sync

← Wikiwand 自動切換至繁體中文 Windows下怎麼裝PyQt5? →
 
comments powered by Disqus