Google Actions & Dialogflow v2 - webhooks
Фон: я установил простой DialogFlow с двумя намерениями. Установите в качестве api v1 и webhook для сбоя сервера. Я использовал glitch.com для размещения некоторых js для сбора информации (по запросу пользователя).
Переключение на v2 api ломает это. Все примеры, которые я нашел, используют firebase в отличие от вашего собственного сервера для размещения java-скрипта, поэтому я застрял и надеюсь, что кто-то может указать мне правильное направление для получения / возврата данных в / из помощника Google в v2 без firebase.
Смотрите код ниже
// init project pkgs
const express = require('express');
const ApiAiAssistant = require('actions-on-google').ApiAiAssistant;
const bodyParser = require('body-parser');
const request = require('request');
const app = express();
const Map = require('es6-map');
// Pretty JSON output for logs
const prettyjson = require('prettyjson');
const toSentence = require('underscore.string/toSentence');
app.use(bodyParser.json({type: 'application/json'}));
app.use(express.static('public'));
// http://expressjs.com/en/starter/basic-routing.html
app.get("/", function (request, response) {
response.sendFile(__dirname + '/views/index.html');
});
// Handle webhook requests
app.post('/', function(req, res, next) {
// Log the request headers and body to help in debugging.
// Check the webhook requests coming from Dialogflow by clicking the Logs button the sidebar.
logObject('Request headers: ', req.headers);
logObject('Request body: ', req.body);
// Instantiate a new API.AI assistant object.
const assistant = new ApiAiAssistant({request: req, response: res});
// Declare our action parameters
const PRICE_ACTION = 'price';
// Create functions to handle price query
function getPrice(assistant) {
console.log('** Handling action: ' + PRICE_ACTION);
let requestURL = 'https://blockchain.info/q/24hrprice';
request(requestURL, function(error, response) {
if(error) {
console.log("got an error: " + error);
next(error);
} else {
let price = response.body;
logObject('the current bitcoin price: ' , price);
// Respond to the user with the current temperature.
assistant.tell("The current bitcoin price is " + price);
}
});
}
// Add handler functions to the action router.
let actionRouter = new Map();
actionRouter.set(PRICE_ACTION, getPrice);
actionRouter.set(STATUS_ACTION, getStatus);
// Route requests to the proper handler functions via the action router.
assistant.handleRequest(actionRouter);
});
// Handle errors
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send('Oppss... could not check the bitcoin price');
})
// Pretty print objects for logging
function logObject(message, object, options) {
console.log(message);
console.log(prettyjson.render(object, options));
}
// Listen for requests
let server = app.listen(process.env.PORT, function () {
console.log('--> Our Webhook is listening on ' + JSON.stringify(server.address()));
});
1 ответ
Есть ли какая-то особая причина, по которой вы хотите использовать свой собственный сервер?
Firebase обрабатывает запросы автоматически, и если вы намереваетесь опубликовать свое Действие для широкой публики, программа вознаграждений Google должна предложить облачный кредит в размере 200 долларов США в месяц на ваш счет, компенсируя личные начисленные расходы.
Вы можете узнать больше о вознаграждениях и программах сообщества Google здесь: https://developers.google.com/actions/community/