Gort 是專為聊天機器人設計的聊天機器人框架。
Gort 將命令列的強大功能帶到您與團隊協作的地方:您的聊天視窗。其開放式命令包支援允許開發人員以他們選擇的語言實現功能,而強大的存取控制意味著您可以自信地圍繞最敏感的任務進行協作。專注於可擴展性和適應性意味著您可以快速回應意外情況,而您的團隊不會失去可見性。
官方文檔可以在這裡找到:The Gort Guide。
Gort 最初被認為是 Operable 的 Cog 的 Go 重新實現,雖然它仍然深受 Cog 的啟發,但 Gort 在很大程度上走了自己的路。
在我們最初的設計討論中,我們發現 Cog 的許多功能,無論多麼創新,大部分都沒有被使用,程式碼庫變得難以擴展和維護。此外,其實現語言 Elixir 的熟練開發人員相對較少。該解決方案在 Cog Slack 工作區上討論了好幾個月,是用 Go 從頭開始重寫 Cog,刪除一些較少使用的功能並降低過程的複雜性。
這讓我們有機會考慮並可能重新定義 Cog 的含義。選擇有意義的特徵,丟棄那些沒有意義的特徵。這樣一來,Gort 就可以被描述為 Cog 的“精神繼承者”,而不是忠實的重新實現。
Gort 的設計理念強調靈活性和安全性,允許您使用您已經熟悉的工具以任何您想要的語言建立命令,並且可以嚴格控制誰可以使用它們以及如何使用它們。
更具體地說:
下面將更詳細地描述其中的每一個。
使用者主要透過命令與 Gort 交互,命令由命令字元(預設為!
)觸發,但在其他方面與在命令列上輸入的命令在概念上相同。
例如,使用echo
指令可能如下所示:
如圖所示,成功指令的輸出由 Gort 轉送回來。
有關命令的更多資訊可以在 Gort 指南中找到:
Gort 命令建構為容器映像,這表示您可以使用您熟悉的任何語言來建立它們。
更重要的是,因為您的可執行檔接收所有聊天輸入就像在命令列上鍵入一樣,所以您可以使用您想要的任何命令列解釋器。命令甚至可以作為 Bash 腳本來實現,或使用現有的命令,例如curl
!
有關編寫命令的更多資訊可以在 Gort 指南中找到:
在 Gort 中,一組一個或多個相關命令可以作為「命令包」安裝。
套件以 YAML 表示,指定每個命令使用哪個可執行檔案以及允許誰執行每個命令。
下面顯示了一個非常簡單的捆綁檔案。
---
gort_bundle_version : 1
name : echo
version : 0.0.1
image : ubuntu:20.04
author : Matt Titmus
homepage : https://guide.getgort.io
description : A test bundle.
long_description : |-
This is an example bundle. It lets you echo text using the "echo"
command that's built into Ubuntu 20.04.
permissions :
- can_echo
commands :
echo :
description : " Echos back anything sent to it. "
executable : [ "/bin/echo" ]
rules :
- must have echo:can_echo
這顯示了一個名為echo
的套件,它定義了一個命令(也稱為echo
)和一個名為can_echo
權限。安裝後,任何具有echo:can_echo
權限的使用者都可以在 Slack 中執行它。
有關捆綁包的更多資訊可以在 Gort 指南中找到:
在 Gort 中,使用者可以唯一地對應到一個或多個聊天提供者中的使用者。 Gort 使用者可以是一個或多個群組的成員,而這些群組可以擁有任意數量的角色,這些角色可以被視為授予權限的集合。例如,使用者dave
可能屬於名為developers
群組。該群組可能附加了一個名為deployers
角色,該角色包含許多權限,其中包括名為production_deploy
權限。
有關權限和規則的更多資訊可以在 Gort 指南中找到:
可以對每個命令套用複雜的規則系統,定義誰可以使用它。這些可以非常精細,甚至能夠根據特定標誌或參數的值做出權限決策。
規則是在捆綁包層級分配的,並且可能非常複雜。下面我們有一個名為deploy
的套件的子集。
name : deploy
version : 0.0.1
permissions :
- production_deploy
commands :
deploy :
description : " Deploys to the chosen environment. "
executable : [ "/bin/deploy" ]
rules :
- with arg[0] == "production" must have deploy:production_deploy
如您所見,上面的範例包含一個命令,也稱為deploy
。它的一條規則斷言任何傳遞「生產」作為參數的使用者都必須具有production_deploy
權限(來自deploy
包)。
有關權限和規則的更多資訊可以在 Gort 指南中找到:
Gort 提供了一個複雜的範本系統,可讓您控制發送給使用者的任何資訊的表示,包括系統訊息以及命令輸出和錯誤訊息。
此外,模板可以在配置中的應用程式層級定義,也可以在捆綁包甚至單一捆綁包配置中的命令層級定義。
Gort 範本使用 Go 的範本語法以與聊天無關的方式格式化輸出。例如,一個非常簡單的命令範本可能如下所示:
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
此範本將命令的回應 ( .Response.Out
) 作為等寬文字發出,可能如下所示:
下面顯示了一個稍微複雜的模板,這是一個命令錯誤模板(實際上是預設模板)。
{{ header | color "#FF0000" | title .Response.Title }}
{{ text }}The pipeline failed planning the invocation:{{ endtext }}
{{ text | monospace true }}{{ .Request.Bundle.Name }}:{{ .Request.Command.Name }} {{ .Request.Parameters }}{{ endtext }}
{{ text }}The specific error was:{{ endtext }}
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
該文本包括帶有顏色和標題的標題,以及一些交替的等寬文字和標準文字。在這種情況下,這將格式化命令錯誤,如下所示:
您會注意到對.Response
的一些引用:這些是對響應信封的引用,響應信封是一種可以從任何模板訪問的數據結構,該模板提供圍繞一個命令請求、執行和響應的所有數據和元數據。
有關審核日誌記錄的更多資訊可以在 Gort 指南中找到:
Gort 支援 Slack 和 Discord 作為一流的聊天提供者。
每個受支援的聊天提供者在配置中都有一個專用部分。請注意,每個都是一個列表,因此您不僅可以從同一個 Gort 控制器與 Slack 和 Discord 進行交互,而且如果您願意,還可以與每個實例的多個實例進行交互!
一旦您根據 Gort 快速入門中提供的說明建立了機器人用戶,管理員只需建立一個 Gort 用戶(如果您還沒有),並將該 Gort 用戶對應到聊天提供者用戶 ID,如圖所示以下:
$ gort user create mtitmus --email [email protected] --name " Matt Titmus " --password REDACTED
User " mtitmus " created.
$ gort user list
USER NAME FULL NAME EMAIL
admin Gort Administrator gort@localhost
mtitmus Matt Titmus [email protected]
$ gort user map mtitmus Slack U012P123456
User " mtitmus " mapped to " Slack:U012P123456 " .
$ gort user info mtitmus
Name mtitmus
Full Name Matt Titmus
Email [email protected]
Groups < undefined >
ADAPTER ID MAPPING
Slack U012P123456
從那時起,映射的聊天用戶輸入的任何命令都與該 Gort 用戶相關聯!
所有命令活動都以高基數日誌事件發出(如下所示),並記錄在 Gort 資料庫中維護的審核日誌中。
以使用者從 Slack 執行!bundle list
指令為例:
這將產生類似於以下內容的日誌輸出:
INFO [49594] Triggering command adapter.name=Gort bundle.default=false bundle.name=gort bundle.version=0.0.1
command.executable="[/bin/gort bundle]" command.name=bundle
command.params=list gort.user.name=admin provider.channel.id=C1238A01234
provider.channel.name=gort-dev [email protected]
provider.user.id=U012P123456 trace.id=476b3089c8ce0d38a2915a3b58fde032
正如您所看到的,這次豐富的活動包括:
請注意,此範例使用“人類可讀”格式以提高可讀性。在生產模式下,Gort 產生 JSON 編碼的日誌事件。
有關審核日誌記錄的更多資訊可以在 Gort 指南中找到:
有關更多信息,請參閱 Gort 指南中的快速入門指南。
gort
二進位檔案也用作控制器管理 CLI。
gort
客戶端使用 YAML 格式的設定文件,通常位於主目錄中.gort
目錄中的profile
檔中。您可以在此處儲存連接憑證,以允許gort
與 Gort 控制器的 REST API 進行互動。
範例.gort/profile
檔案可能如下所示:
defaults :
profile : gort
gort :
url : https://gort.mycompany.com:4000
password : " seekrit#password "
user : me
preprod :
url : https://gort.preprod.mycompany.com:4000
password : " anotherseekrit#password "
user : me
註解以#
字元開頭;如果您的密碼包含#
,請將整個密碼用引號引起來,如上所示。
您可以在此文件中儲存多個“設定檔”,每個設定檔具有不同的名稱(這裡有gort
和preprod
)。 gort
將使用被標記為預設值(在defaults
部分中)的任何一個。但是,您可以將--profile=$PROFILE
選項傳遞給gort
以使用一組不同的憑證。
雖然您可以手動將設定檔新增至此文件,但您也可以使用gort profile create
指令來提供協助。
gort
可執行檔包含許多指令和子指令。透過傳遞--help
選項,所有這些都可以獲得幫助。從gort --help
開始,然後從那裡開始。
Gort 正處於積極發展的狀態。下面列出了實現各個里程碑的日期。當前和未來里程碑的數量和重點可能會發生變化。