基於Perfect用Swift語言編寫Slack聊天機器人

來源:互聯網
上載者:User

標籤:att   port   步驟   exec   start   led   lines   ted   href   

基於Perfect用Swift語言編寫Slack聊天機器人

本項目是專門為Slack聊天機器人定製的模板伺服器。
完整的原始碼下載在Github https://github.com/PerfectServers/SlackBot
在本項目模板中,一個聊天機器人可以加入授權頻道,讀取頻道內所有使用者發送的“曲奇”並記錄在案,而且可以直接回覆使用者的有關曲奇餅乾的問題。

預備知識

在您決定編譯、測試或者部署您自己的基於Perfect軟體架構體系的聊天機器人之前,以下基礎知識??不可或缺??:

  • Perfect 基礎
  • Slack API 線上函數介面參考
  • 提前準備好具有有效網域名稱(FQDN)並由認證機構頒發認證的伺服器
  • Perfect 軟體助手 可以用來編譯和測試。這是可選的,但是如果您沒有安裝助手,則建議您自行在本機電腦上準備一個Ubuntu 16.04 LTS 虛擬伺服器或者Docker鏡像並自行安裝好Swift 3.0以上版本。
快速上手第一步:複製本項目

請使用下列命令複製本項目:

$ git clone https://github.com/PerfectServers/SlackBot.git

本工程根目錄之下有一個 config.json.sample 檔案,所有內容都是必須填寫的配置項:

{  "token": "xoxb-您的Slack應用程式通行證-TOKENXXXXXXXXXXXXXXXXX",  "bot" : "聊天機器人名稱",  "bot_id": "聊天機器人編號",  "client_id": "XXXXXXXX.YYYYYYYYYY您的應用程式編號",  "client_secret": "應用程式密碼",  "verify_token": "反向驗證通行證,即Slack在訪問您的伺服器是驗證一下究竟是不是Slack發來的請求",  "oauth_uri": "/v1/oauth介面函數地址",  "message_uri": "/v1/msg介面函數地址",  "confirm_uri": "/v1/confirm介面函數地址",  "serverName": "yourhost.yourcompany.domain您的伺服器完整網域名稱",  "cerPath": "/opt/certificates/yourcertificate.crt您的自簽認證和第三方認證認證的合并檔案",  "keyPath": "/opt/certificates/yourcertificate.key您的認證私人鑰匙檔案",  "dbPath": "/var/opt/yoursqlite.db資料庫檔案",  "runAs": "yourUserName您的伺服器普通使用者名稱",  "port": 443,  "channels": {    "channel1_id": "channel1_name需要監聽的頻道",    "channel2_id": "channel2_name需要監聽的頻道"  }}

上述檔案的所有詳細編寫說明請參考本文後續內容。

第二步:到您的Slack團隊上自行註冊一個應用程式
  • 在您的 Slack API 網頁上,選擇 “Your Apps”建立新的應用程式
  • 聊天機器人使用者:為您的機器人起名字並應用到配置:

  • 增加許可權。在本案例中,許可權至少包括”bot user”(聊天機器人)、”channels:history”(公用頻道曆史)、”channels.read”(公用頻道可讀)、”channels.write”(公用頻道可寫)和 “chart:write:bot” (機器人可以發送聊天資訊)。

  • 訂閱事件:本案例需要至少以下事件在Slack應用程式控制台中進行訂閱操作:(1) message.channels(監聽頻道訊息); (2) message.im(實現即時通訊); (3) reaction_added(增加表情); (4) reaction_removed(刪除表情)。

  • 通過佈建要求URL啟用上述事件訂閱。比如您的聊天機器人所在主機網域名稱為myhost.com,而且介面程式進入點 message_uri 配置為 /v1/msg,那麼請將該url設定為https://myhost.com/v1/msg。??注意??目前Slack僅支援HTTPS即443連接埠。

  • 將您的應用程式安裝到您的團隊中去。

如果所有工作完成,請將上述配置資訊逐一輸入到您的config.json檔案,其中 token指的是 Bot User OAuth Access Token(聊天機器人授權訪問通行證)

第三步:擷取聊天機器人編號(概念有難度,操作須謹慎)

Slack 聊天機器人需要在編程時使用自己的編號(不是螢幕上顯示的名稱)。要獲得該編號需要一定技巧,請仔細閱讀以下說明:

  • 開啟瀏覽器導航至 users.list Slack API page

  • 為您的應用程式選擇適合的通行證並點擊線上測試 Test Method

  • 如果成功,則點擊開啟原始響應連結(open raw response),可以看到一個JSON資料結構
  • 在JSON字串中搜尋您的聊天機器人名稱
  • 將找到的聊天機器人編號拷貝到前文配置中
第三步:選擇待監控頻道(概念有難度,操作須謹慎)

該操作時可選項,但是出於安全形度來說,還是推薦完成的。

雖然相信許多聊天機器人開發商都希望其機器人產品能夠加入的頻道或者私聊群越多越好,但是您可能希望將聊天機器人縣治在某幾個特定的頻道或者群聊中。

為了實現這個目標,請採用下列操作:

  • 開啟瀏覽器並導航至 channels.list Slack API page
  • 選擇團隊開發通行證並點擊測試方法 Test Method

  • 如果查詢成功,請點擊原始響應資料 (open raw response) 查看返回的JSON資料。

  • 選擇需要監控的頻道並記錄待監控頻道的名稱和代碼(id / name),並將其填寫到您的config.json 檔案中。

