Javascript Alexa跳过插槽还是以编程方式设置?

Javascript Alexa跳过插槽还是以编程方式设置?,javascript,node.js,alexa,alexa-skills-kit,alexa-skill,Javascript,Node.js,Alexa,Alexa Skills Kit,Alexa Skill,我正在研究Alexa技能,它基本上是一个测验,Alexa连续向用户提问多个问题,主题根据存储在dynamo表中的用户状态而变化。这很有效。我完成这项工作的目的是为每个答案留出一个时间段,我使用对话框管理来引出每个答案,直到它们都被填满为止。下面是一些代码: if(!answers.NewWordSpanishAnswer) { const newWordIntroAudio = sound('intro'); const promptAudio = sound(`new-word-${w

我正在研究Alexa技能,它基本上是一个测验,Alexa连续向用户提问多个问题,主题根据存储在dynamo表中的用户状态而变化。这很有效。我完成这项工作的目的是为每个答案留出一个时间段,我使用对话框管理来引出每个答案,直到它们都被填满为止。下面是一些代码:

if(!answers.NewWordSpanishAnswer) {
  const newWordIntroAudio = sound('intro');
  const promptAudio = sound(`new-word-${word}-spanish-intro`);
  return handlerInput.responseBuilder
    .speak(newWordIntroAudio + promptAudio)
    .reprompt(promptAudio)
    .addElicitSlotDirective('NewWordSpanishAnswer')
    .getResponse();
}

if(!answers.NewWordEnglishAnswer) {
  const responseAudio = sound(`new-word-${word}-spanish-correct`);
  const promptAudio = sound(`new-word-${word}-english-intro`);
  return handlerInput.responseBuilder
    .speak(responseAudio + promptAudio)
    .reprompt(promptAudio)
    .addElicitSlotDirective('NewWordEnglishAnswer')
    .getResponse();
}

// etc. repeat for each question
问题是,我需要创建一个需要可变数量问题的测验,但插槽在模型中定义,因此我无法更改完成意图所需的答案数量。我认为这样做的方法是提供一些任意数量的
answer
slot,并将默认值分配给我不需要的那些(因此,如果测验有3个问题,但有5个slot,最后2个slot将被分配占位符值)

我怎样才能做到这一点?有没有办法以编程方式设置插槽值


似乎描述了我需要什么,但不幸的是,它是使用ASK SDK v1编写的,因此我不确定如何使用v2完成它。

是的,可以跳过一个或多个插槽值

我能想出两种解决你问题的办法

1) 使用addDelegateDirective而不是addElicitSlotDirective来收集插槽值,并在dialogState为“STARTED”时使用一些任意值填充不需要的插槽,如以下代码段所示

const{request}=handlerInput.requestEnvelope;
const{intent}=请求;
如果(request.dialogState==='STARTED'){
intent.slots.slotToSkip.value='skipped'
返回handlerInput.responseBuilder
.addDelegateDirective(意图)
.WithShoulEndSession(假)
.getResponse()

}
在第二种解决方案中,我会在收到足够的插槽值后,使用
with shouldendsession
停止intent?我曾想过这样做,但我认为在所有插槽都填满之前停止意图可能会导致问题。不是这样吗?不,withShouldEndSession决定了当前与用户的技能会话在发送响应后应该保持打开还是关闭。它与收集插槽值无关。