Эта лямбда-функция, которую я получил от 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": {}
}
}
Если все получится, я долженбелый пустой экран при открытии навыка.Однако я не знаю, как изменить лямбду, чтобы она работала.