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

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

Модератор: immortal

Onilo09
Сообщения: 28
Зарегистрирован: Пн окт 02, 2017 11:42 am
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: Модуль API.AI

Сообщение Onilo09 » Сб мар 31, 2018 7:29 pm

новая проблема, программист из меня так себе, но все равно пытаюсь писать ,
написал обработчик который выключает или включает то или иное устройство, пока тестирую только на освещении, с определением комнаты по терминалу или использованием информации с Entities , если комната указана конкретно.
столкнулся с проблемой алиса транслирует через say ответ api.ai, когда я проговариваю комнату, притом когда комната определяется по терминалу , информация идет через sayTo как и должно.

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

// $params['actions'] (ex '1');
// $params['devices']
// $params['room']
$room=$params['room'];
 $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
 if($data['result']['actionIncomplete']) {
  $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
  ask($msg, $source);
} elseif ($room<>'') {
      $data['result']['fulfillment']['speech'] = '';      
         $item= getObjectsByProperty("linkedRoom","=",$params['room']);
                  if (count($item)==0){
                 $data['result']['fulfillment']['speech'] = '';
                sayTo("в этой комнате не возможно,комнаты или устройств в этой комнате не существует",2,$source);
//  $data['result']['fulfillment']['speech'] = '';
             
                       } 
         $countdev=0;
                      foreach ($item as $tipe) {

                      
                                if (gg($tipe.'.loadType')== $params['devices']){
                                 $countdev++;
                                      if (gg($tipe.'.status')==$params['actions']){
                                        $data['result']['fulfillment']['speech'] = '';
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                                    sg($tipe.'.status',$params['actions']);
                                  
                                }
                       }
         if($countdev==0){
         $data['result']['fulfillment']['speech'] = '';
         sayTo("подобных устройств в этой комнате не существует",2,$source);
       
         }
        


 
 
 
 }elseif($room==''){
          

              $dat=getObjectsByProperty("terminal","=", $source);
            $item= getObjectsByProperty("linkedRoom","=", $dat[0]);

                foreach ($item as $tipe) {

                    if (gg($tipe.'.loadType')== $params['devices']){
                     if (gg($tipe.'.status')==$params['actions']){
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                        sg($tipe.'.status',$params['actions']);
                      sayTo($msg,2,$source);
                    }
                }
 
        
                        }       
 
 
                        
                        
                        
              

насувал

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

$data['result']['fulfillment']['speech'] = ''; 
где только можно , все равно продолжает вещать на всех...
понимаю что проблема в коде , но понять не могу
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Пн апр 02, 2018 10:50 pm

Мало ли кто не заметил как я. Шаблоны можно задавать.
переключать тутПоказать
2018-04-02_22-47-48.png
2018-04-02_22-47-48.png (11.07 КБ) 3566 просмотров
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Пн апр 02, 2018 11:36 pm

Onilo09 писал(а):
Сб мар 31, 2018 7:29 pm
новая проблема, программист из меня так себе, но все равно пытаюсь писать ,
написал обработчик который выключает или включает то или иное устройство, пока тестирую только на освещении, с определением комнаты по терминалу или использованием информации с Entities , если комната указана конкретно.
столкнулся с проблемой алиса транслирует через say ответ api.ai, когда я проговариваю комнату, притом когда комната определяется по терминалу , информация идет через sayTo как и должно.

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

// $params['actions'] (ex '1');
// $params['devices']
// $params['room']
$room=$params['room'];
 $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
 if($data['result']['actionIncomplete']) {
  $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
  ask($msg, $source);
} elseif ($room<>'') {
      $data['result']['fulfillment']['speech'] = '';      
         $item= getObjectsByProperty("linkedRoom","=",$params['room']);
                  if (count($item)==0){
                 $data['result']['fulfillment']['speech'] = '';
                sayTo("в этой комнате не возможно,комнаты или устройств в этой комнате не существует",2,$source);
//  $data['result']['fulfillment']['speech'] = '';
             
                       } 
         $countdev=0;
                      foreach ($item as $tipe) {

                      
                                if (gg($tipe.'.loadType')== $params['devices']){
                                 $countdev++;
                                      if (gg($tipe.'.status')==$params['actions']){
                                        $data['result']['fulfillment']['speech'] = '';
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                                    sg($tipe.'.status',$params['actions']);
                                  
                                }
                       }
         if($countdev==0){
         $data['result']['fulfillment']['speech'] = '';
         sayTo("подобных устройств в этой комнате не существует",2,$source);
       
         }
        


 
 
 
 }elseif($room==''){
          

              $dat=getObjectsByProperty("terminal","=", $source);
            $item= getObjectsByProperty("linkedRoom","=", $dat[0]);

                foreach ($item as $tipe) {

                    if (gg($tipe.'.loadType')== $params['devices']){
                     if (gg($tipe.'.status')==$params['actions']){
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                        sg($tipe.'.status',$params['actions']);
                      sayTo($msg,2,$source);
                    }
                }
                        }       
                       
              

насувал

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

$data['result']['fulfillment']['speech'] = ''; 
где только можно , все равно продолжает вещать на всех...
понимаю что проблема в коде , но понять не могу
Насколько я вижу $source спрашивается только, если actionincomplete, во всех остальных ветках она никак не определяется, тем не менее везде sayto пытается её использовать.
Onilo09
Сообщения: 28
Зарегистрирован: Пн окт 02, 2017 11:42 am
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: Модуль API.AI

Сообщение Onilo09 » Ср апр 04, 2018 4:13 pm

fandaymon писал(а):
Пн апр 02, 2018 11:36 pm
Onilo09 писал(а):
Сб мар 31, 2018 7:29 pm
новая проблема, программист из меня так себе, но все равно пытаюсь писать ,
написал обработчик который выключает или включает то или иное устройство, пока тестирую только на освещении, с определением комнаты по терминалу или использованием информации с Entities , если комната указана конкретно.
столкнулся с проблемой алиса транслирует через say ответ api.ai, когда я проговариваю комнату, притом когда комната определяется по терминалу , информация идет через sayTo как и должно.

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

// $params['actions'] (ex '1');
// $params['devices']
// $params['room']
$room=$params['room'];
 $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
 if($data['result']['actionIncomplete']) {
  $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
  ask($msg, $source);
} elseif ($room<>'') {
      $data['result']['fulfillment']['speech'] = '';      
         $item= getObjectsByProperty("linkedRoom","=",$params['room']);
                  if (count($item)==0){
                 $data['result']['fulfillment']['speech'] = '';
                sayTo("в этой комнате не возможно,комнаты или устройств в этой комнате не существует",2,$source);
//  $data['result']['fulfillment']['speech'] = '';
             
                       } 
         $countdev=0;
                      foreach ($item as $tipe) {

                      
                                if (gg($tipe.'.loadType')== $params['devices']){
                                 $countdev++;
                                      if (gg($tipe.'.status')==$params['actions']){
                                        $data['result']['fulfillment']['speech'] = '';
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                                    sg($tipe.'.status',$params['actions']);
                                  
                                }
                       }
         if($countdev==0){
         $data['result']['fulfillment']['speech'] = '';
         sayTo("подобных устройств в этой комнате не существует",2,$source);
       
         }
        


 
 
 
 }elseif($room==''){
          

              $dat=getObjectsByProperty("terminal","=", $source);
            $item= getObjectsByProperty("linkedRoom","=", $dat[0]);

                foreach ($item as $tipe) {

                    if (gg($tipe.'.loadType')== $params['devices']){
                     if (gg($tipe.'.status')==$params['actions']){
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                        sg($tipe.'.status',$params['actions']);
                      sayTo($msg,2,$source);
                    }
                }
                        }       
                       
              

насувал

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

$data['result']['fulfillment']['speech'] = ''; 
где только можно , все равно продолжает вещать на всех...
понимаю что проблема в коде , но понять не могу
Насколько я вижу $source спрашивается только, если actionincomplete, во всех остальных ветках она никак не определяется, тем не менее везде sayto пытается её использовать.
после обновления все заработало как надо без изменений в коде , спасибо!


нет, несколько раз прошло нормально начал тестить снова, и снова алиса после того как говорит в терминал ,повторно говорит на все, при том разные варианты фраз, подозреваю дело в контекстах, разбираюсь...

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

{action: "events", data: "{"EVENT_DATA":{"NAME":"SAYTO","VALUE":{"level":2,"…2\u043e\u0432\u043e","destination":"denisroom"}}}"}
main.js:114 Sayto action processed
main.js:77 WS data (ws://192.168.1.39:8001/majordomo)
main.js:81 Action:events
main.js:83 {action: "events", data: "{"EVENT_DATA":{"NAME":"SAY","VALUE":{"level":2,"me…\u0442\u0435","member_id":0,"ignoreVoice":null}}}"}
все нашел проблему, в настройках было указано 15 секунд Client session timeout (seconds):, поставил на 0 , вроде как работает .
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Модуль API.AI

Сообщение fandaymon » Ср апр 04, 2018 5:18 pm

Gelezako писал(а):
Пн мар 26, 2018 9:38 pm
fandaymon писал(а): Не в say вывести, а просто на экран. 1 это означает скорее всего что print_r отработал нормально
Не понимаю почему вы советуете просто использовать print_r(), тут же нет возможность увидеть аутпут как это обычно происхохит. Вы пробовали писать сценарии для API.AI ? Я могу увидеть что там приехало в переменной только через say(). Ещё можно выводить в дебаг через debmes().
print_r можно так использовать

$b=print_r($a,1);
say($b);

Да, то что экрана нет - это я не подумал. В приведенном выше примере вывод пойдет в строковую переменную и уже её можно вывести с помощью say - в чате будет расписано всё тоже самое, что и при выводе print_r на экран. Ну это чтобы не бегать в дебаг всё время
Onilo09
Сообщения: 28
Зарегистрирован: Пн окт 02, 2017 11:42 am
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: Модуль API.AI

Сообщение Onilo09 » Вт апр 10, 2018 7:50 pm

все равно проговаривает в say периодами, можно ли отключить проговаривание вовсе, оставить только принудительное, то что в коде экшена? может в коде что закоментировать?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Вт апр 10, 2018 8:19 pm

вот это и есть, чтобы модуль ничего не проговаривал

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

$data['result']['fulfillment']['speech'] = '';
За это сообщение автора olehs поблагодарил:
Onilo09 (Ср апр 11, 2018 7:55 pm)
Рейтинг: 1.16%
Onilo09
Сообщения: 28
Зарегистрирован: Пн окт 02, 2017 11:42 am
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: Модуль API.AI

Сообщение Onilo09 » Вт апр 10, 2018 10:54 pm

olehs писал(а):
Вт апр 10, 2018 8:19 pm
вот это и есть, чтобы модуль ничего не проговаривал

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

$data['result']['fulfillment']['speech'] = '';

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

// $params['actions'] (ex '1');
// $params['devices']
// $params['room']
$room=$params['room'];
 $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
 if($data['result']['actionIncomplete']) {
  $msg = $data['result']['fulfillment']['speech'];
  $data['result']['fulfillment']['speech'] = '';
  ask($msg, $source);
} elseif ($room<>'') {
      $data['result']['fulfillment']['speech'] = '';      
         $item= getObjectsByProperty("linkedRoom","=",$params['room']);
                  if (count($item)==0){
                 $data['result']['fulfillment']['speech'] = '';
                sayTo("в этой комнате не возможно,комнаты или устройств в этой комнате не существует",2,$source);
//  $data['result']['fulfillment']['speech'] = '';
             
                       } 
         $countdev=0;
                      foreach ($item as $tipe) {

                      
                                if (gg($tipe.'.loadType')== $params['devices']){
                                 $countdev++;
                                      if (gg($tipe.'.status')==$params['actions']){
                                        $data['result']['fulfillment']['speech'] = '';
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                                    sg($tipe.'.status',$params['actions']);
                                  
                                }
                       }
         if($countdev==0){
         $data['result']['fulfillment']['speech'] = '';
         sayTo("подобных устройств в этой комнате не существует",2,$source);
       
         }
        


 
 
 
 }elseif($room==''){
          

              $dat=getObjectsByProperty("terminal","=", $source);
            $item= getObjectsByProperty("linkedRoom","=", $dat[0]);

                foreach ($item as $tipe) {

                    if (gg($tipe.'.loadType')== $params['devices']){
                     if (gg($tipe.'.status')==$params['actions']){
                                      sayTo("устройство уже в этом положении",2,$source);
                                      continue;
                                     }
                        sg($tipe.'.status',$params['actions']);
                      sayTo($msg,2,$source);
                    }
                }
                        }       

ставил, все равно проговаривает периодами , смотрел в консоли расширения хрома , говорит через say


при этом проговаривает 2 раза , один раз через sayTo который прописан, второй раз через say, и они бывают разными, то есть я в ответах прописал чтобы отвечала одну из фраз "готово, все сделала, все что пожелаешь" и при фразе " выключи свет в зале " она отвечает через sayTo( готово) и тут же через say( все сделала), будто отправляет команду 2жды и соответственно получает ответ 2жды.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль API.AI

Сообщение lanket » Пн апр 23, 2018 10:40 pm

В посленее время dialogflow предупреждает:
Dialogflow API V2 has officially launched. It is now the default API for all new Dialogflow agents and all new features will only be released on V2. Learn how to migrate your V1 agents here.
В переводе
Официально запущен Dialog flow API V2. Теперь это API по умолчанию для всех новых агентов потока диалоговых окон, и все новые функции будут выпущены только на версии 2. Узнайте, как перенести агенты V1 здесь.
Получается что новые пользователи модуля, или кто то захочет создать отдельного агента то они неизбежно будут в API V2
Соответственно вопрос: совместим ли модуль? так как версия 2 по правилам означает обратную несовметимость.
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Модуль API.AI

Сообщение olehs » Пн апр 23, 2018 10:59 pm

lanket писал(а):
Пн апр 23, 2018 10:40 pm
Соответственно вопрос: совместим ли модуль? так как версия 2 по правилам означает обратную несовметимость.
Ой, нет :(
Они не совместимы от слова "совсем".
Пока что работают обе версии, и в новых агентах можно переключить API назад на версию V1.

Если честно, я еще когда дописывал модуль, смотрел, не перейти ли на вторую версию. Но там все совсем по-другому.
Все равно нужно будет это сделать (благо, они выпустили либу для PHP), т.к. рано или поздно они первую версию прикроют ("корпорация добра", ведь :D ).
Да и функционал там обещают побогаче (голосовое распознавание и т.д.)
Ответить