Gort เป็นเฟรมเวิร์กแชทบอทที่ออกแบบตั้งแต่ต้นจนจบสำหรับแชทท็อป
Gort นำพลังของบรรทัดคำสั่งมาสู่จุดที่คุณทำงานร่วมกับทีม: หน้าต่างแชทของคุณ การสนับสนุนชุดคำสั่งปลายเปิดช่วยให้นักพัฒนาสามารถใช้ฟังก์ชันต่างๆ ในภาษาที่พวกเขาเลือกได้ ในขณะที่การควบคุมการเข้าถึงที่มีประสิทธิภาพหมายความว่าคุณสามารถทำงานร่วมกันได้แม้กระทั่งงานที่ละเอียดอ่อนที่สุดด้วยความมั่นใจ การมุ่งเน้นไปที่ความสามารถในการขยายและการปรับตัวหมายความว่าคุณสามารถตอบสนองต่อสิ่งที่ไม่คาดคิดได้อย่างรวดเร็ว โดยที่ทีมของคุณไม่สูญเสียการมองเห็น
สามารถดูเอกสารอย่างเป็นทางการได้ที่นี่: The Gort Guide
ในตอนแรก Gort คิดว่าเป็นการการนำ Go ไปใช้ใหม่ของ Operable's Cog และในขณะที่มันยังคงได้รับแรงบันดาลใจอย่างมากจาก Cog แต่ Gort ก็มีแนวทางของตัวเองเป็นส่วนใหญ่
ในระหว่างการอภิปรายเกี่ยวกับการออกแบบครั้งแรก เราพบว่าคุณลักษณะหลายอย่างของ Cog แม้ว่าจะเป็นนวัตกรรมใหม่ก็ตาม ส่วนใหญ่ไม่ได้ใช้งาน และโค้ดเบสก็กลายเป็นเรื่องยากที่จะขยายและบำรุงรักษา นอกจากนี้ ภาษาในการใช้งาน Elixir ยังมีนักพัฒนาที่เชี่ยวชาญค่อนข้างน้อย วิธีแก้ปัญหาซึ่งมีการพูดคุยกันเป็นเวลาหลายเดือนในพื้นที่ทำงาน Cog Slack คือการเขียน Cog ใหม่ตั้งแต่ต้นใน Go โดยลบฟังก์ชันการทำงานบางส่วนที่ใช้น้อยออก และลดความซับซ้อนในกระบวนการ
สิ่งนี้ทำให้เรามีโอกาสพิจารณาและอาจกำหนดนิยามใหม่ของ Cog ได้ว่าหมายถึงอะไร เพื่อเลือกคุณสมบัติที่เหมาะสม และละทิ้งคุณสมบัติที่ไม่สมเหตุสมผล ด้วยวิธีนี้ Gort สามารถอธิบายได้ว่าเป็น "ผู้สืบทอดทางจิตวิญญาณ" ของ Cog มากกว่าการนำกลับมาใช้ใหม่อย่างซื่อสัตย์
ปรัชญาการออกแบบของ Gort เน้นความยืดหยุ่นและความปลอดภัยโดยอนุญาตให้คุณสร้างคำสั่งในภาษาใดก็ได้ที่คุณต้องการ โดยใช้เครื่องมือที่คุณคุ้นเคยอยู่แล้ว และสามารถควบคุมได้อย่างเข้มงวดว่าใครสามารถใช้คำสั่งเหล่านี้และอย่างไร
โดยเฉพาะอย่างยิ่ง:
แต่ละรายการมีการอธิบายรายละเอียดเพิ่มเติมด้านล่าง
ผู้ใช้โต้ตอบกับ Gort เป็นหลักผ่าน คำสั่ง ซึ่งถูกทริกเกอร์โดยอักขระคำสั่ง ( !
โดยค่าเริ่มต้น) แต่อย่างอื่นมีแนวคิดเหมือนกันกับคำสั่งที่ป้อนบนบรรทัดคำสั่ง
ตัวอย่างเช่น การใช้คำสั่ง echo
อาจมีลักษณะดังนี้:
ดังที่แสดงไว้ เอาต์พุตจากคำสั่งที่สำเร็จจะถูกส่งกลับโดย Gort
ข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งสามารถพบได้ใน 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 Guide:
Gort รองรับทั้ง Slack และ Discord ในฐานะผู้ให้บริการแชทชั้นหนึ่ง
ผู้ให้บริการแชทแต่ละรายที่รองรับมีส่วนเฉพาะในการกำหนดค่า โปรดทราบว่าแต่ละรายการเป็นรายการ ดังนั้นไม่เพียงแต่คุณสามารถโต้ตอบกับทั้ง Slack และ Discord จากคอนโทรลเลอร์ Gort เดียวกันเท่านั้น แต่คุณยังสามารถโต้ตอบกับแต่ละอินสแตนซ์ได้หลายอินสแตนซ์หากต้องการ!
เมื่อคุณสร้างผู้ใช้บอทตามคำแนะนำใน Gort Quick Start แล้ว ผู้ดูแลระบบจำเป็นต้องสร้างผู้ใช้ 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 นั้น!
กิจกรรมคำสั่งทั้งหมดจะถูกปล่อยออกมาเป็นเหตุการณ์บันทึกที่มี cardinality สูง (แสดงด้านล่าง) และบันทึกไว้ในบันทึกการตรวจสอบที่เก็บรักษาไว้ในฐานข้อมูลของ 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 Guide:
สำหรับข้อมูลเพิ่มเติม โปรดดูที่คู่มือเริ่มต้นใช้งานฉบับย่อใน The Gort Guide
ไบนารี gort
ยังทำหน้าที่เป็น CLI การดูแลระบบคอนโทรลเลอร์อีกด้วย
ไคลเอนต์ gort
ใช้ไฟล์คอนฟิกูเรชันในรูปแบบ YAML ซึ่งปกติจะอยู่ในไฟล์ profile
ในไดเร็กทอรี .gort
ในโฮมไดเร็กตอรี่ของคุณ ที่นี่คุณสามารถจัดเก็บข้อมูลรับรองการเชื่อมต่อเพื่อให้ gort
โต้ตอบกับ REST API ของ Gort's Controller ได้
ตัวอย่างไฟล์ .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
และไปจากที่นั่น
Gort อยู่ในสถานะของการพัฒนาที่หนักหน่วง วันที่ที่บรรลุเหตุการณ์สำคัญต่างๆ มีดังต่อไปนี้ จำนวนและจุดเน้นของเหตุการณ์สำคัญในปัจจุบันและอนาคตอาจมีการเปลี่ยนแปลง