[Модуль] API.AI (apiai)
Модератор: immortal
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Модуль API.AI
Ну...от модуля в том числе...но согласен - надо массово системный ивэнт SAY переделывать для начала...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль API.AI
Сейчас порядок такой - простые устройства/api.ai (в зависимости от приоритетов, но проблема в том что приоритет можно поменять только вручную в таблицу, а по умолчанию и у тех и у других он равен 100, поэтому случайным образом первыми выполняются то устройства, то api.ai) и только потом отрабатывают шаблоны. Скажем мне это не удобно, поэтому приходится в коде менять порядок выполнения. Как я это делаю написано где-то 3-4 страницы назад. В принципе ничего там сложного нету - просто поменять порядок выполнения команд. Но лучше конечно если бы Сергей это изменения добавил бы в код, чтобы он не затирался.olehs писал(а):А расскажите, в чем проблема с приоритетами. Может что-то придумаю.
Ссылочка на сообщение тут viewtopic.php?f=5&t=3635&start=80#p68997
Ещё проблема в том, что хотя и предусмотрен выход из цикла обработчиков command по уставновке break, но реально break нигде не устанавливается и поэтому всегда отрабатывают и прострые устройства и api.ai. А резльтат работы берётся по последнему отработавшему... Т.е. если Простые устройства отработали, а в слудующем за ним api.ai нужного шаблона не нашлось, то всё равно выполнятся Шаблоны и если там ничего не будет, то система произнесёт Неизвестная команда, хотя по факту Простое устройство включится
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Модуль API.AI
Ой, тут я уже не помогу, т.к. с Простыми устройствами вообще не работал (они у меня почему-то все сложные ))).
Даже и не знал, что у них отдельная обработка голосовых команд.
Это надо, чтобы Сергей занялся.
Даже и не знал, что у них отдельная обработка голосовых команд.
Это надо, чтобы Сергей занялся.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Модуль API.AI
Добавил в модуль проверку возвращаемого значения из обработчика Action.
Если из него вернуть
- управление передастся дальше другим обработчикам (в т.ч. без проговаривания ответа от API.AI)
Если из него вернуть
Код: Выделить всё
return false;
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Модуль API.AI
По поводу приоритетов.
В обработчике processSubscriptions стоит проверка на возвращаемое значение - если модуль вернул BREAK, обработка остальных подписчиков прекращается.
Далее управление передастся Шаблонам, но только в том случае, если ни один модуль не вернул PROCESSED.
Т.е так и не понял, в каком сценарии нужны приоритеты. Они и не нужны, если модули правильно отрабатывают свою подписку, а у вас в настройках нет дублирующих шаблонов.
Не смотрел, что там в простых устройствах, но в случае с API.AI, есть возможность отключить вывод сообщения для input.unknown, а BREAK и PROCESSED он корректно выставляет.
В обработчике processSubscriptions стоит проверка на возвращаемое значение - если модуль вернул BREAK, обработка остальных подписчиков прекращается.
Далее управление передастся Шаблонам, но только в том случае, если ни один модуль не вернул PROCESSED.
Т.е так и не понял, в каком сценарии нужны приоритеты. Они и не нужны, если модули правильно отрабатывают свою подписку, а у вас в настройках нет дублирующих шаблонов.
Не смотрел, что там в простых устройствах, но в случае с API.AI, есть возможность отключить вывод сообщения для input.unknown, а BREAK и PROCESSED он корректно выставляет.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Модуль API.AI
Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль API.AI
Ну тут каждый организует как ему удобнее. Мне удобнее чтобы какие-то жестко заданные команды обрабатывались сразу шаблоном, а то что не настолько жестко задано, чтобы дальше разбирал api.ai. Опять же - хочется строить включение на api.ai, просто не делай шаблонов включиolehs писал(а):Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Модуль API.AI
Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.
А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI
а в commandReceived вручную вызвать обработчик модуля
А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI
Код: Выделить всё
unsubscribeFromEvent('apiai', 'COMMAND');
Код: Выделить всё
include_once(DIR_MODULES.'/apiai/apiai.class.php');
$obj = new apiai();
$obj->processSubscription('COMMAND', array('message'=>$params['command']));
- Рейтинг: 1.16%
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль API.AI
Ну почему же нельзя? В шаблонах тоже контекст есть.olehs писал(а):Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.
Кстати, да... Такое мне в голову не пришло - спасибо за идею. Ну в принципе так можно реализовать то что народ хотел - произвольный порядок выполнения. Так как умные устройства можно точно так же отписать и вызывать их в этом же методе в том порядке в каком нужно.olehs писал(а): А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AIа в commandReceived вручную вызвать обработчик модуляКод: Выделить всё
unsubscribeFromEvent('apiai', 'COMMAND');
Код: Выделить всё
include_once(DIR_MODULES.'/apiai/apiai.class.php'); $obj = new apiai(); $obj->processSubscription('COMMAND', array('message'=>$params['command']));