Страница 14 из 38
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 5:39 pm
nick7zmail
Ну...от модуля в том числе...но согласен - надо массово системный ивэнт SAY переделывать для начала...
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 5:54 pm
olehs
А расскажите, в чем проблема с приоритетами. Может что-то придумаю.
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 6:04 pm
fandaymon
olehs писал(а):А расскажите, в чем проблема с приоритетами. Может что-то придумаю.
Сейчас порядок такой - простые устройства/api.ai (в зависимости от приоритетов, но проблема в том что приоритет можно поменять только вручную в таблицу, а по умолчанию и у тех и у других он равен 100, поэтому случайным образом первыми выполняются то устройства, то api.ai) и только потом отрабатывают шаблоны. Скажем мне это не удобно, поэтому приходится в коде менять порядок выполнения. Как я это делаю написано где-то 3-4 страницы назад. В принципе ничего там сложного нету - просто поменять порядок выполнения команд. Но лучше конечно если бы Сергей это изменения добавил бы в код, чтобы он не затирался.
Ссылочка на сообщение тут
viewtopic.php?f=5&t=3635&start=80#p68997
Ещё проблема в том, что хотя и предусмотрен выход из цикла обработчиков command по уставновке break, но реально break нигде не устанавливается и поэтому всегда отрабатывают и прострые устройства и api.ai. А резльтат работы берётся по последнему отработавшему... Т.е. если Простые устройства отработали, а в слудующем за ним api.ai нужного шаблона не нашлось, то всё равно выполнятся Шаблоны и если там ничего не будет, то система произнесёт Неизвестная команда, хотя по факту Простое устройство включится
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 6:14 pm
olehs
Ой, тут я уже не помогу, т.к. с Простыми устройствами вообще не работал (они у меня почему-то все сложные ))).
Даже и не знал, что у них отдельная обработка голосовых команд.
Это надо, чтобы Сергей занялся.
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 6:19 pm
olehs
Добавил в модуль проверку возвращаемого значения из обработчика Action.
Если из него вернуть
- управление передастся дальше другим обработчикам (в т.ч. без проговаривания ответа от API.AI)
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 6:40 pm
olehs
По поводу приоритетов.
В обработчике processSubscriptions стоит проверка на возвращаемое значение - если модуль вернул BREAK, обработка остальных подписчиков прекращается.
Далее управление передастся Шаблонам, но только в том случае, если ни один модуль не вернул PROCESSED.
Т.е так и не понял, в каком сценарии нужны приоритеты. Они и не нужны, если модули правильно отрабатывают свою подписку, а у вас в настройках нет дублирующих шаблонов.
Не смотрел, что там в простых устройствах, но в случае с API.AI, есть возможность отключить вывод сообщения для input.unknown, а BREAK и PROCESSED он корректно выставляет.
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 6:47 pm
olehs
Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 7:06 pm
fandaymon
olehs писал(а):Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
Ну тут каждый организует как ему удобнее. Мне удобнее чтобы какие-то жестко заданные команды обрабатывались сразу шаблоном, а то что не настолько жестко задано, чтобы дальше разбирал api.ai. Опять же - хочется строить включение на api.ai, просто не делай шаблонов включи

Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 7:34 pm
olehs
Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.
А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI
а в commandReceived вручную вызвать обработчик модуля
Код: Выделить всё
include_once(DIR_MODULES.'/apiai/apiai.class.php');
$obj = new apiai();
$obj->processSubscription('COMMAND', array('message'=>$params['command']));
Re: Модуль API.AI
Добавлено: Сб фев 24, 2018 7:51 pm
fandaymon
olehs писал(а):Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.
Ну почему же нельзя? В шаблонах тоже контекст есть.
olehs писал(а):
А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI
а в commandReceived вручную вызвать обработчик модуля
Код: Выделить всё
include_once(DIR_MODULES.'/apiai/apiai.class.php');
$obj = new apiai();
$obj->processSubscription('COMMAND', array('message'=>$params['command']));
Кстати, да... Такое мне в голову не пришло - спасибо за идею. Ну в принципе так можно реализовать то что народ хотел - произвольный порядок выполнения. Так как умные устройства можно точно так же отписать и вызывать их в этом же методе в том порядке в каком нужно.