Gort — это платформа чат-ботов, разработанная с нуля для чатов.
Gort переносит возможности командной строки в то место, где вы сотрудничаете со своей командой: в окне чата. Поддержка открытых пакетов команд позволяет разработчикам реализовывать функциональные возможности на выбранном ими языке, а мощный контроль доступа означает, что вы можете уверенно сотрудничать даже при решении самых деликатных задач. Акцент на расширяемости и адаптивности означает, что вы можете быстро реагировать на непредвиденные ситуации, не теряя при этом прозрачности для вашей команды.
Официальную документацию можно найти здесь: The Gort Guide.
Первоначально Gort задумывался как повторная реализация Cog из Operable в Go, и, хотя он по-прежнему во многом вдохновлен Cog, Gort в основном пошел своим путем.
Во время нашего первоначального обсуждения дизайна мы обнаружили, что многие функции Cog, какими бы инновационными они ни были, по большей части остались неиспользованными, а кодовую базу стало трудно расширять и поддерживать. Кроме того, у его языка реализации — Elixir — было относительно мало опытных разработчиков. Решение, которое обсуждалось в течение многих месяцев в рабочей среде Cog Slack, заключалось в том, чтобы переписать Cog с нуля на Go, удалив часть менее используемых функций и уменьшив сложность процесса.
Это дало нам возможность рассмотреть и, возможно, переопределить, чем должен был быть Cog. Выбрать функции, которые имеют смысл, и отбросить те, которые не имеют смысла. Таким образом, Горта можно охарактеризовать скорее как «духовного преемника» Кога, чем как его точную повторную реализацию.
Философия дизайна Gort подчеркивает гибкость и безопасность, позволяя вам создавать команды на любом языке, который вы хотите, используя инструменты, с которыми вы уже знакомы, и можете жестко контролировать, кто и как может их использовать.
Более конкретно:
Каждый из них описан более подробно ниже.
Пользователи в основном взаимодействуют с Gort посредством команд , которые запускаются командным символом (по умолчанию !
), но в остальном концептуально идентичны командам, вводимым в командной строке.
Например, использование команды echo
может выглядеть следующим образом:
Как показано, выходные данные успешных команд передаются обратно Гортом.
Более подробную информацию о командах можно найти в Gort Guide:
Команды Gort создаются в виде образов контейнеров, а это значит, что вы можете создавать их на любом удобном вам языке.
Более того, поскольку ваш исполняемый файл получает все входные данные чата точно так же, как если бы они были набраны в командной строке, вы можете использовать любой интерпретатор командной строки, какой захотите. Команды можно реализовать даже в виде сценариев Bash или с использованием существующих команд, таких как curl
!
Более подробную информацию о написании команд можно найти в Gort Guide:
В 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 Guide:
В Gort пользователи могут быть однозначно сопоставлены с пользователями одного или нескольких провайдеров чата. Пользователи Gort могут быть членами одной или нескольких групп , которые, в свою очередь, могут иметь любое количество ролей , которые можно рассматривать как наборы предоставленных разрешений. Например, пользователь dave
может состоять в группе developers
. К этой группе может быть прикреплена роль с именем deployers
, которая содержит ряд разрешений, включая одно, называемое production_deploy
.
Более подробную информацию о разрешениях и правилах можно найти в Gort Guide:
Для каждой команды можно применить сложную систему правил, определяющую, кто может ее использовать. Они могут быть весьма детальными и даже способны принимать решения о разрешениях на основе значений определенных флагов или параметров.
Правила назначаются на уровне пакета и могут быть весьма сложными. Ниже у нас есть подмножество пакета под названием 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 Guide:
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 как первоклассных провайдеров чата.
У каждого поддерживаемого провайдера чата есть специальный раздел в конфигурации. Обратите внимание, что каждый из них представляет собой список, поэтому вы не только можете взаимодействовать как со Slack, так и с Discord с одного и того же контроллера Gort, но вы можете взаимодействовать с несколькими экземплярами каждого из них, если хотите!
После того, как вы создали пользователя-бота в соответствии с инструкциями, представленными в Gort Quick Start, администраторам остается только создать пользователя Gort (если вы еще этого не сделали) и сопоставить этого пользователя Gort с идентификатором пользователя провайдера чата, как показано. ниже:
$ 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!
Все командные действия записываются как события журнала высокой мощности (показаны ниже) и записываются в журнал аудита, который хранится в базе данных Горта.
Возьмем, к примеру, пользователя, выполняющего команду !bundle list
из Slack:
Это создаст вывод журнала, аналогичный следующему:
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:
Для получения дополнительной информации ознакомьтесь с кратким руководством по началу работы в The Gort Guide.
Двоичный файл gort
также служит CLI администрирования контроллера.
Клиент gort
использует файл конфигурации в формате YAML, который обычно находится в файле profile
в каталоге .gort
вашего домашнего каталога. Здесь вы можете хранить учетные данные подключения, чтобы позволить gort
взаимодействовать с REST API контроллера Gort.
Пример файла .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
). Любой из них, отмеченный как используемый по умолчанию (в разделе defaults
), будет использоваться gort
. Однако вы можете передать параметр --profile=$PROFILE
gort
чтобы использовать другой набор учетных данных.
Хотя вы можете добавлять профили в этот файл вручную, вы также можете использовать команду gort profile create
.
Исполняемый файл gort
содержит ряд команд и подкоманд. Помощь доступна для всех из них, если указать опцию --help
. Начните с gort --help
и продолжайте дальше.
Горт находится в состоянии активной тяжелой разработки. Даты достижения различных этапов указаны ниже. Количество и направленность нынешних и будущих этапов могут быть изменены.