1

我正在尝试使用Alexa Presentation Language。我想知道如何在 node.js中合并动态字符串(如Output SpeechTitle )(具体来说是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其值已在模板中定义的变量。

4

1 回答 1

4

如果您templateAPL Authoring Tool生成一个,那么需要记住以下几点:

  1. 在向directiveresponseBuilder的.keydatasources
  2. 从模板中引用 adatasource时,请确保将其寻址为payload. 所以你datasource的引用为payload.

例如:

datasources : {
    'type': 'AlexaHeader',
    'text': {
        'value': 'Hello World'
    }
}

如果要访问value,请将其引用为${payload.text.value}.

  1. 如果这些不起作用,则从您的控制台重新启用 APL。
于 2019-01-12T07:38:27.187 回答