Le bot utilise la conversion de mots de première forme pour reconnaître plus précisément la requête de l'utilisateur. Pour fonctionner correctement, vous devez disposer d'un dictionnaire de mots dans la langue souhaitée. Cet ensemble convient à la langue russe. Il est obligatoire de préciser le chemin d'accès au dictionnaire.
$ bot = new alisa ( ' NAME ' );
//Такой используется по умолчанию
$ bot -> setDictionaryPath ( $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /dicts/ ' );
Sessions – Fichier *.json dans lequel toutes les informations de service sont stockées dans l'essence d'un dialogue. Vous devez spécifier le chemin d'accès au répertoire dans lequel les données seront stockées.
$ bot = new alisa ( ' NAME ' );
//Такой используется по умолчанию
$ bot -> setDictionaryPath ( $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /sessions/ ' );
//Создаем бота. Аргумент – название навыка
$ bot = new alisa ( ' myawesomebot ' );
//Создаем триггер, в качестве аргумента строка с уникальным именем
$ helloTrigger = new Trigger ( ' HELLO ' );
//Привязываем к триггеру токены – в данном случае в одну группу.
//Токены – ключевые слова, объединенные в группы
$ helloTrigger -> linkTokens ([ ' привет ' , ' здравствуйте ' , ' приветсвую ' ]);
$ bayTrigger = new Trigger ( ' bay ' );
$ bayTrigger -> linkTokens ([ ' пока ' , ' до свидания ' , ' прощай ' ]);
//Привязываем триггеры боту
$ bot -> addTrigger ( $ helloTrigger , $ bayTrigger );
//Отправляем ответ, если распознан $helloTrigger
$ bot ->sendResponse( $ helloTrigger , static function (){
//$answer - экземпляр отправляемого ответа
$ answer = new Response ();
$ answer -> addText ( ' Привет! ' );
$ answer -> addText ( ' Доброго времени суток! ' );
//обязательно возвращаем объект Response
return $ answer ;
);
//Отправляем ответ, если распознан $bayTrigger
$ bot ->sendResponse( $ bayTrigger , static function (){
$ answer = new Response ();
$ answer -> addText ( ' Прошай! ' );
$ answer -> addText ( ' Всего доброго ' );
//обязательно возвращаем объект Response
return $ answer ;
);
Selon le protocole, le bot doit disposer d'au moins un déclencheur de message d'accueil et de gestion des erreurs (appel à l'aide).
//Будет вызван автоматически, при первом обращении пользователя к навыку
$ helloTrigger = new Trigger ( ' HELLO ' );
$ helloTrigger -> setAsInit ( true );
//Будет вызыван автоматически, если ну удалось распознать запрос
$ mistakeTrigger = new Trigger ( ' MISTAKE ' );
$ mistakeTrigger -> setAsMistake ( true );
//Отправляем ответ, если распознан $mistakeTrigger
$ bot -> sendResponse ( $ mistakeTrigger , static function (){
$ answer = new Answer ();
$ answer -> addText ( ' Не удалось понять вашу команду :( ' );
return $ answer ;
);
Si ces déclencheurs ne sont pas définis, le bot enverra une réponse par défaut avec un lien vers cet élément. Et si c’est la raison pour laquelle vous lisez ce texte, la farce a été réussie.
Le déclencheur est une commande à laquelle le bot doit répondre.
Jetons – mots-clés ou options de requête (selon le type de reconnaissance sélectionné)
Ce mode utilise une comparaison séquentielle de groupes de jetons, en sélectionnant uniquement les options appropriées. L'analyse se déroule de gauche à droite - si le premier groupe n'a pas réussi la recherche, les groupes restants ne seront pas triés et le robot commencera à visualiser le déclencheur suivant. Lorsque tous les groupes sont saisis pour la première fois, le déclencheur sera marqué comme reconnu, sinon ils ne participeront pas à l'analyse ;
$ greenTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' зеленый ' ]);
$ blackTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' черный ' , ' индийский ' ]);
$ coffeTrigger -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' кофе ' ]);
Lorsque vous demandez « Versez du thé noir s'il vous plaît », $blackTea fonctionnera ; Lorsque vous demandez « Je n’ai pas la force d’avoir envie de ce café revigorant » – $coffeTrigger ;
Avantages :
Inconvénients :
Contrairement à MORPHY_STRICT, les mots-clés seront déterminés automatiquement, mais plusieurs options de requête doivent être spécifiées. Tous les déclencheurs sont inclus dans l'analyse ; le déclencheur correspondant le mieux à la demande sera sélectionné pour celui reconnu.
$ greenTea -> linkTokens ([ ' Налей зеленого чая ' ],[ ' Хочу зеленого чая ' ],[ ' Дай зеленый чай ' ]);
$ blackTeas -> linkTokens ([ ' Налей чергого чая ' ],[ ' Хочу черного чая ' ],[ ' Дай черный чай ' ]);
$ coffeTrigger -> linkTokens ([ ' Налей кофе ' ],[ ' Хочу кофе ' ],[ ' Дай кофе ' ]);
Avantages :
Inconvénients :
Dans les cas où le bot est utilisé pour exécuter des commandes de manière séquentielle, vous pouvez lier le déclencheur suivant à un déclencheur. Par exemple, si vous devez collecter des informations auprès de l'utilisateur, par exemple son prénom, son nom, etc.
// Декларируем триггеры
$ nameTrigger = new Trigger ( ' NAME ' );
$ sNameTrigger = new Trigger ( ' SECOND_NAME ' );
$ yoTrigger = new Trigger ( ' YEARS ' );
$ personTrigger = new Trigger ( ' PERSON ' );
// Назначаем токены для триггера
$ nameTrigger -> setTokens ([ ' давай ' , ' хочу ' , ' может ' ],[ ' знакомиться ' , ' познакомиться ' , ' представлюсь ' ]);
// Привязываем следующие триггеры
$ nameTrigger -> nextDelegate ( $ sNameTrigger );
$ sNameTrigger -> nextDelegate ( $ yoTrigger );
$ yoTrigger -> nextDelegate ( $ personTrigger );
// Обрабочтик запроса. Сработает если пользователь произнес "Давай познакомимся"
$ bot -> sendResponse ( $ nameTrigger , static function () use ( $ bot ){
$ answer = new Response ();
$ answer -> addText ( ' Какое твое имя? ' );
return $ answer ;
});
// После шага $nameTrigger сработает обработчик $sNameTrigger
$ bot -> sendResponse ( $ sNameTrigger , static function () use ( $ bot ){
$ answer = new Response ();
$ answer -> addText ( ' А фамилия? ' );
return $ answer ;
});
// После шага $sNameTrigger сработает обработчик $yoTrigger
$ bot -> sendResponse ( $ yoTrigger , static function () use ( $ bot ){
$ answer = new Response ();
$ answer -> addText ( ' Сколько тебе лет? ' );
return $ answer ;
});
Pour chacun des déclencheurs, vous devez créer un gestionnaire avec une question. Lorsque l'utilisateur demande « Eh bien, faisons connaissance », le déclencheur $nameTrigger se déclenche. Pour les déclencheurs $sNameTrigger et $yoTrigger, les jetons ne sont pas nécessaires (en général, dans ce cas, ils ne pourront pas fonctionner, car l'utilisateur transmettra des informations et la commande ne pourra pas y être reconnue), ils seront appelés automatiquement un après l'autre.
Les déclencheurs peuvent être utilisés non seulement pour déterminer une commande utilisateur, mais également pour collecter des informations.
//$personTrigger – назначен как следующий триггер после $yoTrigger
$ bot -> sendResponse ( $ personTrigger , static function () use ( $ bot ){
//В качестве аргумента строка, уникальное название триггера
$ name = $ bot -> getTriggerData ( ' NAME ' );
$ sName = $ bot -> getTriggerData ( ' SECOND_NAME ' );
$ yo = $ bot -> getTriggerData ( ' YEARS ' );
$ answer = new Answer ();
$ answer -> addText ( " Хорошо { $ name } { $ sName } , я тебя запомнила, и что тебе { $ yo } лет – тоже " );
return $ answer ;
);
Le bot stocke une seule instance de données pour un déclencheur, de sorte que seules les dernières données reçues peuvent être récupérées
Les réponses sont les informations que le bot envoie à l'utilisateur dès que le déclencheur est déclenché.
//$personTrigger – назначен как следующий триггер после $yoTrigger
$ bot -> sendResponse ( $ personTrigger , static function () use ( $ bot ){
$ answer = new Answer ();
$ answer -> addText ( ' Один вариант ответа ' , ' Од!ин вари!ант отв!ета ' );
return $ answer ;
);
La méthode addText a deux arguments de chaîne. Le premier est utilisé pour sortir le texte qui sera affiché à l'utilisateur, le second est le même texte au format TTS.
Pour une plus grande interactivité, plusieurs options de réponse possibles doivent être utilisées. L'option d'expédition sera sélectionnée au hasard.
$ bot -> sendResponse ( $ bullshitTrigger , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Да не может быть! ' );
$ answer -> addText ( ' Чушь собачья! ' );
$ answer -> addText ( ' Не верю! ' );
return $ answer ;
);
Vous pouvez joindre un bouton pour répondre. Il peut s'agir d'un lien vers une page Web ou d'un bouton qui, une fois cliqué, déclenchera un déclencheur. Il peut y avoir plusieurs boutons et différents types.
$ bot -> sendResponse ( $ helloPerson , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Может познакомимся? ' );
$ buttonY = new Button ( ' Давай ' );
$ answer -> addButton ( $ button );
$ buttonN = new Button ();
$ buttonN -> setTitle ( ' Неа ' );
return $ answer ;
);
Dans cet exemple, lorsque vous cliquez sur le bouton, $nameTrigger de l'exemple de la section « Délégation » sera appelé. Ainsi $nameTrigger peut être appelé soit par la voix de l'utilisateur, soit en appuyant sur un bouton si l'utilisateur n'est pas bavard.
Le robot Alice peut afficher des boutons aux utilisateurs sous deux formes différentes : sous forme de bouton placé sous la boîte de dialogue et sous forme de lien dans la réponse envoyée.
$ bButton = new Button ( ' Это кнопка ' );
//Будет отображена как кнопка, под диалогом. Со следующем ответом отображена не будет, если ее не привязатели к ответу Response
$ bButton -> setHide ( true );
$ bLink = new Button ( ' Это кнопка, но как ссылка ' )
//Будет отображена в ответе. Даже если пользователь выбирал что-то другие, эта ссылка так и останется в сообщении.
$ bButton-> setHide ( false );
$ bButton = new Button ( ' Это кнопка ' );
* * *
// Можно установить заголовок не в конструкторе, а в методе. Можно использовать как способ изменеия заголовка имеющейся кнопки, тем самым создавая вариативность
$ bButton -> setTitle ( ' Это все еще кнопка ' )
// К кнопке можно добавить ссылку. При клике на нее произойдет переход по адресу в браузере.
$ bButton -> addLink ( ' www.SITENAME.DOMAIN ' );
// Кнопке можно добавить обработчик какого-нибудь тригера. При клике на кнопку бот в первую очередь проверяет есть ли связанный Триггер для кнопки, и если есть – вызывает именно его.
$ bButton -> linkTrigger (Trigger $ trigger );
//Кнопке можно передать какие-нибудь данные, которые можно будет забрать и использовать, если пользователь нажимал на эту кнопку.
$ bButton -> addPayload ([ ' DATA ' => ' SOME_DATA ' ]);
En plus des données envoyées par l'utilisateur, qui sont liées et enregistrées par le déclencheur, vous pouvez également enregistrer vos propres données.
$ bot ->sendResponse( $ firstRequest , static function () use ( $ bot ) {
* * *
$ bot -> storeCommonData ( ' Черный чай ' , ' TEA ' );
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
$ bot ->sendResponse( $ secondRequest , static function () use ( $ bot ) {
* * *
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
Dans les cas où le déclencheur implique non seulement l'acceptation des données, mais également la validation, le bouclage doit être utilisé
//Допустим что код триггера $chooseMeds – "MEDS"
$ bot -> sendResponse ( $ chooseMeds , static function () use ( $ bot ) {
$ answer = new Response ();
//Проверяем, это первичный запрос или цикл?
if ( ! $ bot -> isRepeatedRequest ()) {
//Нет, значит это первичный запрос со стороны пользователя, предлагаем выбор
$ answer -> addText ( ' Какую таблетку ты выберешь, Нео? ' );
//Задаем циклирование, результат будем проверять в этом же триггере
$ bot -> setRepeat ( true );
} else {
//Неправильный выбор?
if ( $ bot -> getTriggerData ( ' MEDS ' ) !== ' Синяя ' ) {
$ answer -> addText ( ' Неверный выбор, Нео ' );
//Задать цикл
$ bot -> setRepeat ( true );
} else {
//Все ок, выход из триггера
$ answer -> addText ( ' Ты сделал правильный выбор о-о ' );
}
}
return $ answer ;
});