У меня возникает проблема при вызове API в диалоговом потоке Google.Я хочу вызвать API в первом намерении (getAPIData), а затем одновременно вызвать второе намерение (followOne) и затем третье намерение (followTwo).(Не хочу ждать завершения вызова API).В третьем намерении я хочу получить результат вызова API, который мы вызываем в первом намерении, и добавить ответ API агенту диалогового потока.Пожалуйста, просмотрите код для более подробной информации и дайте мне знать проблему.Для ответа API требуется более 11 секунд.
const {WebhookClient} = require('dialogflow-fulfillment');
const axios = require('axios');
const {Card, Suggestion, List, BrowseCarousel, BrowseCarouselItem} = require('dialogflow-fulfillment');
process.env.DEBUG = 'dialogflow:debug';
exports.GetAPIDataHandle = functions.https.onRequest((request, response) => {
let dialogflowResponse = '';
const agent = new WebhookClient({ request, response });
async function getAPIData(){
axios.get('https://apiurl.com')
.then((resp) => {
dialogflowResponse = resp.data.data;
})
doTimeOut(3.5);
agent.setFollowupEvent('followUpOne');
}
function followOne(agent){
doTimeOut(4);
agent.setFollowupEvent('followUpTwo');
}
function followTwo(agent){
doTimeOut(4);
if(dialogflowResponse != ''){
agent.add('Here is the search result.');
dialogflowResponse.map(result => {
agent.add(result.word);
})
}else{
agent.add(`Please try again later`);
}
}
let intentMap = new Map();
intentMap.set('getFunnyWords', getAPIData);
intentMap.set('followupeventone', followOne);
intentMap.set('followupeventtwo', followTwo);
agent.handleRequest(intentMap);
});
function doTimeOut(numsec){
var dt1 = new Date();
dt1.setSeconds( dt1.getSeconds() + numsec);
do{
}while((new Date()).getSeconds() < dt1.getSeconds());
}
Согласно текущему коду, мы получаем, что глобальная переменная dialogflowResponse не определена в третьем намерении.