Я пытаюсь создать навык, который будет принимать пользовательский ввод, запускать запрос на его основе и возвращать некоторую информацию из базы данных.
У меня есть экземпляр базы данных, настроенный на AWS RDS, и навык, который работает с некоторым кодом javascript на лямбде, но я изо всех сил пытаюсь связать их.
Я могу запросить базу данных локально, используя файл php, но я не буду запускать сервер на лямбда-стороне
Должен ли я восстановить весь навык в PHP?
Или добавить конечную точку БД в мой навык Алекса? В таком случае, как я буду кодировать намерения и т. Д.
Я уверен, что это должно было быть сделано раньше, но я изо всех сил пытался найти где-нибудь, что объясняет это для новичка.
Обновить
Поэтому я попытался сделать ajax-вызов нижеприведенного php-файла из моего javascript-файла в aws lambda
Это только с w3 ..
<?php
$servername = "arn of database";
$username = "";
$password = "";
$dbname = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM testtable";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"] . "\n";
}
} else {
echo "0 results";
}
$conn->close();
?>
Я не мог заставить это работать, поскольку теперь я понимаю, что вы не можете сделать ajax-вызов, если код не выполняется на сервере
Это привело меня к узлу и пробовал приведенный ниже код, но я не уверен, возможно ли вообще запустить его на AWS Lambda?
var http = require('http');
var answer = "";
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '',
user : '',
password : '',
database : ''
});
connection.connect();
connection.query('SELECT * FROM testtable', function (error,
results, fields) {
if (error) throw error;
answer = results;
});
}).listen(8080);
"use strict";
var Alexa = require("alexa-sdk");
var handlers = {
'LaunchRequest': function() {
this.response.speak("HIC launched. Would you like me to list all
machines?").listen();
this.emit(':responseReady');
},
'ListIntent': function () {
// var name = this.event.request.intent.slots.answer.value;
this.response.speak(ListPlant());
this.emit(':responseReady');
}
}
var ListPlant = function() {
return answer;
};
exports.handler = function(event, context, callback){
var alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
alexa.execute();
};
Вышеприведенный результат является результатом того, что я взял работающую лямбда-функцию (откуда используется строгий запуск) и вставил над ней какой-то узел, который запрашивает базу данных, сохраняет ее в переменной с именем answer, а затем просто говорит это обратно.
Банкомат, я просто проверяю соединение и т. Д., Поэтому прошу Алексу ответить обратно, в будущем будет больше функции listPlant.
Это правильный путь?
Или это должно быть в отдельных файлах?
Это тот случай, когда мне нужно добавить арн к конечной точке навыка?
Могу ли я запустить такой узел в aws? Если нет, какой подход я должен выбрать?
Я полон решимости получить это, поэтому даже просто опубликовать ссылку с некоторой информацией будет принята с благодарностью
То, что я нашел до сих пор, использует python, который не является проблемой, он делает вызов ajax из lambda.
Заранее спасибо! Икс
Alexa вызовет лямбда-функцию. Затем эта лямбда-функция может получить доступ к вашей базе данных Amazon RDS.
Нелегко написать функцию Alexa в PHP. Наиболее поддерживаемые языки: Node.js / JavaScript а также питон.
Я предлагаю вам начать с экспериментируя с базовыми навыками Alexa чтобы вы понимали модель взаимодействия и то, как кодировать навык, а затем расширяйте функциональность, чтобы обеспечить вашу конкретную функциональность. (Но не в PHP.)
Других решений пока нет …