我有一个单场景动作,它在调用时调用我的 webhook ' randomSpeech '(如下所述),它播放 MP3。我添加了一个“跳过”意图以跳到下一个 MP3。当我说“跳过”时,Action 应该转换(循环)回到 webhook ' randomSpeech ',并且由于有一个计数器x,Action 应该开始播放switch语句中的第二个 MP3。
但是,我必须说两次“跳过”这个词才能使它起作用。
- 我第一次说“跳过”,系统意图,MEDIA_STATUS_FINISHED 自动调用' mediaStatus '处理程序和文本'媒体已完成'。被添加到对话中。即使我已经配置了“跳过”意图来调用处理程序'randomSpeech',它似乎并没有发生,因为对话中没有添加新媒体。这几乎就像' randomSpeech ',完全被忽略了!
- 我第二次说“跳过”,第二个 MP3 终于开始播放了。
我的主要问题是,我怎样才能做到让用户只需要说“跳过”一次?
let x = 1;
app.handle('randomSpeech', (conv) => {
switch(x) {
case(1):
conv.add(new Media({
mediaObjects: [
{
name: 'NEVER GIVE UP',
description: 'some athlete',
url: 'http://zetapad.com/speeches/nevergiveup.mp3',
image: {
large: {
url: 'https://www.keepinspiring.me/wp-content/uploads/2020/02/motivation-gets-you-started-jim-ryun-quote-min.jpg'
}
}
}
],
mediaType: 'AUDIO',
optionalMediaControls: ['PAUSED', 'STOPPED'],
startOffset: '5s'
}));
x++;
break;
case(2):
conv.add(new Media({
mediaObjects: [
{
name: 'SPEECHLESS',
description: 'Denzel Washington (feat Will Smith)',
url: 'http://zetapad.com/speeches/denzel.mp3',
image: {
large: {
url: 'https://www.keepinspiring.me/wp-content/uploads/2020/02/motivational-quotes-2-min.jpg'
}
}
}
],
mediaType: 'AUDIO',
optionalMediaControls: ['PAUSED', 'STOPPED']
}));
break;
}
});
app.handle('media_status', (conv) => {
const mediaStatus = conv.intent.params.MEDIA_STATUS.resolved;
switch(mediaStatus) {
case 'FINISHED':
conv.add('Media has finished.');
break;
case 'FAILED':
conv.add('Media has failed.');
break;
case 'PAUSED' || 'STOPPED':
if (conv.request.context) {
// Persist the media progress value
const progress = conv.request.context.media.progress;
}
conv.add(new Media({
mediaType: 'MEDIA_STATUS_ACK'
}));
break;
default:
conv.add('Unknown media status received.');
}
});
来自唯一场景“动机”的图像:
进一步说明:
- MEDIA_STATUS_PAUSED / MEDIA_STATUS_FINISHED / MEDIA_STATUS_STOPPED都只调用' media_status '微博