我正在尝试使用Alexa Presentation Language。我想知道如何在node.js(具体为Binding)中合并动态字符串(例如 Output Speech 和 Title )。
如果我为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” ),则该技能将按预期工作。
我从here和here(原始存储库: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
变量。
答案 0 :(得分:2)
如果您要从APL Authoring Tool生成class MyCustomTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
//here's the code that creates no border, but has a shadow:
tabBar.layer.shadowColor = UIColor.lightGray.cgColor
tabBar.layer.shadowOpacity = 0.5
tabBar.layer.shadowOffset = CGSize.zero
tabBar.layer.shadowRadius = 5
self.tabBar.layer.borderColor = UIColor.clear.cgColor
self.tabBar.layer.borderWidth = 0
self.tabBar.clipsToBounds = false
self.tabBar.backgroundColor = UIColor.white
UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
}
}
,则需要记住以下几点:
template
添加到directive
时,请确保添加名为responseBuilder
的{{1}}。key
时,请确保将其寻址为datasources
。因此,您的datasource
被引用为payload
。例如:
datasource
如果您要访问payload
,则将其引用为datasources : {
'type': 'AlexaHeader',
'text': {
'value': 'Hello World'
}
}
。