[Модуль] API.AI (apiai)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль API.AI

Сообщение nick7zmail » Сб фев 24, 2018 5:39 pm

Ну...от модуля в том числе...но согласен - надо массово системный ивэнт SAY переделывать для начала...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 5:54 pm

А расскажите, в чем проблема с приоритетами. Может что-то придумаю.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Сб фев 24, 2018 6:04 pm

olehs писал(а):А расскажите, в чем проблема с приоритетами. Может что-то придумаю.
Сейчас порядок такой - простые устройства/api.ai (в зависимости от приоритетов, но проблема в том что приоритет можно поменять только вручную в таблицу, а по умолчанию и у тех и у других он равен 100, поэтому случайным образом первыми выполняются то устройства, то api.ai) и только потом отрабатывают шаблоны. Скажем мне это не удобно, поэтому приходится в коде менять порядок выполнения. Как я это делаю написано где-то 3-4 страницы назад. В принципе ничего там сложного нету - просто поменять порядок выполнения команд. Но лучше конечно если бы Сергей это изменения добавил бы в код, чтобы он не затирался.

Ссылочка на сообщение тут viewtopic.php?f=5&t=3635&start=80#p68997

Ещё проблема в том, что хотя и предусмотрен выход из цикла обработчиков command по уставновке break, но реально break нигде не устанавливается и поэтому всегда отрабатывают и прострые устройства и api.ai. А резльтат работы берётся по последнему отработавшему... Т.е. если Простые устройства отработали, а в слудующем за ним api.ai нужного шаблона не нашлось, то всё равно выполнятся Шаблоны и если там ничего не будет, то система произнесёт Неизвестная команда, хотя по факту Простое устройство включится
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 6:14 pm

Ой, тут я уже не помогу, т.к. с Простыми устройствами вообще не работал (они у меня почему-то все сложные ))).
Даже и не знал, что у них отдельная обработка голосовых команд.
Это надо, чтобы Сергей занялся.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 6:19 pm

Добавил в модуль проверку возвращаемого значения из обработчика Action.
Если из него вернуть

Код: Выделить всё

return false; 
- управление передастся дальше другим обработчикам (в т.ч. без проговаривания ответа от API.AI)
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 6:40 pm

По поводу приоритетов.
В обработчике processSubscriptions стоит проверка на возвращаемое значение - если модуль вернул BREAK, обработка остальных подписчиков прекращается.
Далее управление передастся Шаблонам, но только в том случае, если ни один модуль не вернул PROCESSED.

Т.е так и не понял, в каком сценарии нужны приоритеты. Они и не нужны, если модули правильно отрабатывают свою подписку, а у вас в настройках нет дублирующих шаблонов.
Не смотрел, что там в простых устройствах, но в случае с API.AI, есть возможность отключить вывод сообщения для input.unknown, а BREAK и PROCESSED он корректно выставляет.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 6:47 pm

Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Сб фев 24, 2018 7:06 pm

olehs писал(а):Более того, я даже против обработки Шаблонов до модулей, т.к. из них невозможно управлять дальнейшей обработкой.
Например, у вас есть шаблон Включи (как контекст), а уже в нем есть Свет, Вытяжку. В таком случае невозможно определить, что является сработкой шаблона, т.к. при фразе "Включи телевизор" сработает шаблон "включи" и управление не передастся модулям.
Ну тут каждый организует как ему удобнее. Мне удобнее чтобы какие-то жестко заданные команды обрабатывались сразу шаблоном, а то что не настолько жестко задано, чтобы дальше разбирал api.ai. Опять же - хочется строить включение на api.ai, просто не делай шаблонов включи 8-)
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Сб фев 24, 2018 7:34 pm

Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.

А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI

Код: Выделить всё

unsubscribeFromEvent('apiai', 'COMMAND'); 
а в commandReceived вручную вызвать обработчик модуля

Код: Выделить всё

include_once(DIR_MODULES.'/apiai/apiai.class.php');
$obj = new apiai();
$obj->processSubscription('COMMAND', array('message'=>$params['command'])); 
За это сообщение автора olehs поблагодарил:
fandaymon (Сб фев 24, 2018 8:35 pm)
Рейтинг: 1.16%
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Сб фев 24, 2018 7:51 pm

olehs писал(а):Ну вы о частном случае, а я об общем. А против я именно потому, что из Шаблонов нельзя управлять ходом обработки, из модулей - можно. Потому изменение порядка их выполнения - это уменьшение гибкости системы.
Ну почему же нельзя? В шаблонах тоже контекст есть.
olehs писал(а): А тем временем могу предложить, как можно изменить порядок обработки команд, не меняя исходники и таблицы вручную:
есть метод ThisComputer.commandReceived, который обрабатывается вообще в последнюю очередь.
Можно отменить подписку модуля на событие COMMAND где-нибудь в StartUp, например для API.AI

Код: Выделить всё

unsubscribeFromEvent('apiai', 'COMMAND');
а в commandReceived вручную вызвать обработчик модуля

Код: Выделить всё

include_once(DIR_MODULES.'/apiai/apiai.class.php');
$obj = new apiai();
$obj->processSubscription('COMMAND', array('message'=>$params['command']));
Кстати, да... Такое мне в голову не пришло - спасибо за идею. Ну в принципе так можно реализовать то что народ хотел - произвольный порядок выполнения. Так как умные устройства можно точно так же отписать и вызывать их в этом же методе в том порядке в каком нужно.
Ответить