Je viens donc de commencer à créer des agents API pour l'Assistant Google. J'ai suivi tout dans la documentation api.ai au https://api.ai/docs/getting-started/basic-fulfillment-conversation afin que l'agent ci-dessous obtienne le temps et renvoie une réponse. C'est un code de travail mais je voulais être créatif avec la réponse. Ce que je vise à faire est d'obtenir le pays de la réponse et de décider si l'affichage de l'équivalent Celsius ou Fahrenheit de la température retournée. Mais en le testant dans la console, il continue à utiliser Celsius. Je veux aussi retourner des rappels amicaux basés sur la température que j'ajouterai plus tard.Assistant Google et confusion de l'API WorldWeatherOnline
'use strict';
const http = require('http');
const host = 'api.worldweatheronline.com';
const wwoApiKey = '[api key]';
exports.weatherWebhook = (req, res) => {
// Get the city and date from the request
let city = req.body.result.parameters['geo-city']; // city is a required param
// Get the date for the weather forecast (if present)
let date = '';
if (req.body.result.parameters['date']) {
date = req.body.result.parameters['date'];
console.log('Date: ' + date);
}
// Call the weather API
callWeatherApi(city, date).then((output) => {
// Return the results of the weather API to API.AI
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ 'speech': output, 'displayText': output }));
}).catch((error) => {
// If there is an error let the user know
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ 'speech': error, 'displayText': error }));
});
};
function callWeatherApi (city, date) {
return new Promise((resolve, reject) => {
// Create the path for the HTTP request to get the weather
let path = '/premium/v1/weather.ashx?format=json&num_of_days=1' +
'&q=' + encodeURIComponent(city) + '&key=' + wwoApiKey + '&date=' + date;
console.log('API Request: ' + host + path);
// Make the HTTP request to get the weather
http.get({host: host, path: path}, (res) => {
let body = ''; // var to store the response chunks
res.on('data', (d) => { body += d; }); // store each response chunk
res.on('end',() => {
// After all the data has been received parse the JSON for desired data
let response = JSON.parse(body);
let forecast = response['data']['weather'][0];
let minTemp = forecast['mintempC'];
let maxTemp = forecast['maxtempC'];
let unit = '°C';
let location = response['data']['request'][0];
//get country
let country = location['query'].split(",")[1];
let conditions = response['data']['current_condition'][0];
let currentConditions = conditions['weatherDesc'][0]['value'];
if(country == "Liberia" || country == "Myanmar" || country == "United States of America")
{
minTemp = forecast['mintempF'];
maxTemp = forecast['maxtempF'];
unit = '°F';
}
// Create response
let output =
`Current conditions in the ${location['type']}
${location['query']} are ${currentConditions} with a projected high of
${maxTemp} ${unit} and a low of
${minTemp}${unit} on
${forecast['date']} in ${country}`;
// Resolve the promise with the output text
console.log(output);
resolve(output);
});
res.on('error', (error) => {
reject(error);
});
});
});
}
Bienvenue dans Stack Overflow! Ces types de questions (révision) conviennent mieux à [codereview.se]. Je vous recommande de poster là-bas, sauf si vous avez un problème spécifique (voir [Comment demander] (https://stackoverflow.com/help/how-to-ask)). –
Salut! Désolé pour ça. Je vais déplacer ce post là-bas alors. Merci! – user2658763
Il semble que vous ne demandiez pas une révision de code, mais plutôt de l'aide pour corriger votre code qui ne fait pas ce que vous voulez. Vous devriez [modifier] votre titre pour mieux refléter cela, et aider à empêcher votre question de se fermer. –