我正在尝试使用Alexa Presentation Language。我想知道如何在 node.js中合并动态字符串(如Output Speech和Title )(具体来说是Binding)。
如果我使用一些静态字符串outputSpeech
并将其放入apl_template_export.json
,则技能正常运行,我可以在设备显示中看到输出。但是当我尝试使用binding时,该技能失败了。虽然没有错误,但我在设备显示中也看不到任何输出(见图)。
这是我到目前为止一直在尝试的:
handlerInput.responseBuilder
.addDirective({
type: 'Alexa.Presentation.APL.RenderDocument',
version: '1.0',
document: require('./apl_template_export.json'),
dataSources: {
"bodyTemplate1Data": {
"type": "object",
"objectId": "bt1Sample",
"title": urlParams.type,
"textContent": {
"primaryText": {
"type": "PlainText",
"text": outputSpeech
}
}
}
}
})
.speak(outputSpeech)
.getResponse();
apl_template_export.json:
{
"type": "APL",
"version": "1.0",
"import": [
{
"name": "alexa-layouts",
"version": "1.0.0"
}
],
"mainTemplate": {
"parameters": [
"payload"
],
"items": [
{
"type": "Text",
"text": "${dataSources.bodyTemplate1Data.textContent.primaryText.text}"
}
]
}
}
如果我替换${dataSources.bodyTemplate1Data.textContent.primaryText.text}
为实际文本(如"Hello World"),该技能将按预期工作。
我从这里和这里参考了原始存储库:https ://github.com/alexa-labs/skill-sample-nodejs-level-up-riddles
谁能告诉我这里出了什么问题?
更新
我将text
变量更改为:
"items": [
{
"type": "Text",
"text": "Type: ${type}\nDatasources: ${dataSources != null} \nBodyTemplate: ${dataSources.bodyTemplate1Data != null}"
}
]
我得到这个作为输出:
Type: undefined
Datasources: false
BodyTemplate: false
所以问题不在于渲染输出,而是模板无法加载dataSources
,这是实际问题。
它甚至无法加载type
其值已在模板中定义的变量。