กรอบงาน MVC สำหรับแอปแชทที่สร้างขึ้นบนแพลตฟอร์มที่ออกแบบมาสำหรับระบบการสื่อสาร
นี่เป็นงานที่อยู่ระหว่างดำเนินการและยังไม่พร้อมสำหรับสิ่งใดที่เกิดขึ้นจริง
สร้างแอปพลิเคชันแชทบอทสำหรับแพลตฟอร์มแอปพลิเคชันแชทบอทหลัก ๆ โดยใช้รูปแบบสถาปัตยกรรม Model-View-Controller ที่คุ้นเคยซึ่งนักพัฒนาใช้มานานหลายทศวรรษ
Juvet เป็นเฟรมเวิร์กแอปพลิเคชันที่รวมทุกสิ่งที่คุณต้องการเพื่อสร้างแอปพลิเคชันแชทสำหรับแพลตฟอร์มการส่งข้อความหลักทั้งหมด รวมถึง:
RTM หย่อน
API เหตุการณ์ Slack
Slack Webhook ที่เข้ามา (เร็วๆ นี้)
อเมซอน อเล็กซ่า
เฟซบุ๊กแมสเซนเจอร์
SMS ทวิลลิโอ
กำหนดเอง...
Juvet นำเสนอคุณสมบัติทั้งหมดที่คุณต้องการเพื่อสร้างแอปพลิเคชันแชทที่ปรับขนาดได้และบำรุงรักษาได้ ซึ่งรวมถึง
ตัวห่อ API
การจัดคิวข้อความ
มิดเดิลแวร์และปลั๊กอิน
สนับสนุนการสนทนา
การสนับสนุน NLP
มากขึ้นที่จะมา...
ROADMAP อธิบายคุณสมบัติหลักที่กำลังจะมีขึ้นในแต่ละรุ่น
พื้นที่เก็บข้อมูลนี้มีให้สำหรับการสนับสนุนผ่านผู้สนับสนุน GitHub ที่ https://github.com/sponsors/jwright
หากคุณหรือบริษัทของคุณจะได้รับประโยชน์จากเฟรมเวิร์กแอปพลิเคชันแชทที่ได้รับการดูแลอย่างดีและใช้งานง่าย โปรดพิจารณาการสนับสนุน การสนับสนุนของคุณจะช่วยในการพัฒนานี้
ขอบคุณสำหรับการสนับสนุน! -
เพิ่มการอ้างอิง Juvet ลงในไฟล์ mix.exs
ของคุณ
# mix.exs def deps do [{:juvet, "~> 0.0.1"}] end
ติดตั้งการพึ่งพา
mix deps.get
ตรวจสอบให้แน่ใจว่า Juvet เริ่มต้นก่อนการสมัครของคุณ
# mix.exs def application do [extra_applications: [:juvet]] end
เมื่อ Juvet เริ่มต้น แผนผังกระบวนการควรมีลักษณะดังต่อไปนี้
- - ViewStateRegistry | - ViewStateManager | - - - - - - - ViewStateSupervisor | - - - - - - - - ยูเวต |----| BotFactory |-----| ผู้กำกับ | - (ใบสมัคร) | - - - - - - - - - - - - - หัวหน้างานโรงงาน | - - - - - - - - - - - - - บอทซุปเปอร์ไวเซอร์ | - บอทซุปเปอร์ไวเซอร์ | - - - - - - - - - - - บอท | - บอท | -
Juvet - แอปพลิเคชันที่เริ่มต้นหัวหน้า Juvet.BotFactory
BotFactory - หัวหน้างานที่เริ่มกระบวนการ Juvet.Superintendent
และ Juvet.ViewStateManager
ViewStateManager - หัวหน้างานที่สามารถจัดการการจัดเก็บข้อมูลใดๆ โดยพลการสำหรับชุดคีย์ที่กำหนด เริ่มต้น Juvet.ViewStateRegistry
และหัวหน้างานแบบไดนามิกสำหรับกระบวนการ Juvet.ViewState
ViewStateRegistry - เซิร์ฟเวอร์ที่ทำหน้าที่เป็นบริการรีจิสทรีในการแปลงคีย์ (เป็น Tuples) เป็น pid เพื่อระบุกระบวนการ Juvet.ViewState
ผู้กำกับ - สมองของปฏิบัติการ กระบวนการตรวจสอบความถูกต้องของการกำหนดค่า และหากมีการกำหนดค่าอย่างถูกต้อง กระบวนการจะเริ่มกระบวนการ Juvet.Endpoint
และ Juvet.FactorySupervisor
FactorySupervisor - หัวหน้างานเหนือกระบวนการ Juvet.BotSupervisor
ทั้งหมด
BotSupervisor - หัวหน้างานในกระบวนการ Juvet.Bot
หนึ่งกระบวนการ รวมถึงกระบวนการสนับสนุนเพิ่มเติมใดๆ (เช่น Juvet.Receivers.SlackRTMReceiver
)
บอท - รับข้อความจากผู้ให้บริการแชท มีหน้าที่รับผิดชอบในการประมวลผลข้อความและสร้างการตอบกลับ
คุณต้องบอก Juvet ว่าควรสร้างโมดูลบอทใดเมื่อมีการเชื่อมต่อใหม่ คุณสามารถทำได้ด้วยการกำหนดค่าต่อไปนี้
# config/config.exs config :juvet, bot: MyBot, slack: [ actions_endpoint: "/slack/actions", commands_endpoint: "/slack/commands", events_endpoint: "/slack/events", options_load_endpoint: "/slack/options" ]
แอปพลิเคชันไคลเอนต์ที่ใช้ Juvet สามารถใช้เราเตอร์จากแอปพลิเคชันไคลเอนต์ของคุณได้ คุณเพียงแค่ต้องติดตั้ง Juvet.Plug
เราเตอร์สามารถติดตั้งภายในตำแหน่งข้อมูล Phoenix ได้โดยเพียงแค่เพิ่ม:
# lib/my_phoenix_app_web/endpoint.ex defmodule MyPhoenixAppWeb.Endpoint do use Phoenix.Endpoint, otp_app: :my_phoenix_app # ... plug Juvet.Plug end
ปัจจุบัน Juvet ไม่มีฟังก์ชัน Oauth ใดๆ ซึ่งจะเปิดตัวเร็วๆ นี้ ดังนั้นขึ้นอยู่กับแอปพลิเคชันของคุณที่จะเชื่อมต่อแอปของคุณกับ Slack ผ่าน OAuth หากคุณใช้ ueberauth ueberauth_slack เป็นตัวเลือกที่ดีในการให้ผู้ใช้ของคุณได้รับอนุญาตจาก Slack
เมื่อคุณได้รับโทเค็นการเข้าถึงบอทสำหรับทีมของคุณแล้ว คุณก็พร้อมที่จะไป
เมื่อคุณมีโทเค็นการเข้าถึงบอทสำหรับทีมของคุณแล้ว คุณสามารถเชื่อมต่อกับ Slack ผ่านทาง:
{:ok, bot} = Juvet.create_bot("MyBot")
คุณสามารถจัดการข้อความจาก Slack ได้โดยแทนที่ฟังก์ชัน handle_event/3
บนบอทของคุณ ฟังก์ชันนี้สามารถใช้การจับคู่รูปแบบเพื่อจัดการกับเหตุการณ์ต่างๆ จาก Slack
defmodule MyBot do use Juvet.Bot def handle_event(platform, %{type: "message"} = message, state) do # Add your logic here on how to handle a message event {:ok, state} end def handle_event(platform, %{type: "file_created"} = message, state) do # Add your logic here on how to handle a file_created event {:ok, state} end end
คุณสามารถส่งข้อความกลับไปยัง Slack จากบอทของคุณได้โดยแทนที่ฟังก์ชัน send_message/3
บนบอทของคุณ อาร์กิวเมนต์ที่สอง ( state
) ควรมีคีย์ ( id
) ซึ่งจะใช้ในการส่งข้อความไปยังทีมที่ถูกต้อง
defmodule MyBot do use Juvet.Bot def handle_event(platform, %{type: "message", text: "Hello"} = message, %{id: id, channel: channel} = state) do send_message(platform, state, %{type: "message", channel: channel, message: "Right back at cha!"}) {:ok, state} end end
คุณสามารถรันงานด้วยคำสั่ง mix มาตรฐาน:
mix test
คุณสามารถบันทึกการตอบกลับจาก Slack อีกครั้งได้ด้วยคำสั่ง mix ต่อไปนี้:
MIX_ENV=test mix record token:<slack token here> channel:<slack channel id here> text:"<Welcome from Juvet!>" ts:<valid message timestamp here> user:<slack user id here> users:<slack user id here>,<another slack user id here>
คุณสามารถบันทึก casette สำหรับวิธีเดียวได้โดยเพิ่มพารามิเตอร์ method
ด้านบน (เช่น method:chat.update
) และมันจะบันทึกใหม่เพียงวิธีเดียวเท่านั้น
คุณสามารถสร้างโทเค็น Slack สำหรับทีมใดก็ได้ของคุณโดยไปที่พื้นที่ OAuth & Permissions
ในแอป Slack API ของคุณ
โคลนพื้นที่เก็บข้อมูล git clone https://github.com/juvet/juvet
สร้างสาขาฟีเจอร์ git checkout -b my-awesome-feature
โคเดซ!
ยอมรับการเปลี่ยนแปลงของคุณ (โปรดคอมมิตเล็กน้อย)
พุชสาขาใหม่ของคุณ git push origin my-awesome-feature
สร้าง hub pull-request -b juvet:main -h juvet:my-awesome-feature
ลิขสิทธิ์ (c) 2018, เจมี่ ไรท์
ซอร์สโค้ด Juvet ได้รับอนุญาตภายใต้ใบอนุญาต MIT