Найти способ использовать APL в лямбда-функции для навыка игровой книги - PullRequest
0 голосов
/ 30 декабря 2018

Эта лямбда-функция, которую я получил от github, позволяет создать книгу игр для Alexa, связанную с Twine 2. Она работает довольно хорошо.Я хотел бы сделать его мультимодальным с новым языком APL для Alexa, но я застреваю.

Я создал файл main.json с кодом APL, который сейчас находится в папкемоя лямбда-функция.И я попросил использовать этот файл в моем index.js с: const main = require('./main.json');

Я думаю, что я должен добавить что-то вроде:

return handlerInput.responseBuilder
  .addDirective({
    type: 'Alexa.Presentation.APL.RenderDocument',
    varsion: '1.0',
    document: main,
    datasources: {}
})

в ответ Строителю определенного намерения, нокак-то в этой конкретной лямбде у меня проблемы с пониманием, где и как ее вставить.

Вот часть моей лямбды:

'use strict';
const main = require('./main.json');

const Alexa = require('alexa-sdk');
const story = 'Time Travel Adventure.html';
const TableName = story.replace('.html','').replace(/\s/g, "-");
var $twine = null;
const linksRegex = /\[\[([^\|\]]*)\|?([^\]]*)\]\]/g;

module.exports.handler = (event, context, callback) => {
    console.log(`handler: ${JSON.stringify(event.request)}`);
    // read the Twine 2 (Harlowe) story into JSON
    var fs = require('fs');
    var contents = fs.readFileSync(story, 'utf8');
    var m = contents.match(/<tw-storydata [\s\S]*<\/tw-storydata>/g);
    var xml = m[0];
    // because Twine xml has an attribute with no value
    xml = xml.replace('hidden>', 'hidden="true">');
    var parseString = require('xml2js').parseString;
    parseString(xml, function(err, result) {
        $twine = result['tw-storydata']['tw-passagedata'];
    });
    // prepare alexa-sdk
    const alexa = Alexa.handler(event, context);
    // APP_ID is your skill id which can be found in the Amazon developer console
    // where you create the skill. Optionally set as a Lamba environment variable.
    const APP_ID ='amzn1.ask.skill.601c478e-8c48-410c-8907-f7e5146eaab5';
    alexa.appId = process.env.APP_ID;
    alexa.dynamoDBTableName = TableName;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

const handlers = {
   'LaunchRequest': function() {
        console.log(`LaunchRequest`);
        if (this.event.session.attributes['room'] !== undefined) {
            var room = currentRoom(this.event);
            var speechOutput = `Hello, you were playing before and got to the room called ${room['$']['name']}. Would you like to resume? `;
            var reprompt = `Say, resume game, or, new game.`;
            speechOutput = speechOutput + reprompt;
            var cardTitle = `Restart`;
            var cardContent = speechOutput;
            var imageObj = undefined;
            console.log(`LaunchRequest: ${JSON.stringify({
                "speak": speechOutput,
                "listen": reprompt,
                "card" : {
                    "title": cardTitle,
                    "content": cardContent,
                    "imageObj": imageObj
                }
            })}`);
            this.response.speak(speechOutput)
                .listen(reprompt)
                .cardRenderer(cardTitle, cardContent, imageObj);
            this.emit(':responseReady');
        } else {
           this.emit('WhereAmI');
        }
   },
   // ...

Мой файл APL сейчас должен просто вернуть пустой белый экран:

{
    "type": "Alexa.Presentation.APL.RenderDocument",
    "datasources": {},
    "document": {
        "type": "APL",
        "version": "1.0",
        "import": [],
        "resources": [],
        "styles": {},
        "layouts": {},
        "mainTemplate": {}
    }
}

Если все получится, я долженбелый пустой экран при открытии навыка.Однако я не знаю, как изменить лямбду, чтобы она работала.

...