2

我有一项 Alexa 技能,需要以编程方式覆盖用户给出的值。

我尝试使该值无效,然后将其作为“更新的 Intent”传递。

this.event.request.intent.userPrompt.value = null;
var updatedIntent = this.event.request.intent;
this.emit(':elicitSlot', 'userPrompt',"Say something","Say something", updatedIntent);

但是,输入 JSON 显示先前的值。有针对这个的解决方法吗?

4

2 回答 2

3

delete this.event.request.intent.slots.<slotname>.value;
var updatedIntent = this event.request.intent;
this.emit(':elicitSlot', <slotname>,"Say something","Say something", updatedIntent);

如果您有一个自定义插槽类型的插槽,您还必须

delete this.event.request.intent.slots.<slotname>.resolutions;
于 2018-01-04T08:12:13.677 回答
0

对于版本 V2,您应该以这种方式更新意图(据我所知)

 handlerInput.responseBuilder
    .addDelegateDirective(newIntent)
    .getResponse();

newIntent应该是一个对象,您可以在其中设置新的插槽值,例如:


const resetIntent = (handlerInput) => {
  const intent = {
    name : 'myIntentName',
    confirmationStatus: 'NONE',
    slots : {
      slotOne: {
        name: 'slotOne',
        confirmationStatus: 'NONE'
      }
    }
  }

  return handlerInput.responseBuilder
    .addDelegateDirective(intent)
    .getResponse();

}
于 2019-01-15T07:54:58.200 回答