Как программно очистить значение пользовательского слота в Alexa?

У меня есть навык Alexa, который требует программного переопределения значений, заданных пользователем.

Я попытался обнулить значение, а затем передать его как «обновленное намерение».

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

Однако входной JSON показывает предыдущее значение. Есть ли этому решение?


person rajeeva9    schedule 04.01.2018    source источник


Ответы (2)


Там есть

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;
person A.Kraus    schedule 04.01.2018
comment
Спасибо @A.Kraus. Это работает, как и ожидалось. Вы сэкономили мне много времени. - person rajeeva9; 04.01.2018

Для версии 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();

}
person rafinskipg    schedule 15.01.2019