Динамическое использование Alexa Presentation Language - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь использовать Alexa Presentation Language . Я хочу знать, как включить динамические строки (например, Output Speech и Title ) в node.js ( Binding , если быть точным).

Если я использую некоторые статические строки для outputSpeech и вставляю их в apl_template_export.json, тогда навык работает правильно, и я вижу результат на дисплее устройства. Но когда я пытаюсь использовать привязку , навык терпит неудачу. Хотя ошибки нет, но я не вижу вывода на дисплее устройства (см. Изображение). enter image description here

Вот что я до сих пор пробовал:

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

Может кто-нибудь сказать мне, что здесь происходит не так?

UPDATE

Я изменил переменную text на это:

"items": [
            {
                "type": "Text",
                "text": "Type: ${type}\nDatasources: ${dataSources != null} \nBodyTemplate: ${dataSources.bodyTemplate1Data != null}"
            }
        ]

И я получаю это как вывод:

Type: undefined
Datasources: false 
BodyTemplate: false 

Таким образом, проблема не в рендеринге вывода, вместо этого шаблон не может загрузить dataSources, что является реальной проблемой.

Он даже не может загрузить type переменную, значение которой уже определено в шаблоне.

1 Ответ

0 голосов
/ 12 января 2019

Если вы генерируете template из APL Authoring Tool , то вот несколько моментов, которые следует помнить:

  1. При добавлении directive к вашему responseBuilder убедитесь, что вы добавили key с именем datasources.
  2. При ссылке на datasource из вашего шаблона убедитесь, что вы указали его как payload. Таким образом, ваш datasource упоминается как payload.

Например:

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

Если вы хотите получить доступ к value, укажите его как ${payload.text.value}.

  1. Если это не работает, снова включите APL с консоли.
...