注意 如果您希望您的聊天機器人能夠訪問所有頻道,則直接將下列代碼粘貼到您的來源程式內即可:

Curl("https://slack.com/api/channels.list?token=\(token)") { ret in  do {    guard let b = ret,      let info = try b.jsonDecode() as? [String:Any],      let ok = info["ok"] as? Bool,      let channels = info["channels"] as? [Any] else {        Print("channel parse::ok(fault)")        return nil    }//end guard    guard ok, channels.count > 0 else {      Print("channel parse::ok(\(ok))")      return nil    }//end    channels.forEach { channel in      let ch = channel as? [String: Any] ?? [:]      guard let id = ch["id"] as? String,      let name = ch["name"] as? String else {        return      }//end guard      // CAUTION: Append all channels into the cache      global.channels[id] = name    }//next  }catch(let err) {    Print("parseChannels::\(err)")    return nil  }// end do  }//end curl
第五步:編譯和部署聊天機器人伺服器

在此推薦使用 Perfect Assistant 軟體助手完成所有編譯和部署的自動化操作。

但是,如果您使用的不是亞馬遜AWS彈性計算EC2或者Google雲,那麼您需要詳細瞭解整個安裝部署的詳細步驟。工程根目錄下有一個安裝指令碼可供參考install.sh.sample

  • (1) 在您本地的 Ubuntu 16.04,比如虛擬機器或者Docker上,編譯伺服器,命令列為$ swift build -c release 編譯為正式發行版本
  • (2) 用scp命令將二進位可執行檔發行檔案上傳到伺服器(可以和Swift運行函數庫一起打包上傳)
  • (3) 將配置好的 config.serviceconfig.json 檔案上傳到伺服器。其中 config.service模板檔案可參考本工程根目錄下的範例。
  • (4) 將您所有的認證檔案放置到伺服器安全、合理的路徑下,並為運行提供足夠但安全的許可權。
  • (5) 在伺服器上修改config.json檔案並保證其中所有的變數,特別時各個路徑,比如憑證路徑和資料庫都完全符合實際部署。
  • (6) 同樣如有必要,在伺服器上也修改 config.service以匹配所有路徑。
  • (7) 使用命令 $ sudo systemctl enable config.service 將您的新應用程式註冊為Linux系統服務,這樣伺服器在重啟後就能自動以管理員方式啟動。
  • (8) 啟動伺服器,您可以選擇重啟整個伺服器,或者運行 $ sudo systemctl restart slackbot命令列單獨啟動目標服務程式(假設編譯後的服務命令列為 slackbot

如果沒有Perfect軟體助手,則上述所有步驟一樣是有一些難度的,因此操作時需要特別小心。請仔細閱讀下列樣本檔案範例:

Config.service 服務註冊檔案參考範例
[Unit]Description=您的聊天機器人[Service]Type=simpleWorkingDirectory=/var/optExecStart=/path/to/yourApp/PerfectTemplateRestart=alwaysPIDFile=/var/run/yourSlackBotApp.pidEnvironment="LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/usr/local/lib/swift"[Install]WantedBy=multi-user.target
安裝指令碼範例
# 安裝部署指令碼範例# 假設您的伺服器應用程式名為`slackbot`# 請保證您的伺服器上已經提前安裝了Swift運行環境,比如# LD_LIBRARY_PATH="/usr/lib/yourSwiftInstalationPath"# 變數定義如下:RPO=slackbotTGZ=/tmp/$RPO.tgzSVC=$RPO.serviceCFG=$RPO.jsonAPP=/tmp/app.tgz[email protected]LOCALVM=your.local.ubuntu.virtual.machine# 首先把原始碼打包並傳輸到虛擬機器上tar czvf $TGZ Package.swift Sourcesscp $TGZ $LOCALVM:/tmp# 通過虛擬機器進行編譯ssh $LOCALVM "cd /tmp;rm -rf $RPO;mkdir $RPO; cd $RPO; tar xzvf $TGZ;swift build -c release;cd .build/release;tar czvf $APP PerfectTemplate *.so"# 然後再從虛擬機器上取回編譯好的二進位檔案並上傳至生產伺服器scp $LOCALVM:$APP $APPscp $APP $SERVER:$APPscp $SVC $SERVER:/tmp/$SVCscp $CFG $SERVER:/tmp/$CFG# 在生產伺服器上執行安裝並將新編應用程式註冊為Linux作業系統服務ssh $SERVER "cd /opt;sudo -S rm -rf $RPO;sudo -S mkdir $RPO;cd $RPO;sudo -S tar xzvf $APP;sudo -S cp /tmp/$SVC .;sudo -S cp /tmp/$CFG .;sudo -S systemctl disable $RPO;sudo -S systemctl enable /opt/$RPO/$SVC;sudo -S systemctl start $RPO;sudo -S systemctl status $RPO"
第六步:返回到Slack應用程式控制台

一旦重啟伺服器後,請回到Slack應用程式的控制台網頁確認上述伺服器並啟用所有功能,特別時OAuth配置認證頁面:

  • 驗證事件訂閱請求介面Request URL
  • 現在開啟Slack應用,進入您的目標頻道,並將機器人邀請到頻道。??注意??選擇增加一個測試頻道專門用於調試聊天機器人是一個好主意
  • 測試聊天機器人,可以直接對它發起會話聊天
更多資訊

關於本項目更多內容,請參考perfect.org.

掃一掃 Perfect 官網號

基於Perfect用Swift語言編寫Slack聊天機器人

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.