Платформа MVC для приложений чата, построенная на платформе, предназначенной для систем связи.
ЭТА РАБОТА В ПРОГРЕССЕ И ПОКА НЕ ГОТОВА К НИЧЕМ РЕАЛЬНОМУ
Создавайте приложения чат-ботов для основных платформ приложений чат-ботов, используя знакомые шаблоны архитектуры «модель-представление-контроллер», которые разработчики используют на протяжении десятилетий.
Juvet — это платформа приложений, которая включает в себя все необходимое для создания приложения чата для всех основных платформ обмена сообщениями, включая:
Слабый РТМ
API Slack-событий
Slack Incoming Webhook (скоро)
Амазонка Алекса
Facebook Мессенджер
Твиллио СМС
Обычай...
Juvet предлагает все функции, необходимые для создания масштабируемого и удобного в обслуживании чат-приложения, включая
API-обертки
Очередь сообщений
Промежуточное ПО и плагины
Поддержка разговоров
Поддержка НЛП
еще впереди...
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 запускается, это дерево процессов должно выглядеть следующим образом.
+------------------+ +-------------------+| |-----| Вьюстатерегистри | +--| Вьюстейтаменеджер | +-------------------+ | | | +---------------------+ | +------------------+-----| Вьюстатесупервизор | +---------------+ +--------------+--+ +------------- ---+ +---------------------+ | | | | | | | Жювет |----| BotFactory |-----| Суперинтендант | | (приложение) | | | | | | | +--------------+--+ +----------------+ +---------------+ | +-------------------+ | | | +--| Руководитель завода | | | +-------------------+ | | | | +---------------+ +---------------+ | | | | | БотСупервизор | | БотСупервизор | | | | | +---------------+ +---------------+ | | | | +-----+ +-----+ | Бот | | Бот | +-----+ +-----+
Juvet — приложение, запускающее супервизор Juvet.BotFactory
BotFactory — супервизор, запускающий процессы Juvet.Superintendent
и Juvet.ViewStateManager
.
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. Это скоро произойдет, поэтому ваше приложение сможет подключить свое приложение к 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_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
Авторские права (c) 2018, Джейми Райт.
Исходный код Juvet лицензируется по лицензии MIT.