Алиса не хочет проговаривать фразы из API.AI

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Ответить
WladL
Сообщения: 11
Зарегистрирован: Вт дек 17, 2019 12:19 am
Благодарил (а): 2 раза
Поблагодарили: 0

Алиса не хочет проговаривать фразы из API.AI

Сообщение WladL » Вс фев 23, 2020 8:50 am

Сервер на WIN7. Xampp

Суть в том, что то что генериться из внутренних скриптов Алиса озвучивает без проблем, но как только дело доходит до того что приходит из Dialogflow у нее затык. Молчит. При том что файлы с озвучкой в папке ..cms/caсhed/voice появляются как-то через раз(когда на второй ответ диалога появится, когда на первый, а иногда вообще ни на один), хотя они даже те что появляются не проговаривает.
Молчит на всех терминалах, включая majordroid.

PHP_error

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

[23-Feb-2020 06:12:07 Europe/Moscow] PHP Stack trace:
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   1. {main}() D:\xampp\htdocs\objects\index.php:0
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   2. processSubscriptions() D:\xampp\htdocs\objects\index.php:175
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   3. processSubscriptionByModule() D:\xampp\htdocs\lib\hooks.inc.php:147
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   4. terminals->processSubscription() D:\xampp\htdocs\lib\hooks.inc.php:100
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   5. terminals->terminalSay() D:\xampp\htdocs\modules\terminals\terminals.class.php:281
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   6. majordroid->say() D:\xampp\htdocs\modules\terminals\terminals.class.php:246
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   7. majordroid->sendMajorDroidCommand() D:\xampp\htdocs\modules\terminals\tts\majordroid.addon.php:12
[23-Feb-2020 06:12:07 Europe/Moscow] PHP   8. socket_connect() D:\xampp\htdocs\modules\terminals\tts\majordroid.addon.php:30
[23-Feb-2020 06:14:08 Europe/Moscow] PHP Warning:  Illegal string offset 'state' in D:\xampp\htdocs\modules\terminals\tts\mediaplayer.addon.php on line 40
И такая же хрень тут

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

Warning:  Illegal string offset 'TITLE' in D:\xampp\htdocs\modules\terminals\tts\mediaplayer.addon.php on line 64
циферку тут повышал до 10, не помогает
$time_shift = 2 + (int)getMediaDura.....
https://github.com/sergejey/majordomo/b ... on.php#L47

Sleep тоже не помог.
https://github.com/sergejey/majordomo-y ... s.php#L326

Вот собственно фрагмент кода из mediaplayer.addon.php зде весь затык

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

// получаем данные оплеере для восстановления проигрываемого контента
 $chek_restore = SQLSelectOne("SELECT * FROM jobs WHERE TITLE LIKE'" . 'allsay-target-' . $this->terminal['TITLE'] . '-number-' . "99999999998'");
        if (!$chek_restore) {
            $played = getPlayerStatus($this->terminal['NAME']);
            
            		//=================== Проверка 1 ==========================
			debmes('Проверка 1 : played[]-> '.implode(PHP_EOL,$played)."\n");
            if (($played['state'] == 'playing') and (stristr($played['file'], 'cms\cached\voice') === FALSE)) {
                addScheduledJob('allsay-target-' . $this->terminal['TITLE'] . '-number-99999999998', "playMedia('" . $played['file'] . "', '" . $this->terminal['TITLE'] . "',1);", time() + 100, 4);
                addScheduledJob('allsay-target-' . $this->terminal['TITLE'] . '-number-99999999999', "seekPlayerPosition('" . $this->terminal['TITLE'] . "'," . $played['time'] . ");", time() + 110, 4);
            }
        }

        // dobavlyaem soobshenie v konec potom otsortituem
        $time_shift = 2 + (int)getMediaDurationSeconds($cached_file); // необходимая задержка для перезапуска проигрівателя на факте 2 секундЫ
        //DebMes("Add new message".$last_mesage,'terminals');
        addScheduledJob('allsay-target-' . $this->terminal['TITLE'] . '-number-' . $number_message, "playMedia('" . $cached_file_url . "', '" . $this->terminal['TITLE'] . "');", time() + 1, $time_shift);

        // vibiraem vse soobsheniya dla terminala s sortirovkoy po nazvaniyu
        $all_messages = SQLSelect("SELECT * FROM jobs WHERE TITLE LIKE'" . 'allsay-target-' . $this->terminal['TITLE'] . '-number-' . "%' ORDER BY `TITLE` ASC");
        $first_fields = reset($all_messages);
        $runtime = (strtotime($first_fields['RUNTIME']));
        $prev_message = '';
        foreach ($all_messages as $message) {
        
        	//=================== Проверка 2 ==========================
		debmes('Проверка 2 : Message[]-> '.implode(PHP_EOL, $message)."\n");
            $expire = (strtotime($message['EXPIRE'])) - (strtotime($message['RUNTIME']));
            $rec['ID'] = $message['ID'];
            $rec['TITLE'] = $message['TITLE'];
            $rec['COMMANDS'] = $message['COMMANDS'];
            $rec['RUNTIME'] = date('Y-m-d H:i:s', $runtime);
            $rec['EXPIRE'] = date('Y-m-d H:i:s', $runtime + $expire);
            // proverka i udaleniye odinakovih soobsheniy
		if ($prev_message['TITLE'] == $message['TITLE']) {
			SQLExec("DELETE FROM jobs WHERE ID='" . $rec['ID'] . "'");
		} else {
			SQLUpdate('jobs', $rec);
		}
            $runtime = $runtime + $expire;
            $prev_message = $message;
        }
что собственно выходит

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

16:16:41 0.70651000 Проверка 1 : played[]-> 

