Да на оба вопроса. Вы можете объединить ответ с 6 различными пользовательскими слотами. "Пользователь: Мои номера: {num1}, {num2}, {num3}, {num4}, {num5}, {num6}" и сделайте их все необходимыми с помощью бета-разработчика навыков. Однако будет довольно неприятно, если пользователь не сформулирует свой ответ должным образом, и Alexa придется задавать дополнительные вопросы, чтобы получить каждый номер. Последняя проблема, с которой вы столкнетесь, заключается в том, что хотя пользовательский слот может быть определен для содержания чисел 1-50, alexa обычно распознает значения, аналогичные тем, которые предоставлены в пользовательском слоте, например, числа от 50 до 99. Затем вам нужно будет проверить, что получаемые вами значения находятся в диапазоне от 1 до 50. Если нет, вам нужно попросить пользователя указать другое число в соответствующем диапазоне.
Заключение: вы захотите иметь индивидуальные взаимодействия, когда пользователь указывает один номер за раз.
Alexa:"you will be prompted for 6 numbers between 1 and 50 please state them one at a time. Choose your first number."
User:"50"
Alexa:"Your First number is 50, Next number."...
Вы можете реализовать это с помощью единственного намерения. назовем это намерение GetNumberIntent
. GetNumberIntent будет содержать образцы высказываний по строке
{number}
pick {number}
choose {number}
где {number} - это произвольный тип слота или просто AMAZON.NUMBER. Затем вам нужно будет проверить, находится ли это число от 1 до 50.
Я программирую на Node.js с помощью SDK. Ваша реализация может отличаться в зависимости от вашего выбора языка.
Что бы я сделал, так это определил 6 различных обработчиков состояний. У каждого обработчика должен быть GetNumberIntent. Когда GetNumberIntent возвращается, если значение слота является подходящим, сохраните значение в данных сеанса и / или Dynamodb и перейдите к следующему состоянию. Если значение слота недействительно, оставайтесь, например, в состоянии «NumberInputFiveStateHandlers», пока не будет получено хорошее значение, затем измените состояние на следующее «NumberInputSixStateHandlers»
var NumberInputFiveStateHandlers = Alexa.CreateStateHandler(states.NUMFIVEMODE, {
'NewSession': function () {
this.emit('NewSession'); // Uses the handler in newSessionHandlers
},
//Primary Intents
'GetNumberIntent': function () {
let message = ` `;
let reprompt = ` `;
let slotValue = this.event.request.intent.slots.number.value;
if(parseInt(slotValue) >= 1 && parseInt(slotValue) <= 50){
this.handler.state = states.NUMSIXMODE;
this.attributes['NUMBERFIVE'] = this.event.request.intent.slots.number.value;
message = ` Your fifth number is `+slotValue+`. please select your sixth value. `;
reprompt = ` please select your sixth value. `;
}else{
message = ` The number `+slotValue)+` is not in the desired range between 1 and 50. please select a valid fifth number. `;
reprompt = ` please select your fifth value. `;
}
this.emit(':ask',message,reprompt);
},
//Help Intents
"InformationIntent": function() {
console.log("INFORMATION");
var message = ` You've been asked to choose a lottery number between 1 and 50. Please say your selection.`;
this.emit(':ask', message, message);
},
"AMAZON.StopIntent": function() {
console.log("STOPINTENT");
this.emit(':tell', "Goodbye!");
},
"AMAZON.CancelIntent": function() {
console.log("CANCELINTENT");
this.emit(':tell', "Goodbye!");
},
'AMAZON.HelpIntent': function() {
var message = `You're playing lottery. you'll be picking six numbers to play the game. For help with your current situation say Information. otherwise you may exit the game by saying quit.`;
this.emit(':ask', message, message);
},
//Unhandled
'Unhandled': function() {
console.log("UNHANDLED");
var reprompt = ' That was not an appropriate response. Please say a number between 1 and 50.';
this.emit(':ask', reprompt, reprompt);
}
});
Это пример пятого запроса. У вас будет 6 одинаковых состояний, подобных этому, которые чередуются друг с другом. В конце концов у вас будет 6 значений сеанса.
this.attributes['NUMBERONE']
this.attributes['NUMBERTWO']
this.attributes['NUMBERTHREE']
this.attributes['NUMBERFOUR']
this.attributes['NUMBERFIVE']
this.attributes['NUMBERSIX']
Затем вы можете использовать эти значения в своей игре.
Если вы еще не использовали alexa-sdk, вы должны не забыть зарегистрировать обработчики состояния и добавить свои режимы в переменную states
.
alexa.registerHandlers(newSessionHandlers, NumberInputOneStateHandlers, ... NumberInputSixStateHandlers);
var states = {
NUMONEMODE: '_NUMONEMODE',
...
...
NUMSIXMODE: '_NUMSIXMODE',
}
Этот ответ не предназначен для изучения основ программирования с использованием Alexas-SDK. Есть и другие источники для более конкретных вопросов по этой теме.
В качестве альтернативы, поскольку ваше намерение идентично [GetNumberIntent], вы можете обойтись одним StateHandler, который помещает новые допустимые числа в массив, пока массив не достигнет желаемой длины. Для этого просто потребовалось бы больше логики внутри обработчика намерений и условия для выхода из состояния, когда массив имеет длину 6. Сначала попробуйте приведенный выше код, потому что так легче увидеть различные состояния.
person
Caleb Gates
schedule
03.08.2017