Der Bot verwendet die Konvertierung von Wörtern der ersten Form, um die Anfrage des Benutzers genauer zu erkennen. Um richtig zu funktionieren, benötigen Sie ein Wörterbuch mit Wörtern in der gewünschten Sprache. Dieses Set ist für die russische Sprache geeignet. Es ist zwingend erforderlich, den Pfad zum Wörterbuch anzugeben.
$ bot = new alisa ( ' NAME ' );
//Такой используется по умолчанию
$ bot -> setDictionaryPath ( $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /dicts/ ' );
Sitzungen – *.json-Datei, in der alle Serviceinformationen im Kern eines Dialogs gespeichert sind. Sie müssen den Pfad zu dem Verzeichnis angeben, in dem die Daten gespeichert werden.
$ 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 ;
);
Laut Protokoll muss der Bot mindestens über einen Auslöser zur Begrüßung und Fehlerbehandlung (Hilferuf) verfügen.
//Будет вызван автоматически, при первом обращении пользователя к навыку
$ 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 ;
);
Wenn diese Auslöser nicht definiert sind, sendet der Bot eine Standardantwort mit einem Link zu diesem Element. Und wenn das der Grund ist, warum Sie diesen Text lesen, war der Streich ein Erfolg.
Trigger ist ein Befehl, auf den der Bot reagieren muss.
Tokens – Schlüsselwörter oder Abfrageoptionen (abhängig vom ausgewählten Erkennungstyp)
Dieser Modus verwendet einen sequentiellen Vergleich von Tokengruppen und wählt nur geeignete Optionen aus. Die Analyse erfolgt von links nach rechts. Wenn die erste Gruppe die Suche nicht bestanden hat, werden die verbleibenden Gruppen nicht durchsortiert und der Bot beginnt mit der Anzeige des nächsten Auslösers. Wenn alle Gruppen zum ersten Mal eingegeben werden, wird der Auslöser als erkannt markiert; andernfalls nehmen sie nicht an der Analyse teil
$ greenTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' зеленый ' ]);
$ blackTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' черный ' , ' индийский ' ]);
$ coffeTrigger -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' кофе ' ]);
Bei der Aufforderung „Gießen Sie bitte etwas schwarzen Tee ein“ funktioniert $blackTea; Auf die Frage „Ich habe nicht die Kraft, mich nach diesem belebenden Kaffee zu sehnen“ – $coffeTrigger;
Vorteile:
Nachteile:
Im Gegensatz zu MORPHY_STRICT werden Schlüsselwörter automatisch ermittelt, es müssen jedoch mehrere Abfrageoptionen angegeben werden. Alle Trigger werden in die Analyse einbezogen; der Trigger mit der besten Übereinstimmung zur Anfrage wird für den erkannten ausgewählt.
$ greenTea -> linkTokens ([ ' Налей зеленого чая ' ],[ ' Хочу зеленого чая ' ],[ ' Дай зеленый чай ' ]);
$ blackTeas -> linkTokens ([ ' Налей чергого чая ' ],[ ' Хочу черного чая ' ],[ ' Дай черный чай ' ]);
$ coffeTrigger -> linkTokens ([ ' Налей кофе ' ],[ ' Хочу кофе ' ],[ ' Дай кофе ' ]);
Vorteile:
Nachteile:
In Fällen, in denen der Bot zur sequentiellen Ausführung von Befehlen verwendet wird, können Sie den nächsten Trigger an einen Trigger binden. Wenn Sie beispielsweise Informationen vom Benutzer erfassen müssen, z. B. Vorname, Nachname usw.
// Декларируем триггеры
$ 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 ;
});
Für jeden Auslöser müssen Sie einen Handler mit einer Frage erstellen. Wenn der Benutzer „Nun, lass uns uns kennenlernen“ fragt, wird der $nameTrigger-Trigger ausgelöst. Für die Trigger $sNameTrigger und $yoTrigger werden keine Token benötigt (im Allgemeinen funktionieren sie in diesem Fall nicht, da der Benutzer Informationen übermittelt und der Befehl darin nicht erkannt werden kann), sie werden automatisch aufgerufen nach dem anderen.
Trigger können nicht nur zur Bestimmung eines Benutzerbefehls, sondern auch zum Sammeln von Informationen verwendet werden.
//$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 ;
);
Der Bot speichert nur eine Dateninstanz für einen Trigger, sodass nur die zuletzt empfangenen Daten abgerufen werden können
Antworten sind die Informationen, die der Bot an den Benutzer sendet, sobald der Auslöser ausgelöst wird.
//$personTrigger – назначен как следующий триггер после $yoTrigger
$ bot -> sendResponse ( $ personTrigger , static function () use ( $ bot ){
$ answer = new Answer ();
$ answer -> addText ( ' Один вариант ответа ' , ' Од!ин вари!ант отв!ета ' );
return $ answer ;
);
Die addText-Methode verfügt über zwei Zeichenfolgenargumente. Der erste dient der Ausgabe von Text, der dem Benutzer angezeigt wird, der zweite ist derselbe Text im TTS-Format.
Für mehr Interaktivität sollten mehrere Antwortmöglichkeiten genutzt werden. Die Versandoption wird zufällig ausgewählt.
$ bot -> sendResponse ( $ bullshitTrigger , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Да не может быть! ' );
$ answer -> addText ( ' Чушь собачья! ' );
$ answer -> addText ( ' Не верю! ' );
return $ answer ;
);
Sie können eine Schaltfläche zum Antworten anhängen. Dies kann ein Link zu einer Webseite oder eine Schaltfläche sein, die beim Klicken einen Auslöser auslöst. Es kann mehrere Schaltflächen und unterschiedliche Typen geben.
$ bot -> sendResponse ( $ helloPerson , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Может познакомимся? ' );
$ buttonY = new Button ( ' Давай ' );
$ answer -> addButton ( $ button );
$ buttonN = new Button ();
$ buttonN -> setTitle ( ' Неа ' );
return $ answer ;
);
In diesem Beispiel wird beim Klicken auf die Schaltfläche $nameTrigger aus dem Beispiel im Abschnitt „Delegation“ aufgerufen. Somit kann $nameTrigger entweder durch die Stimme des Benutzers oder durch Drücken einer Taste aufgerufen werden, wenn der Benutzer nicht gesprächig ist.
Der Alice-Bot kann Benutzern Schaltflächen in zwei verschiedenen Formen anzeigen – als Schaltfläche unter dem Dialog und als Link innerhalb der gesendeten Antwort.
$ 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 ' ]);
Zusätzlich zu den vom Benutzer gesendeten Daten, die durch den Trigger gebunden und gespeichert werden, können Sie auch Ihre eigenen Daten speichern.
$ bot ->sendResponse( $ firstRequest , static function () use ( $ bot ) {
* * *
$ bot -> storeCommonData ( ' Черный чай ' , ' TEA ' );
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
$ bot ->sendResponse( $ secondRequest , static function () use ( $ bot ) {
* * *
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
In Fällen, in denen der Auslöser nicht nur die Datenannahme, sondern auch die Validierung umfasst, sollte eine Schleife verwendet werden
//Допустим что код триггера $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 ;
});