使用dialogflow的Google动作开发在尝试使用mediaObject时出现错误

问题描述 投票:0回答:1

我的目标是开发一种可以播放三个可用曲目之一的动作。但是我得到这个错误:格式错误的响应Expected_inputs [0] .input_prompt.rich_initial_prompt.items [1] .media_response:协议必须为http或https。

这是index.js:


'use strict';

const functions = require('firebase-functions');
const {dialogflow , Permission, Suggestions, MediaObject,Image} = require('actions-on-google');

const app = dialogflow({debug : true});

app.intent('Default Welcome Intent', (conv) => {
        const name = conv.user.storage.userName;
        if(!name)
        {
           conv.ask(new Permission({
             context : 'Dear user , to become acquainted', 
             permissions : 'NAME',
           }));
        }
        else 
        {
          conv.ask(`Which track would you like to play ${name}?`);
          conv.ask(new Suggestions('First One','Second one','Third one'));
        }
});

app.intent('actions_intent_PERMISSION', (conv, params, permissionGranted) => {
  if (!permissionGranted) {
    conv.ask(`Okay, no worries. Which track would you like to play?`);
    conv.ask(new Suggestions('First one','Second one','Third one'));
  } else {
    conv.user.storage.userName = conv.user.name.display;
    conv.ask(`Thanks, ${conv.user.storage.userName}. Which track would you like to play?`);
    conv.ask(new Suggestions('First one','Second one','Third one'));
  }
});

app.intent('play-media', (conv) => {
  if (!conv.surface.capabilities
    .has('actions.capability.MEDIA_RESPONSE_AUDIO')) {
      conv.close('Sorry, this device does not support audio playback.');
      return;
  }

  conv.ask('Here is the track :');
  conv.ask(whichTrack());
conv.ask(new Suggestions(['Stop', 'Start Over' , 'Choose another track']));
});

app.intent('media-status', (conv) => {
  const mediaStatus = conv.arguments.get('MEDIA_STATUS');
  let response = 'Unknown media status received.';
  if (mediaStatus && mediaStatus.status === 'FINISHED') {
    response = `Hope you enjoyed the tune , ${conv.user.storage.userName}`;
  }
  conv.ask(response);
  conv.ask(`Which track would you like to play ?`);
  conv.ask(new Suggestions('First one','Second one','Third one'));
});

const whichTrack = () => {
    const media = new MediaObject({
       items: { 
           'first one': {
            name: 'Jazz in Paris',
            url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
            description: 'A funky Jazz tune',
            icon: new Image({
              url: 'https://storage.googleapis.com/automotive-media/album_art.jpg',
              alt: 'Album cover of an ocean view',
            }),        
           },

           'second one': {
            name: 'HAYDN',
            url: 'http://www.hochmuth.com/mp3/Haydn_Cello_Concerto_D-1.mp3',
            description: 'Concerto D-Major',
            icon: new Image({
                url: 'http://www.hochmuth.com/images/picture2small.jpg',
                alt: 'Album cover of the pianist',
            }),
           },

           'third one': {
               name: 'BEETHOVEN',
               url: 'http://www.hochmuth.com/mp3/Beethoven_12_Variation.mp3',
               description: 'Variations',
               icon: new Image({
                   url: 'https://www.audiophileusa.com/covers400water/144063.jpg',
                   alt: 'Album cover of beethoven.',
               }),
           },

       },
    });
    return media;
};

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

我要去哪里错了?我提供的链接是http或https。

node.js dialogflow actions-on-google dialogflow-fulfillment
1个回答
0
投票

似乎您正在使用MediaObject字段创建一个items,这不是有效的参数。您需要更新对象以提供单个对象。

const media = new MediaObject({
    name: 'Jazz in Paris',
    url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
    description: 'A funky Jazz tune',
    icon: new Image({
        url: 'https://storage.googleapis.com/automotive-media/album_art.jpg',
        alt: 'Album cover of an ocean view',
    }),        
});
© www.soinside.com 2019 - 2024. All rights reserved.