gpt4 book ai didi

javascript - 根据 Dialogflow Fulfillment 中的 API 调用结果填充意图

转载 作者:行者123 更新时间:2023-11-30 19:42:28 26 4
gpt4 key购买 nike

我正在努力让 Dialogflow 工作的以下完整代码:

'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {

const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

function testHandler(agent){
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
const proxyurl = "https://cors-anywhere.herokuapp.com/";
var theUrl = "http://xxxxx/sum?a=5&b=11";
var url = proxyurl + theUrl;
var result = "Init";

getText = function(url, callback)
{
var request = new XMLHttpRequest();
request.onload = function()
{
if (request.readyState == 4 && request.status == 200)
{
callback(request.responseText);
}
};
request.open('GET', url);
request.send();
}

function mycallback(data) {
agent.add("DATA:" + data);
}

return getText(url, mycallback);
}

let intentMap = new Map();
intentMap.set('test', testHandler);
agent.handleRequest(intentMap);
});

agent.add("DATA:"+ data); 没有任何效果。在浏览器中尝试代码并将 agent.add("DATA:"+ data) 更改为 document.write("DATA:"+ data) 时,一切正常美好的。我是 Dialogflow 的新手;任何提示为什么这个回调似乎不起作用?

最佳答案

当执行异步操作时(例如进行网络 API 调用),您的 Intent Handler必须返回一个 Promise,因此 Handler Dispatcher 知道在将响应发送到用户。在您的情况下,当响应返回时,它确实会尝试将其发送给用户,但由于已经发送了响应(没有任何内容),所以没有人会看到它。

您的网络浏览器在本地处理所有事情,因此您不会看到相同的问题(即使它正在做同样的事情)。

虽然您可能可以将代码包装在 Promise 中,但更简单的方法是使用类似 request-promise-native 的东西要进行 HTTP 调用,请在 then() block 中调用 agent.add(),然后返回整体 promise 。可能是这样的:

  function testHandlerPromise(agent){
const rp = require('request-promise-native');

const proxyurl = "https://cors-anywhere.herokuapp.com/";
var theUrl = "http://xxxxx/sum?a=5&b=11";
var url = proxyurl + theUrl;

return rp( url ).then( data => {
agent.add("DATA:" + data);
} );
}

关于javascript - 根据 Dialogflow Fulfillment 中的 API 调用结果填充意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com