Я делаю счетчик, который подсчитывает, сколько раз запрос CFFI вызывается в навыке alexa. Я делаю это, читая и обновляя файл в Amazon S3 внутри дескриптора, где обрабатывается CFFI. CFFI один работает отлично. CFFI с прочитанным кодом файла работает нормально. CFFI с кодом записи файла записывает в файл, но возвращает нулевой ответ на вызов.
Я пробовал асинхронное ожидание обещания. Я увеличил выделенную память функции.
canHandle(handlerInput) {
return (handlerInput.requestEnvelope.request.type === 'CanFulfillIntentRequest'
&& (
handlerInput.requestEnvelope.request.intent.name === 'ProductIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'WhichToothpasteIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'WhiteTeethIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'ToothbrushIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'BrushingTimeIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'BrushingWayIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'DentistVisitIntent' ||
handlerInput.requestEnvelope.request.intent.name === 'ElectricToothbrushIntent'
));
},
async handle(handlerInput) {
var s3 = new AWS.S3();
var params = { Bucket: "toothpaste-counter", Key: "calls.json" };
var datum;
var datum2={
"name": "CFFI5",
"calls": 5
};
///*JSON.parse(
await s3.getObject(params, function (err, data) {
if (!err)
datum = JSON.parse(data.Body.toString());
else
datum = err;
//context.succeed();
}).promise();
datum.calls++;
var params2 = { Bucket: "toothpaste-counter", Key: "calls.json", Body: Buffer.from(JSON.stringify(datum)) };
await s3.putObject(params2, function (err, data) {
if (!err)
datum = JSON.parse(data.Body.toString());
else
datum = err;
//context.succeed();
}).promise();
return handlerInput.responseBuilder
.withCanFulfillIntent(
{
"canFulfill": "YES",
"slots":{
"voiceExpert": {
"canUnderstand": "YES",
"canFulfill": "YES"
}
}
})
.getResponse();
},
};
Я ожидаю вывод json, как показано в коде в ответе на вызов, но я получаю нулевое значение.
ожидаемый результат
"body": {
"version": "1.0",
"response": {
"canFulfillIntent": {
"canFulfill": "YES",
"slots": {
"voiceExpert": {
"canUnderstand": "YES",
"canFulfill": "YES"
}
}
}
},
"userAgent": "ask-node/2.5.2 Node/v8.10.0",
"sessionAttributes": {}
}
},
вывод я получаю
"invocationResponse": null,