Контексты в шаблонах поведения

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение Vovix » Вт фев 17, 2015 2:18 am

У меня при наборе команды "помощь"
стало появляться в чате Алисы, кратковременно это:

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

Warning: file_get_contents(http://translate.google.com/translate_tts?tl=ru&ie=UTF-8): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in C:\_majordomo\htdocs\lib\tts.class.php on line 30
03:15 Алиса: 
только на команду ПОМОЩЬ!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Вт фев 17, 2015 3:14 am

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение Vovix » Вт фев 17, 2015 8:14 am

sergejey писал(а):Похоже на ошибку преобразователя текста в звуковой файл голоса. Возможно, сервис гугла по какой-то причине недоступен с компьютера, а другие команды выдают закэшированные фразы и не показывают ошибки из-за этого.
сервис похоже доступен!
Проверял через команду "повтори что-то новое"
всё отрабатывает отлично,
а вот "помощь" - уже той ошибки не вижу (на удаленном компе), но список доступных команд не выдает - выдает пустую строку!

может в названиях команд проблема там ведь спецсимволы - (, |, ) ?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение Vovix » Вт фев 24, 2015 2:27 am

Ага, похоже нашел в чем проблема!

Есть одна особенность регулярных выражений!

Например Шаблон:

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

повтори (.+)|скажи (.+)
работает так:
если написать "повтори поздравляю с праздником"

и в обработчике будет код:

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

say($matches[1],5);
то всё пройдет как надо - Алиса произнесет "поздравляю с праздником"
но если не меняя код обработки написать "скажи поздравляю с праздником", то получим ошибку и пустую строку!
Потому, что для вхождения слова скажи, всё что за ним это $matches[2] а не $matches[1]

т.е. в коде надо делать доп обработку этого или вообще использовать это по отдельности!

Обратите внимания пользователи connect из первой 10-ки, у некоторых такая ошибка присутствует!!! :D
За это сообщение автора Vovix поблагодарили (всего 2):
Bagir (Вт фев 24, 2015 2:30 am) • LeonidMarchuk (Вс янв 28, 2018 5:53 pm)
Рейтинг: 2.33%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение Vovix » Вт фев 24, 2015 1:39 pm

шаблон "помощь", заработал, но как-то коряво!

Вот его код:

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

$actions=$this->getAvailableActions();
$total=count($actions);
for($i=0;$i<$total;$i++) {
 say($actions[$i]);
}
Вот список моих шаблонов:

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

Алиса (1000)       
Состояние системы (900)       
Общий контекст (300)       
      забудь (20)       
      помощь (10)       
      Алиса о себе (0)       
      время (0)       
      привет (0)       
Запомни (220)       
Повтори (200)       
Поставь будильник (41)       
Включи или выключи (40)       
      будильник (включить или выключить) (0)       
      будильник (включить на XX часов YY минут) (0)       
      свет (0)       
      везде (0)       
      гардероб (0)       
      зал (0)       
      коридор (0)       
      лестница (0)       
      спальня (0)       
      туалет (0)       
      ярославна (0)       
Где сейчас (0)       
      Владимир (0)       
Напомни через (0)       
Открой (0)       
     калитку (0)       
А вот только это выдает на команду "помощь":

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

14:21 Алиса: Повтори
14:21 Алиса: Поставь будильник
14:21 Алиса: Напомни через
14:21 Алиса: Где сейчас
14:21 Алиса: Открой
14:21 Алиса: Состояние системы
14:21 Алиса: Включи или выключи
14:21 Владимир: помощь
А почему не все? Где у меня ошибка, ни как не пойму?
За это сообщение автора Vovix поблагодарил:
LeonidMarchuk (Вс янв 28, 2018 5:52 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Вт фев 24, 2015 4:12 pm

$this->getAvailableActions();
эта функция не возвращает действие, если оно помечено как глобальный контекст, возможно из-за этого.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение Vovix » Ср фев 25, 2015 10:29 am

sergejey писал(а):$this->getAvailableActions();
эта функция не возвращает действие, если оно помечено как глобальный контекст, возможно из-за этого.
Да спасибо! точно так и есть!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Вт июн 09, 2015 4:00 pm

Небольшое обновление в работе шаблонов.

Захотелось мне реализовать одну интересную возможность, а именно давать условные поручения Алисе человеческим языком. Проще объяснить на примерах (голосовых) команд:
"когда я скажу привет скажи пока"
"когда откроются ворота включи свет в коридоре"
"если пойдёт дождь закрой гараж"

Рассмотрим первый пример "когда я скажу привет скажи пока" -- предложение состоит из двух частей: 1 условие, 2 действие. Это всё можно описать как обычный шаблон поведения с реакцией на ключево слово "привет". Сложности две: первая -- я хочу, чтобы шаблон создавался сам по описанным мной критериям, вторая -- мне нужно выполнить эту задачу единовременно, потому что в следующий раз реакция должна быть другой или её может вообще не нужно.

Ниже пример того, как эта задача может быть сейчас решена.

1. В шаблонах поведения создаём контекст с названием "когда я"
Изображение
В нём ничего настраивать не нужно, кроме того, что выделить галочку "использовать как контекст"

2. Создаём дочерний шаблон c названием "скажу (.+?) (.+)" (кто не знает -- если не вводить ничего в поле Шаблон, то название используется в качестве Шаблона)
Имеем вот такое дерево:
Изображение

3. Самое интересное. Прописываем в поле "Выполнить при совпадении" последнего добавленного нами шаблона следующий код:

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

$new_pattern=array();
$new_pattern['ONETIME']=1; // флаг того, что шаблон будет одноразовый
$new_pattern['SKIPSYSTEM']=1; // флаг того, что шаблон не будет реагировать на системные уведомления, только пользовательские
$new_pattern['SCRIPT']='say("'.$matches[2].'",0,'.$from_user_id.');'; // код реакции нашего шаблона
addPattern($matches[1],$new_pattern,1); // добавляем описанный шаблон
say("Добавлена реакция на слово \"".$matches[1]."\"",2); // подтверждаем то, что реакция добавлена
Этот код с помощью функции addPattern создаёт новый обработчик, который будет реагировать на указанное нами ключевое слово. Важные нововведения это флаг ONETIME и SKIPSYSTEM. Первый доступен только при программном создании шаблона и указывает, что шаблон будет удалён после первого совпадения, а второй теперь доступен в настройках каждого шаблона -- его можно использовать для исключения ситуации, когда система реагирует сама на себя.

Ещё важный момент -- в реакции созданного шаблона используется функция say, где кроме фразы и приоритета добавился ещё один параметр -- от имени кого будет сказана фраза ($from_user_id в данном случае будет равен идентификатору текущего пользователя). Смысл в том, что б в нужный момент произнести фразу как бы от имени пользователя, чтобы система с помощью тех же шаблонов поведения на неё среагировала.

Возможно, выглядит на первый взгляд сложно, но возможности появляются очень интересные. Можно делать разовые поручения, комбинируя имеющиеся условия и команды. Можно так же создавать не разовые, а постоянные условные реакции (просто убрать флаг ONETIME).

Я немного ещё сам поиграюсь с этим функционалом, возможно что-то подправлю и чуть позже опишу больше способов интересного использования.
За это сообщение автора sergejey поблагодарили (всего 4):
Dark_Veter (Вт июн 09, 2015 4:41 pm) • kawkay (Вт июн 09, 2015 5:37 pm) • Amarok (Ср июн 10, 2015 9:18 am) • Bagir (Пн сен 05, 2022 12:58 pm)
Рейтинг: 4.65%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
sleepy
Сообщения: 24
Зарегистрирован: Чт июн 11, 2015 9:17 pm
Откуда: Ростов-на-Дону
Благодарил (а): 2 раза
Поблагодарили: 7 раз

Re: Контексты в шаблонах поведения

Сообщение sleepy » Чт июн 11, 2015 9:45 pm

Всем доброго времени суток!
На недели установил данный проект и решил настроить ряд шаблонов.
Не могу придумать, как правильно сделать:
1. Возможность включать "Режим команд" - в данном режиме не надо постоянно говорить ключевое слово (у меня все шаблоны начинаются "алиса"), после чего алиса должна воспринимать именно команды.
2. Возможность включать "Режим диалога" - в данном режиме не надо постоянно говорить ключевое слово, после чего алиса никакие команды не выполняет(даже если совпадут шаблоны), а просто ведёт беседу (выполняет определённую группу шаблонов).
3. У меня 2 компа. Один стоит у телика и служит для запуска фильмов через hdmi. Решил сделать шаблон Алиса --- запусти/закрой/и т.д ------ зал/основной комп ------- фильм/музыку. Нормально работает, только один раз. А хочется:
-Админ - алиса
-Алиса - Чё хочу?
-Админ - запусти фильм
-Алиса - (сейчас отвечает) Где? (а потом спрашивает "Что именно фильм или музыку?")
а хочется, что бы она запоминала один из нужных параметров при этом не важно в какой последовательности я это сказал. Иначе мне надо писать 2 шаблона?
Алиса --- запусти/закрой/и т.д ------ зал/основной комп ------- фильм/музыку
Алиса --- запусти/закрой/и т.д ------- фильм/музыку ------ зал/основной комп

4. Есть ли возможность кодом перейти в нужную ступень шаблона? Например:
Алиса --- запусти/закрой/и т.д ------ зал/основной комп ------- фильм/музыку
-алиса
-запусти
-нет (тут возврат в Алиса)
-закрой
-в зале
- нет (тут возврат в Закрой)
.
Если такая возможность есть, то можно будет решить первые 3 вопроса. Просто всё программными переходами сделать.


p.s.
надеюсь поймёте в чём мои проблемы :)

p.p.s
не уверен что в нужной ветке отписался, но более подходящей темы не нашёл.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Контексты в шаблонах поведения

Сообщение sergejey » Пт июн 12, 2015 11:31 am

sleepy писал(а):4. Есть ли возможность кодом перейти в нужную ступень шаблона? Например:
Алиса --- запусти/закрой/и т.д ------ зал/основной комп ------- фильм/музыку
-алиса
-запусти
-нет (тут возврат в Алиса)
-закрой
-в зале
- нет (тут возврат в Закрой)
.
Если такая возможность есть, то можно будет решить первые 3 вопроса. Просто всё программными переходами сделать.
Ветка подходящая, как раз о шаблонах и контекстах.
Активировать вручную нужный контекст (ступень шаблона) можно функцией context_activate($id); (вместо $id нужно вставить цифровой код шаблона -- он виден в ссылке при редактировании шаблона/контекста).

А ещё проще использовать эту опцию в настройке шаблона:
Изображение

Т.е. при совпадении (на слово Нет, к примеру) можно установить выход на контекст более высокого уровня.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить