إطار عمل MVC لتطبيقات الدردشة المبني على منصة مصممة لأنظمة الاتصالات.
هذا عمل قيد التقدم وليس جاهزًا لأي شيء حقيقي بعد
أنشئ تطبيقات روبوتات الدردشة لمنصات تطبيقات روبوتات الدردشة الرئيسية باستخدام أنماط بنية مألوفة لوحدة التحكم في عرض النماذج والتي يستخدمها المطورون منذ عقود.
Juvet هو إطار عمل للتطبيق يتضمن كل ما تحتاجه لإنشاء تطبيق دردشة لجميع منصات المراسلة الرئيسية بما في ذلك:
سلاك RTM
سلاك الأحداث API
Slack Webhook الوارد (قريبًا)
أمازون اليكسا
فيسبوك ماسنجر
تويليو الرسائل القصيرة
مخصص...
يقدم Juvet جميع الميزات التي تحتاجها لإنشاء تطبيق دردشة قابل للتطوير والصيانة، بما في ذلك
أغلفة API
خدمة انتظار الرسائل
الوسيطة والمكونات الإضافية
دعم المحادثة
دعم البرمجة اللغوية العصبية
المزيد في المستقبل...
تصف خريطة الطريق الميزات الرئيسية القادمة في كل إصدار.
هذا المستودع متاح للرعاية عبر رعاة 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، ما يلي هو الشكل الذي يجب أن تبدو عليه شجرة العملية.
+------------------+ +-------------------+| |-----| عرض حالة التسجيل | +--| عرض ستيت مانجر | +-------------------+ | | | +---------------------+ | +------------------+-----| عرض الدولةالمشرف | +---------------+ +------------+ +------------------------------------------------- ---++---------------------+ | | | | | | | يوفيت |----| بوت فاكتوري |-----| المشرف | | (التطبيق) | | | | | | | +----------------------------------------------------------------------------------- +--------------+ | +-------------------+ | | | +--| مشرف مصنع | | | +-------------------+ | | | | +---------------+ +--------------+ | | | | | مشرف بوت | | مشرف بوت | | | | | +---------------+ +--------------+ | | | | +-----++-----+ | بوت | | بوت | +-----++-----+
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 test
يمكنك إعادة تسجيل الاستجابات من Slack باستخدام أمر المزيج التالي:
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>
يمكنك تسجيل الصناديق لطريقة واحدة فقط عن طريق إضافة معلمة 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
حقوق الطبع والنشر (ج) 2018، جيمي رايت.
كود مصدر Juvet مرخص بموجب ترخيص MIT.