Javascript Dialogflow实现内联编辑器api请求

Javascript Dialogflow实现内联编辑器api请求,javascript,dialogflow-es,dialogflow-es-fulfillment,Javascript,Dialogflow Es,Dialogflow Es Fulfillment,我正在尝试让机器人回答从API收到的信息,但无法使其正常工作 在firebase控制台日志中,我可以看到api确实响应了我需要的信息 所有代码如下: "严格使用",; const axios=require('axios'); const functions=require('firebase-functions'); const{WebhookClient}=require('dialogflow-fulfillment'); const{Card,Suggestion}=require('

我正在尝试让机器人回答从API收到的信息,但无法使其正常工作

在firebase控制台日志中,我可以看到api确实响应了我需要的信息

所有代码如下:


"严格使用",;
const axios=require('axios');
const functions=require('firebase-functions');
const{WebhookClient}=require('dialogflow-fulfillment');
const{Card,Suggestion}=require('dialogflow-fulfillment');
process.env.DEBUG='dialogflow:DEBUG';//启用lib调试语句
exports.dialogflowFirebaseFulfillment=functions.https.onRequest((请求,响应)=>{
const-agent=new-WebhookClient({request,response});
log('Dialogflow请求头:'+JSON.stringify(Request.headers));
log('Dialogflow请求主体:'+JSON.stringify(Request.body));
功能欢迎(代理){
agent.add(`Welcometomyagent!`);
}
功能回退(代理){
agent.add(`我不明白');
agent.add(`对不起,你能再试一次吗?`);
}
函数调用API(代理){
const food=agent.parameters.food;
const subject=agent.parameters.subject;
常量编号=agent.parameters.number;
常量问题=主题+数字+食物;
const questionReady=question.replace(//g,“+”);
const apiKey=“key”;
常量baseUrl=”https://api.spoonacular.com/recipes/quickAnswer?q=";
const apiUrl=baseUrl+questionReady+“&apiKey=“+apiKey;
get(apirl).then((结果)=>{
控制台日志(结果);
console.log(result.data);
console.log(结果、数据、应答);
agent.add(结果);
agent.add(结果.数据);
agent.add(结果、数据、答案);
});
}
让intentMap=newmap();
intentMap.set('Default Welcome Intent',Welcome);
intentMap.set('Default Fallback Intent',Fallback);
intentMap.set(“食品”,callAPI);
代理handleRequest(intentMap);
});
Firebase控制台日志:


最可能的原因是您没有使用
Promise
async
函数调用,因此在API调用完成之前,处理程序没有返回任何内容

要解决此问题,
callAPI()
需要返回
axios.get()
返回的承诺。类似地,调用
callAPI()
的意图处理程序也需要返回该承诺(或
then()
块中的另一个承诺)

Dialogflow库需要这样做,因此它知道在将任何内容返回给用户之前,必须等待API调用完成(并因此解决承诺)

在您的例子中,这非常简单,只需将对axios.get()的调用更改为

return axios.get(apiUrl).then((result) => {
  // Rest of this call here

你到底犯了什么错误?给我们一些反馈以调用外部api确保您的账单已启用并且您的功能应返回承诺我没有收到任何类型的错误,只是无法在机器人上显示api返回的内容,目前我正在使用blaze付款计划,缺少的是functionAnswer更新的返回承诺,但请看我对你上面“答案”的评论。