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 正处于积极发展的状态。下面列出了实现各个里程碑的日期。当前和未来里程碑的数量和重点可能会发生变化。