16:16:41 0.81571100 Проверка 2 : Message[]-> 2896831
allsay-target-MAIN-number-2178
playMedia('http://192.168.1.70/cms/cached/voice/1e93e691209cfdded81c5c42053369f0_yandex.mp3', 'MAIN');
2020-02-23 16:16:42
2020-02-23 16:16:45
0

0
по всему выходит, что проблема тут
$played = getPlayerStatus($this->terminal['NAME']);
и в
$all_messages = SQLSelect("SELECT * FROM jobs WHERE TITLE LIKE'" . 'allsay-target-.....

Есть у кого мысли?
WladL
Сообщения: 11
Зарегистрирован: Вт дек 17, 2019 12:19 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Алиса не хочет проговаривать фразы из API.AI

Сообщение WladL » Вс фев 23, 2020 5:07 pm

расковырял проблему.
в файле ./lib/terminals.class.php функция

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

function getPlayerStatus($host = 'localhost')
{
    if (!$terminal = getTerminalsByName($host, 1)[0]) {
        $terminal = getTerminalsByHost($host, 1)[0];
    }
    if (!$terminal) {
		debmes('getPlayerStatus -> terminal is empty');
        return;
    }
	debmes('terminal - >'.$terminal['NAME']);
    include_once(DIR_MODULES . 'app_player/app_player.class.php');
    $player = new app_player();
    $player->play_terminal = $terminal['NAME']; // Имя терминала
    $player->command = 'pl_get'; // Команда
    $player->ajax = TRUE;
    $player->intCall = TRUE;
    $player->usual($out);
    $terminal = array();
    if ($player->json['success'] && is_array($player->json['data'])) {
        $terminal = array_merge($terminal, $player->json['data']);
        debmes('1:'.$player->json['data']);
    } else {
        // Если произошла ошибка, выводим ее описание
		debmes('error:'.$player->json['message']); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        return ($player->json['message']);
    }
вовзращает ошибку, которая нигде не светится !
16:55:56 0.71518000 error:Command "pl_get" is not supported for this player type!

Но теперь я совсем запутался, получается внутренние скрипты как-то по другому озвучку делают...другим плеером или с другой обвязкой?
Пока не понятно, что мне со всем этим делать дальше....
WladL
Сообщения: 11
Зарегистрирован: Вт дек 17, 2019 12:19 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Алиса не хочет проговаривать фразы из API.AI

Сообщение WladL » Вс фев 23, 2020 6:01 pm

копаем дальше
вот публичные методы текущего плеера
17:58:00 0.13729200 vlc - > play
17:58:00 0.13729200 vlc - > pause
17:58:00 0.13729200 vlc - > stop
17:58:00 0.13729200 vlc - > next
17:58:00 0.13729200 vlc - > previous
17:58:00 0.13729200 vlc - > set_volume

нужного pl_get среди них нет.
Знатоки, что делать то?
может какой другой плеер нужно доустановить?
WladL
Сообщения: 11
Зарегистрирован: Вт дек 17, 2019 12:19 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Алиса не хочет проговаривать фразы из API.AI

Сообщение WladL » Пн фев 24, 2020 9:29 pm

Разобрался с настройками плеера.
Если кому понадобится, то плеер ДОЛЖЕН БЫТЬ ЗАПУЩЕН ручками именно на терминале (или надо как-то из скрипта запуск рисовать) и оставаться висеть, и все настройки плееру делаем именно на терминале!
Модуль mediabrowser не поддерживает проигрывание *.ogg файлов (целый день потерял пока случайно другой файл не запустил).

Но! Api.ai все еще мудрит.
Голос обрабатывается, появляется командах виде текста. Далее приходит ответ от Dialogflow и тоже появляется в командах, но озвучки ответа нет!
Хотя файл под озвучку генерится и лежит в папке с кешем. Если же запросы в "команды" писать с клавы, то озвучка ответа приходит!
Кто Api.ai пользует, подскажите как далее с этим быть. Нужно самому скрипт на вывод озвучки писать или у меня что-то не донастроено?

все вот в этом куске apiai.class.php

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

if ($majordroid)
                ask($message, $source);
            else if (!sayTo($message, $this->config['SPEAK_PRIORITY'], $source)) 
			sayReply($message, $this->config['SPEAK_PRIORITY']);
$source - строка команд
если вместо sayTo использовать сразу sayReaply то появляется озвучка ответов, причем сразу 2 вместе.
одна вместе с уведомлением (от ChromeGateMJD), вторая от Yandex TTS.
.....
chaoba
Сообщения: 32
Зарегистрирован: Пн мар 25, 2019 12:37 pm
Благодарил (а): 14 раз
Поблагодарили: 2 раза

Re: Алиса не хочет проговаривать фразы из API.AI

Сообщение chaoba » Пн июн 08, 2020 2:47 pm

Попробовал использовать сервис Dialogflow.
Raspberry Pi3. Majordomo.
в Entities прописал сообщение пользователя, ответ МД. В МД Объекты-API.AI при проверке Test Query ответ проговаривает. Но при написании сообщения в чате и проговаривании в Majordroid отвечает только текстом. Ответ не проговаривает.
Вижу, подобная ситуация не только у меня. Решил это следующим способом.
Ответ прописал командой say в МД в коде данного задания. Теперь и в чате пишет, и проговаривает и на Телеграмм присылает.
Но если не пользоваться Majordroid, то это можно реализовать шаблонами.
chaoba
Сообщения: 32
Зарегистрирован: Пн мар 25, 2019 12:37 pm
Благодарил (а): 14 раз
Поблагодарили: 2 раза

Re: Алиса не хочет проговаривать фразы из API.AI

Сообщение chaoba » Пн июн 08, 2020 3:41 pm

Хотя нет, и с Majordroid работают шаблоны. Т.ч. можно обойтись и без Dialogflow.
Ответить