要在Alexa技能中实现语音输出继续时接受响应,可以使用Alexa Presentation Language (APL)和Dialog Interface来实现。下面是一个使用Node.js开发的代码示例:
首先,确保你的技能已经启用了APL和Dialog Interface。
接下来,在你的技能代码中使用以下代码片段:
const Alexa = require('ask-sdk-core');
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent';
},
handle(handlerInput) {
const speakOutput = 'Hello, how can I help you?';
// 检查设备是否支持APL
if (Alexa.getSupportedInterfaces(handlerInput.requestEnvelope)['Alexa.Presentation.APL']) {
// 创建APL模板
const aplDocument = {
type: 'APL',
version: '1.4',
mainTemplate: {
items: [
{
type: 'Text',
text: 'Hello, how can I help you?',
fontSize: '50px',
}
]
}
};
handlerInput.responseBuilder.addDirective({
type: 'Alexa.Presentation.APL.RenderDocument',
token: 'helloWorldToken',
document: aplDocument
});
}
// 设置dialogState为STARTED,以便接受用户响应
handlerInput.requestEnvelope.request.dialogState = 'STARTED';
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
const HelloWorldResponseHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'
&& handlerInput.requestEnvelope.request.dialogState === 'IN_PROGRESS';
},
handle(handlerInput) {
const speakOutput = 'Thank you for your response';
// 检查设备是否支持APL
if (Alexa.getSupportedInterfaces(handlerInput.requestEnvelope)['Alexa.Presentation.APL']) {
// 创建APL模板
const aplDocument = {
type: 'APL',
version: '1.4',
mainTemplate: {
items: [
{
type: 'Text',
text: 'Thank you for your response',
fontSize: '50px',
}
]
}
};
handlerInput.responseBuilder.addDirective({
type: 'Alexa.Presentation.APL.RenderDocument',
token: 'helloWorldToken',
document: aplDocument
});
}
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
const skillBuilder = Alexa.SkillBuilders.custom();
exports.handler = skillBuilder
.addRequestHandlers(
HelloWorldIntentHandler,
HelloWorldResponseHandler
)
.lambda();
这个示例代码中,我们定义了一个HelloWorldIntent,当用户触发它时,Alexa会发出语音输出,并在屏幕上显示一个文本。然后,技能会将dialogState设置为STARTED,以便在用户作出响应时接受响应。
我们还定义了HelloWorldResponseHandler,当用户作出响应时,Alexa会再次发出语音输出,并在屏幕上显示另一个文本。
通过使用APL和Dialog Interface,我们可以在语音输出继续时接受用户响应,同时在屏幕上提供相关的视觉反馈。