Ошибка при ответе mediaObject в действиях в Google Simulator? - PullRequest
0 голосов
/ 08 июня 2018

В настоящее время я делаю слепое тестовое действие, где я буду воспроизводить случайную музыку, и пользователю придется ее угадывать.Когда он ответил, ему проигрывается другая музыка, пока он не даст 3 ответа, и его оценка будет установлена.

Все работает отлично , когда я использую мой Google Home или Google Assistant для запуска моего приложения.К сожалению, когда я запускаю его в симуляторе Google, каждая воспроизводимая песня будет такой же, как и первая возвращенная (т. Е. Если первая музыка A, 2-я B и 3-я C, симулятор будет играть три раза A вместо этого).A, B, C).

Это известная ошибка с симулятором?

ОБНОВЛЕНИЕ

Это код, который я использую для получениямой mp3.Он хранится на моем сервере, и я получу к нему доступ.

function getRandomMusic(conv) {
    return new Promise(resolve => {
        let URL = "http://"+VPS+":"+EXPRESS_PORT+"/blindTest";
        console.log("URL="+URL);
        unirest.get(URL)
            .headers({'Accept': 'application/json', 'Content-Type': 'application/json'})
            .end(response => {
                console.log("Response = "+JSON.stringify(response));
                if (response.body && response.body.link) {
                    const link = response.body.link;
                    conv.data.artist = response.body.artist;
                    conv.data.track = response.body.track;
                    console.log("Link="+link);
                    conv.ask(new MediaObject({
                        name: "Musique à deviner",
                        icon: new Image({
                            url: "https://cibul.s3.amazonaws.com/event_blind-test-series_291687.jpg"
                        }),
                        url: link,
                        description: "Quel est l'artiste ?"
                    }));
                    conv.ask(new Suggestions('Not yet implemented'));
                    return resolve()
                } else {
                    ask(conv, "La communication avec le serveur distant a échoué.");
                    return resolve()
                }
            })
    })
}

На стороне сервера я использую ffmpeg, чтобы разделить мой mp3-файл и сохранить только 10 случайных секунд, и сохранить его в другом файле.Ссылка на этот файл 10S отправлена ​​на мои действия.

app.get('/blindTest', function(req, res) {
    //Need to download the mp3
    //Take a random 10 s
    let name = "FullMusic.mp3";
    const mp3Duration = require('mp3-duration');
    const ffmpeg = require('ffmpeg');
    const MongoClient = require('mongodb').MongoClient;
    let url = 'URL';
    MongoClient.connect(url, function (err, client) {
        if (err) {
            console.error(err);
        }
        let db = client.db('DB');
        console.log("Connected successfully to database");
        let collection = db.collection('COLLECTION');
        collection.count(function (err, resultat) {
            if (err) console.error(err);
            let randNum = Math.floor(Math.random()*resultat);
            collection.find().limit(-1).skip(randNum).next(function (err, resu) {
                if (err) console.error(err);
                client.close();
                download(resu.link, name, () => {
                    console.log("Download complete!");
                    mp3Duration(name, function (err, duration) {
                        if (err) console.error(err);
                        console.log("Le fichier fait "+duration+" s de long.");
                        try {
                            new ffmpeg(name, function (err, video) {
                                if (!err) {
                                    let randStart = Math.floor(Math.random()*(duration - 10));
                                    console.log("RandStart="+randStart+"s");
                                    video.setVideoStartTime(randStart);
                                    video.setVideoDuration(10);
                                    video.addCommand('-y');
                                    video.save('/home/musiques/10sMusic.mp3', function (error, file) {
                                        if (!error) {
                                            console.log('Video file '+file);
                                            res.send({
                                                artist:resu.artist,
                                                track: resu.track,
                                                link:"http://IP+PORT/10sMusic.mp3"
                                            });
                                            fs.unlink(name, () => {
                                                console.log("Delete of "+ name +"complete !");
                                            })
                                        } else {
                                            console.log("ERREUR!!!+"+error);
                                        }
                                    })
                                } else {
                                    console.error(err);
                                }
                            })
                        } catch (e) {
                            console.log(e.code);
                            console.log(e.msg);
                        }
                    })
                })
            })
        });
    });
});
...