ボットは第一形式の単語変換を使用して、ユーザーのクエリをより正確に認識します。正しく機能するには、目的の言語の単語の辞書が必要です。このセットはロシア語に適しています。辞書へのパスを指定することは必須です。
$ bot = new alisa ( ' NAME ' );
//Такой используется по умолчанию
$ bot -> setDictionaryPath ( $ _SERVER [ ' DOCUMENT_ROOT ' ] . ' /dicts/ ' );
セッション – すべてのサービス情報が 1 つのダイアログの本質内に保存されている *.json ファイル。データを保存するディレクトリへのパスを指定する必要があります。
$ 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 ;
);
プロトコルによれば、ボットには少なくとも挨拶とエラー処理 (助けを求める) のトリガーが必要です。
//Будет вызван автоматически, при первом обращении пользователя к навыку
$ 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 ;
);
これらのトリガーが定義されていない場合、ボットはこのアイテムへのリンクを含むデフォルトの応答を送信します。そして、これがあなたがこの文章を読んでいる理由であるなら、そのいたずらは成功したことになります。
トリガーは、ボットが応答する必要があるコマンドです。
トークン – キーワードまたはクエリ オプション (選択した認識タイプに応じて)
このモードでは、トークンのグループを順次比較し、適切なオプションのみを選択します。解析は左から右に進みます。最初のグループが検索に合格しなかった場合、残りのグループは並べ替えられず、ボットは次のトリガーの表示を開始します。すべてのグループが初めて入力されると、トリガーは認識済みとしてマークされます。それ以外の場合、トリガーは分析に参加しません。
$ greenTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' зеленый ' ]);
$ blackTea -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' чай ' ],[ ' черный ' , ' индийский ' ]);
$ coffeTrigger -> linkTokens ([ ' дай ' , ' хочу ' , ' налей ' ],[ ' кофе ' ]);
「紅茶を注いでください」とリクエストする場合は $blackTea が機能します。 「この爽快なコーヒーを飲みたい力がない」というリクエストの場合 – $coffeeTrigger;
長所:
短所:
MORPHY_STRICT とは異なり、キーワードは自動的に決定されますが、いくつかのクエリ オプションを指定する必要があります。すべてのトリガーが分析に含まれます。リクエストに最もよく一致するトリガーが認識されたトリガーとして選択されます。
$ greenTea -> linkTokens ([ ' Налей зеленого чая ' ],[ ' Хочу зеленого чая ' ],[ ' Дай зеленый чай ' ]);
$ blackTeas -> linkTokens ([ ' Налей чергого чая ' ],[ ' Хочу черного чая ' ],[ ' Дай черный чай ' ]);
$ coffeTrigger -> linkTokens ([ ' Налей кофе ' ],[ ' Хочу кофе ' ],[ ' Дай кофе ' ]);
長所:
短所:
ボットを使用してコマンドを順次実行する場合は、次のトリガーをトリガーにバインドできます。たとえば、ユーザーから姓名などの情報を収集する必要がある場合。
// Декларируем триггеры
$ 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 ;
});
トリガーごとに、質問を含むハンドラーを作成する必要があります。ユーザーが「じゃあ、知り合いになろう」とリクエストすると、$nameTrigger トリガーが起動します。トリガー $sNameTrigger と $yoTrigger の場合、トークンは必要ありません (一般に、この場合、ユーザーは情報を送信し、その中でコマンドが認識されないため、トークンは機能しません)。これらは、後で自動的に呼び出されます。別の。
トリガーは、ユーザー コマンドを決定する方法としてだけでなく、情報を収集するためにも使用できます。
//$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 ;
);
ボットはトリガーのデータのインスタンスを 1 つだけ保存するため、最後に受信したデータのみを取得できます。
応答は、トリガーがトリガーされるとすぐにボットがユーザーに送信する情報です。
//$personTrigger – назначен как следующий триггер после $yoTrigger
$ bot -> sendResponse ( $ personTrigger , static function () use ( $ bot ){
$ answer = new Answer ();
$ answer -> addText ( ' Один вариант ответа ' , ' Од!ин вари!ант отв!ета ' );
return $ answer ;
);
addText メソッドには 2 つの文字列引数があります。 1 つ目はユーザーに表示されるテキストを出力するために使用され、2 つ目は同じテキストを TTS 形式で出力します。
インタラクティブ性を高めるには、複数の可能な回答オプションを使用する必要があります。配送オプションはランダムに選択されます。
$ bot -> sendResponse ( $ bullshitTrigger , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Да не может быть! ' );
$ answer -> addText ( ' Чушь собачья! ' );
$ answer -> addText ( ' Не верю! ' );
return $ answer ;
);
応答するボタンを付けることができます。これは、Web ページへのリンク、またはクリックされるとトリガーを引き起こすボタンである可能性があります。複数のボタンと異なるタイプを使用できます。
$ bot -> sendResponse ( $ helloPerson , static function () {
$ answer = new Answer ();
$ answer -> addText ( ' Может познакомимся? ' );
$ buttonY = new Button ( ' Давай ' );
$ answer -> addButton ( $ button );
$ buttonN = new Button ();
$ buttonN -> setTitle ( ' Неа ' );
return $ answer ;
);
この例では、ボタンをクリックすると、「委任」セクションの例の $nameTrigger が呼び出されます。したがって、$nameTrigger は、ユーザーの声によって呼び出すことも、ユーザーがおしゃべりでない場合はボタンを押すことによって呼び出すこともできます。
Alice ボットは、ダイアログの下に配置されたボタンとして、および送信された応答内のリンクとして、という 2 つの異なる形式でユーザーにボタンを表示できます。
$ 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 ' ]);
ユーザーによって送信され、トリガーによってバインドおよび保存されるデータに加えて、独自のデータを保存することもできます。
$ bot ->sendResponse( $ firstRequest , static function () use ( $ bot ) {
* * *
$ bot -> storeCommonData ( ' Черный чай ' , ' TEA ' );
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
$ bot ->sendResponse( $ secondRequest , static function () use ( $ bot ) {
* * *
$ bot -> getCommonData ( ' TEA ' ); // Вернет "Черный чай", в т.ч. если пользователь уже перешел к другому запросу
* * *
);
トリガーにデータの受け入れだけでなく検証も含まれる場合は、ループを使用する必要があります。
//Допустим что код триггера $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 ;
});