readme
This commit is contained in:
parent
68c2d6580d
commit
b35a681378
56
README.md
56
README.md
@ -1,2 +1,54 @@
|
|||||||
# autoresponder
|
# Abstract autoresponder
|
||||||
Abstract implementation for processing text requests
|
Абстрактная реализация, которая позволяет создавать ботов.
|
||||||
|
|
||||||
|
### Основные понятия
|
||||||
|
|
||||||
|
**Unit** - некая единица сценария, по которому проходит пользователь, отправляя свои сообщения.
|
||||||
|
Каждый юнит хранит в себе ключевые слова или регулярное выражение, ссылки на следующие Unit-ы, а так же значение
|
||||||
|
приоритета и процент количества найденных ключевых слов к заданным ключевым словам. В данном модуле Unit является
|
||||||
|
абстрактным классом, так как юнит по задумке это расширяемый класс, который может не только отдавать текстовые
|
||||||
|
сообщения, но и например сохранять пользовательскую информацию, и выполнять прочее функции. Примеры наследников
|
||||||
|
Unit можно найти в [этом репозитории](https://github.com/uPagge/social-bot).
|
||||||
|
|
||||||
|
**Сценарий** - это связанные между собой юниты.
|
||||||
|
|
||||||
|
### Принцип работы
|
||||||
|
|
||||||
|
Для понимания рассмотрим небольшой пример по схеме изображенной ниже. Так же небольшие примеры обработки есть в тестах.
|
||||||
|
|
||||||
|
![Картинка](https://raw.githubusercontent.com/uPagge/images/master/img/autoresponder/units.jpg)
|
||||||
|
|
||||||
|
Сценариями в данном случае являются:
|
||||||
|
|
||||||
|
• Unit1 —> Unit2 —> Unit5 —> Unit7 —> Unit9
|
||||||
|
• Unit1 —> Unit2 —> Unit6 —> Unit8;
|
||||||
|
• Unit1 —> Unit3 —> Unit6 —> Unit8;
|
||||||
|
• Unit1 —> Unit4 —> Unit9;
|
||||||
|
• Unit10.
|
||||||
|
|
||||||
|
Пользователь присылает боту свое первое сообщение, например «Привет». Если сообщение удовлетворяет регулярному
|
||||||
|
выражению или содержит необходимые ключевые слова Unit1, то возвращается Unit1, то же самое относится к Unit10.
|
||||||
|
|
||||||
|
Если оба юнита удовлетворяют запросу пользователя, то будет возвращен юнит с большим приоритетом (поле priority).
|
||||||
|
Так как пользователь в нашем примере вызвал обработку Unit1, то следующее сообщение пользователя будет ассоциироваться
|
||||||
|
с множеством: Unit2, Unit3 и Unit4.
|
||||||
|
|
||||||
|
### Програмная реализация
|
||||||
|
|
||||||
|
Так как данная библиотека заточена только на определениие того, какой Unit отдавать, необходимо создать наследника
|
||||||
|
класса `Unit` (самый простой вариант лежит в тестах). Следом создается объект класса `UnitPointerService`. Он отвечает
|
||||||
|
за сохранение позиции пользователя в сценарии, простыми словами он сохраняет последний Unit, который был отправлен
|
||||||
|
пользователю.
|
||||||
|
|
||||||
|
Далее создается объект класса `AutoResponder`. В конструктор передается `UnitPointerService` и множество юнитов, которые
|
||||||
|
будут проверяется при первом сообщении пользователя.
|
||||||
|
|
||||||
|
Далее у объекта `AutoResponder` вызывается метод `answer`, который возвращает следующий для пользователя Unit.
|
||||||
|
|
||||||
|
### Программные особенности
|
||||||
|
|
||||||
|
1. Существует возможность отправлять дефолтный юнит, если не будет найден юнит удвлетворяющий сообщению пользователя (
|
||||||
|
без ключевых слов, и т.п.). Для этого у объекта `AutoResponder` вызывается метод `setDefaultUnit`.
|
||||||
|
2.
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user