Ассистент¶
Модуль ELiS Assistent создает виртуального помощника в виде блока, с которым пользователь может общаться и просить выполнить определенные задачи.
Блок с помощником может размещаться в любой части сайта стандартными средствами Drupal (admin/structure/block).
Сам модуль ELiS Assistent имеет только лишь базовый функционал, фактически навыки (skills) с определенными полезными действиями (actions) надо разрабатывать самостоятельно в виде отдельных модулей.
Некоторые модули ELiS, такие как ELiS H5P и ELiSsearch реализуют навыки для виртуального помощника.
Установка¶
Установите модуль ассистента (# dnf install drupal7-elis-mod-assistent) и включите модуль ELiS Assistent.
В настройках модуля admin/config/content/elis_assistant задайте имя помощника, приветствие (может содержать HTML-код), цвет фона и текста блока с ассистентом и несколько эмоциональных изображений, желательного одного размера.
Вам понадобится минимум одно собственное изображение ассистента (default image), которое будут видеть пользователи по умолчанию.
В настройках прав модуля ELiS Assistent в admin/people/permissions добавьте право нужным ролям на использование ассистента.
В настройках блоков в admin/structure/block найдите блок ELiS Assistent и разместите его в нужной части сайта.
Эмоции¶
Исполнение некоторых навыков (успешное или нет) может активировать эмоции ассистента. Эмоции влияют на то, какое изображение ассистента будет видеть пользователь, но для этого изображения ассистента с эмоциями надо создать и загрузить.
Если навык активирует эмоцию к которой не загружено изображение, пользователь увидит изображение по умолчанию. Т.о. вам не обязательно создавать изображения со всеми эмоциями.
Навыки¶
У помощника есть навыки, которые должны наследоваться от класса ElisAssistantSkill (sites/all/modules/elis_assistant/class/ElisAssistantSkill.class.php).
Сам навык имеет только имя, фразу активации и несколько действий (массив actions).
Реальную работу обеспечивают именно действия из ElisAssistanSkill->actions.
Т.о. навык агрегирует несколько действий в себя.
Пример кода:
class MYMODULEAssistantSkill extends ElisAssistantSkill {
public function __construct() {
$this->id = get_class($this);
$this->activationPhrases = array('MYMODULE фраза 1','MYMODULE фраза 2');
$this->actions = array();
$action = new MYMODULEAssistantSkillAction(); // действие, которое тоже реалзует ваш модуль, см. ниже
$this->actions[] = $action;
}
public isCanUse($account) {
return TRUE;
}
}
У навыка есть метод isCanUse($account), который по умолчанию возвращает для всех TRUE. Переопределите его, если хотите, чтобы навык могли использовать только некоторые пользователи.
Действия¶
Действия навыка должны наследоваться от класса ElisAssistantSkillAction (sites/all/modules/elis_assistant/class/ElisAssistantSkillAction.class.php).
У действий, как и у навыка, есть фразы активации.
Когда пользователь пишет какое-либо сообщение, сравниваются его слова со всеми фразами активации и если есть попадание, то возможные действия в виде заглавий (title) попадают в автодополнение.
Если пользователь выберет из автодополнение действие и оно является кликабельным, вызовется callback действия (ElisAssistantSkillAction::callback), который должен указывать на какой-то статический метод класса.
Если пользователь не выберет автодополнение, а просто отправит помощнику текстовое сообщение, помощник проверит с какими фразами активации есть попадания сообщения пользователя, выберит действие с наибольшим числом попаданий согласно весовому коэффициенту действия (ElisAssistantSkillAction::weight, больше - выше вероятность срабатывания) и вызовет ElisAssistantSkillAction::callback.
class MYMODULEAssistantSkillAction extends ElisAssistantSkillAction {
public $id = 'MYMODULE_action1';
public $title = 'Мое действие 1';
public $activationPhrases = array('активируйся по попаданию в эту фразу','или по попаданию во вторую фразу');
public $callback = 'MYMODULEAssistantSkillAction::callback_my_action'; // этот статический метод будет вызван при выполнении действия
public $isClickable = true;
public static function isCanUse($account) {
return ($account->uid > 0) ? TRUE : FALSE;
}
public static function callback_my_action() {
$msg = new ElisAssistantMsg();
$msg->html = '<div>Hello worlds</div>';
return $msg;
}
}
У действия есть метод isCanUse($account), который по умолчанию возвращает для всех TRUE. Переопределите его, если хотите, чтобы навык могли использовать только некоторые пользователи.
Выполнение действий¶
Обработчик действий ElisAssistantSkillAction::callback должен совершить какую-то полезную работу и в качестве ответа вернуть экземпляр класса ElisAssistantMsg (sites/all/modules/elis_assistant/class/ElisAssistantMsg.class.php).
Действия могут выполняться как в один клик пользователя (без параметров), так и обрабатывать текстовое сообщение пользователя.
Чтобы получить текстовое сообщение пользователя, инициировавшего действие, вам нужно его получить из параметра $_REQUEST[‘text’] и как-то обработать.
Обработав действие и возвращая ответ в виде сообщения ElisAssistantMsg, вам надо пользователю передать какую-то информацию.
Сообщение пользователю¶
Отправка сообщения пользователю осуществляется созданием и заполнением экземпляра ElisAssistantMsg (sites/all/modules/elis_assistant/class/ElisAssistantMsg.class.php).
Ответ пользователя может быть текстовым, тогда вы заполняете ElisAssistantMsg->text.
Если вам надо отправить ответ в виде HTML-кода, заполните ElisAssistantMsg->html. При этом имейте в виду, что в такой HTML нельзя размещать JavaScript.
Если дополнительно к HTML надо выполнить JavaScript, то заполните ElisAssistantMsg->script. При этом скрипт будет выполнен после отображения ElisAssistantMsg->html.
Добавление навыка¶
Чтобы ваш модуль добавил навык в список доступных, модуль должен реализовать хук hook_elis_assistant.
Пример:
function MYMODULE_elis_assistant($module=array()) {
$skill = new MYMODULEAssistantSkill(); // здесь должен быть ваш класс, наследующий ElisSearchAssistantSkill
$module['skills'][] = $skill;
return $module;
}
Стилизация внешнего вида помощника¶
В sites/all/modules/elis_assistant/css/ElisAssistant.css определены стили.
Вы можете переопределить эти стили стандартными средствами Drupal, например создав блок с HTML-кодом и выведя его там же, где и помощник.
Некоторые настройки внешнего вида доступны также в настройках модуля admin/config/content/elis_assistant
Примеры¶
Посмотрите примеры в sites/all/modules/elis_h5p/elis_h5p.assistant.inc и sites/all/modules/elis_search/elissearch.assistant.inc.
Обратите внимание, если помощник на сообщение пользователя не найдет навык по фразам активации, то он выполнит навык и действие по умолчанию (у которых задан флаг isDefault), таким навыком и действием является полнотекстовый поиск. Вам не стоит создавать другие навыки по умолчанию.