聊天应用程序的 MVC 框架构建在专为通信系统设计的平台上。
这是一项正在进行中的工作,尚未准备好进行任何实际的工作
使用开发人员几十年来一直使用的熟悉的模型-视图-控制器架构模式为主要聊天机器人应用程序平台构建聊天机器人应用程序。
Juvet 是一个应用程序框架,包含为所有主要消息传递平台构建聊天应用程序所需的一切,包括:
松弛 RTM
Slack 事件 API
Slack 传入 Webhook(即将推出)
亚马逊 Alexa
脸书信使
Twillio 短信
风俗...
Juvet 提供构建可扩展且可维护的聊天应用程序所需的所有功能,包括
API 包装器
消息队列
中间件和插件
对话支持
自然语言处理支持
未来还会有更多...
路线图描述了每个版本中即将推出的主要功能。
该存储库可通过 GitHub Sponsors 获得赞助: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 启动时,进程树应如下所示。
+--------------------------------+ +--------------------------------+| |-----|查看状态注册表 | +--|视图状态管理器 | +--------------------+ | | | +--------------------------------+ | +------------------+-----|视图状态Supervisor | +----------------+ +--------------+--+ +---------------- ---+ +--------------------+ | | | | | | | 尤维特 |----| BotFactory |-----|总监| | (申请)| | | | | | | +--------------+--+ +----------------+ +----------------+ | +--------------------+ | | | +--|厂长 | | | +--------------------+ | | | | +----------------+ +----------------+ | | | | |机器人主管 | |机器人主管 | | | | | +----------------+ +----------------+ | | | | +-----+ +-----+ |机器人 | |机器人 | +-----+ +-----+
Juvet - 启动Juvet.BotFactory
主管的应用程序
BotFactory - 启动Juvet.Superintendent
和Juvet.ViewStateManager
进程的 Supervisor。
ViewStateManager - 可以管理给定键集的任意数据块的存储的主管。启动Juvet.ViewStateRegistry
和Juvet.ViewState
进程的动态管理程序。
ViewStateRegistry - 充当注册表服务的服务器,将密钥(作为元组)转换为 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 功能。该功能即将推出,因此您的应用程序可以通过 OAuth 将您的应用程序连接到 Slack。如果您使用 ueberauth,那么 ueberauth_slack 是让您的用户获得 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。第二个参数 ( 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
)来仅记录一种方法的案例,它只会重新记录该一种方法。
您可以通过访问 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 许可证获得许可。