nick7zmail писал(а):
Что должно происходить по моему мнению (и не только моему...как раз там это обсуждалось):
-Выполняем шаблон
-Если данного шаблона не найдено - передаём в простые устройства
-Если в простых устройствах не найдено - передаём управление API.AI
-Если в API.AI ничего не найдено - он возвращает intetnt.unknown (это собственно так и есть сейчас)
Если хоть в 1 из обработчиков нашлась реакция - НЕ ПЕРЕДАЁМ управление далее.
Порядок обработчиков должен задаваться пользователем...(как кому удобно - сперва шаблоны, потом устройства, наоборот, или вообще сперва в api.ai передавать)...
Как я уже писал ранее, плохо, если шаблоны будут обрабатываться первыми, вот почему: из-за своей многоуровневости - как только сработал первый уровень "включи" - дальше управление не передастся, даже если на следующем уровне определится, что это не нужный шаблон.
Выход: добавить в обработчики шаблонов возможность указать, что это ложная сработка шаблона. Тогда для меня, например, вообще будет не важен порядок выполнения - я смогу разрулить все разными шаблонами/контекстами
С простыми устройствами - трудно сказать, т.к. не пользую их, видимо из-за них у Вас все проблемы и возникли )) Как я понял, именно они не умеют "вовремя остановится" и не передавать обработку дальше.
Выход: даже не знаю, постараюсь на досуге глянуть как они работают.
Последней точкой (реакцией на неизвестную команду), к.м.к, все-таки лучше сделать как и задумано Сергеем - метод commandReceived. т.к. он локальный и там не так много вариантов ответа. Использовать для этой цели "Искусственный Интеллект

" API.AI - это как из пушки по воробьям, хотя у меня самого довольно долго в этом месте стоял бот iii.ru - гостям нравилось.
Ну и для понимания, зачем я все это затеял
У меня через шаблоны уже были настроены схемы включения типа Включи свет - Где именно - В прихожей. Но у меня есть несколько стационарных терминалов и если запрос приходит от них - зачем спрашивать Где? Эту проблему теперь можно решить с помощью api.ai - туда передается терминал.
Вторая проблема - это одновременные голосовые запросы из разных мест. Сейчас sayReply отвечает на тот терминал, с которого пришел последний запрос. Если кроме Вас кто-то еще решил воспользоваться голосовым управлением одновременно с вами - скорее всего последним сообщением в логе будут маты
Модуль api.ai сейчас ведет отдельные сессии для каждого терминала (если он указан). Туда же передается пользователь, что тоже может пригодится в случае мобильных терминалов.
Кроме того, сейчас я сделал возможным передавать из МЖД в api.ai сущности (Entity, как глобальные, так и сессионные). Что это даст? Можно, например сказать "Включи Deep Purple", где Deep Purple - это имя альбома из вашей медиатеки или вообще конкретную песню. И это не должно конфликтовать со всеми остальными "включи ..."
Отдельная тема - это контексты и реализуемые с их помощью диалоги. Сейчас их можно реализовывать как в шаблонах, так и в api.ai. Тут я вообще не понимаю как сделать, чтобы они не мешали друг другу. Получается их можно вести только в том модуле, который обрабатывается первым.