Здравствуйте, я делаю "пользовательский навык - предоставьте свой собственный" ( не используется на основе alexa-hosted ), используя ask-dsk-v2 на node.js, и я хочу основать c запросить таблицу, которая находится в MySql в RDS. Функция Ламба и RDS находятся в ЕС-запад-1 (Ирландия). Лямбда и спроси у CLI используется Runtime Node.js 10.x.
Моя функция getPrimero () выполняется после завершения теста на консоли разработчика Alexa, , но при ssml возвращает пустое значение:"" (см. Ниже JSON Вывод 1).
ПРИМЕЧАНИЕ: Если выполняется одна функция getPrimero () на локальном node.js (на моем P C), запрос работает и возвращает данные таблицы Mysql на RDS (ниже):
MySql query on RDS Succees!, the result: Ensalada de Bogavante
О конфигурации RDS:
- Publi c Доступность: ДА
- IAM Аутентификация БД: ОТКЛЮЧЕНО
О лямбде:
- Виртуальное частное облако (VP C): НЕТ VP C
- Триггер: Alexa Skill Kit (ассоциированный идентификатор alexa skill)
О разрешении IAM:
О проблеме, мои вопросы:
-
Разрешения IAM, конфигурация или код лямбда / RDS, что может не работать в настраиваемом навыке alexa?
Как можно легко протестировать запрос и соединение (чтобы обнаружить, что не получилось) для MySql в RDS?
Кто-нибудь успешно справился с запросом к Mysql в RDS с помощью nodejs и пользовательским навыком alexa и ask-sdk-v2 на nodejs?
Любая помощь приветствуется!
Заранее спасибо!
const Alexa = require('ask-sdk-core');
const i18n = require('i18next');
var config = require('./db_config.json');
var mysql = require('mysql');
const utf8 = require('utf8');
var Promise = require('promise');
var async = require("async");
const PrimerosIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'PrimerosIntent';
},
async handle(handlerInput) {
var speakOutput = await getPrimero();
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt('¿Quieres saber algún plato más?')
.withShouldEndSession(false)
.getResponse();
}
};
const ErrorHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
const speakOutput = "Perdona, no entiendo lo que dices. Por favor prueba de nuevo";
console.log(`~~~~ Error handled: ${JSON.stringify(error)}`);
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
}
};
Моя функция, чуть ниже приведенного выше кода "const PrimerosIntentHandler {..}":
function getPrimero(){
var connection = mysql.createConnection({
host : config.dbhost,
user : config.dbuser,
password : config.dbpassword,
database : config.dbname
});
connection.connect(async function(err) {
if (err) {
console.error('error connecting: ' + err.stack); // show error, if happen
return;
}
// if no error, to do the query:
//console.log('connected as id ' + connection.threadId); // ONLY TEST
var sqlQuery = "SELECT nombre FROM r_menus WHERE site=342800010 AND es_un='Primeros'";
var returnValue = "";
returnValueFinal = "";
connection.query(sqlQuery, function(error, rows) {
if (error) {
returnValue = "An error on connection.query";
} else {
returnValue = utf8.decode(rows[0]['nombre']); // also: rows[1]['nombre'] ; rows[2]['nombre']
console.log("MySql query on RDS Success!, the result: " + returnValue);
return (returnValue);
}
}); // .connection.query()
connection.end();
}); // .connection.connect()
};
Alexa JSON Output 1 ("response ":, outputSpeech" :, "ssml": "" ") пусто:
{
"body": {
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak></speak>"
},
"reprompt": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>¿Quieres saber algun plato más?</speak>"
}
},
"shouldEndSession": false,
"type": "_DEFAULT_RESPONSE"
},
"sessionAttributes": {},
"userAgent": "ask-node/2.7.0 Node/v10.17.0 sample/hello-world/v1.2"
}
}
Вывод CloudWatch при выполнении функции Test на лямбду (выполняется мой код« ErrorHandler {..} »):
{
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>Perdona, no entiendo lo que dices. Por favor prueba de nuevo</speak>"
},
"reprompt": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>Perdona, no entiendo lo que dices. Por favor prueba de nuevo</speak>"
}
},
"shouldEndSession": false
},
"userAgent": "ask-node/2.7.0 Node/v10.17.0 sample/hello-world/v1.2"
}
START RequestId: 21685e97-1537-4017-a8a7-734961bfbed1 Version: $LATEST
2020-01-08T13:46:34.556Z 21685e97-1537-4017-a8a7-734961bfbed1 INFO ~~~~ Error handled: {}
END RequestId: 21685e97-1537-4017-a8a7-734961bfbed1
REPORT RequestId: 21685e97-1537-4017-a8a7-734961bfbed1 Duration: 25.47 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 88 MB