通信システム用に設計されたプラットフォーム上に構築されたチャット アプリ用の MVC フレームワーク。
これは進行中の作業であり、まだ実際には何も準備ができていません
開発者が何十年も使用してきた使い慣れたモデル、ビュー、コントローラー アーキテクチャ パターンを使用して、主要なチャット ボット アプリケーション プラットフォーム用のチャット ボット アプリケーションを構築します。
Juvet は、以下を含むすべての主要なメッセージング プラットフォーム用のチャット アプリケーションを構築するために必要なものがすべて含まれたアプリケーション フレームワークです。
スラック RTM
Slack イベント API
Slack 受信 Webhook (近日公開予定)
アマゾンアレクサ
Facebookメッセンジャー
Twillio SMS
カスタム...
Juvet は、スケーラブルで保守可能なチャット アプリケーションを構築するために必要なすべての機能を提供します。
API ラッパー
メッセージキューイング
ミドルウェアとプラグイン
会話サポート
NLP サポート
さらに今後も...
ロードマップでは、各リリース内の今後の主な機能について説明します。
このリポジトリは、https://github.com/sponsors/jwright の GitHub スポンサー経由でスポンサーシップを利用できます。
あなたまたはあなたの会社が、メンテナンスが行き届いていて使いやすいチャット アプリケーション フレームワークから恩恵を受ける場合は、スポンサーシップを検討してください。あなたのスポンサーシップがこの開発に役立ちます。
ご支援ありがとうございます! ?
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 - Juvet.ViewState
プロセスを識別するためにキー (タプルとして) を PID に変換するレジストリ サービスとして機能するサーバー。
監督- 作戦の頭脳。プロセスは構成の有効性をチェックし、正しく構成されている場合は、 Juvet.Endpoint
プロセスとJuvet.FactorySupervisor
開始します。
FactorySupervisor - すべてのJuvet.BotSupervisor
プロセスのスーパーバイザー。
BotSupervisor - 1 つの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 機能を実行しません。これは間もなく提供される予定なので、OAuth 経由でアプリを Slack に接続するかどうかはアプリケーション次第です。 ueberauth を使用している場合、Slack でユーザーを承認するには ueberauth_slack が適切な選択です。
チームのボット アクセス トークンを取得したら、準備完了です。
チームのボット アクセス トークンを取得したら、次の方法で Slack に接続できます。
{:ok, bot} = Juvet.create_bot("MyBot")
ボットのhandle_event/3
関数をオーバーライドすることで、Slack からのメッセージを処理できます。この機能は、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
ボットのsend_message/3
関数をオーバーライドすることで、ボットから Slack にメッセージを送り返すことができます。 2 番目の引数 ( 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
次の mix コマンドを使用して、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
) を追加することで、1 つのメソッドのみのカセットを記録でき、その 1 つのメソッドのみが再記録されます。
Slack API アプリのOAuth & Permissions
エリアにアクセスして、任意のチームの Slack トークンを作成できます。
リポジトリ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 ライセンスに基づいてライセンスされています。