gpt4 book ai didi

dialogflow-es - 在 Dialogflow 中通过实现发出 HTTP POST 请求

转载 作者:行者123 更新时间:2023-12-04 02:36:04 25 4
gpt4 key购买 nike

我正在为生成 PDF 的意图编写处理程序。此 API 接受带有 JSON 数据的 POST 请求,并返回指向生成的 PDF 的链接。意图会触发此代码,但不会将答案添加到代理中。请求是否有可能没有转发到目的地? API 似乎没有收到任何请求。知道如何解决这个问题吗?

function fillDocument(agent) {
const name = agent.parameters.name;
const address = agent.parameters.newaddress;
const doctype = agent.parameters.doctype;

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
var url = "https://us1.pdfgeneratorapi.com/api/v3/templates/36628/output?format=pdf&output=url";
xhr.open("POST", url, true);
xhr.setRequestHeader("X-Auth-Key", "...");
xhr.setRequestHeader("X-Auth-Secret", "...");
xhr.setRequestHeader("X-Auth-Workspace", "...");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
agent.add(json.response);
}
};
var data = JSON.stringify({...});
xhr.send(data);
}

编辑:我开始在 GCP 中设置一个结算帐户,现在通话有效,但它是异步的。如果我通过这样做将其更改为 syn:
xhr.open("POST", url, false);

我收到以下错误:
EROFS: read-only file system, open '.node-xmlhttprequest-sync-2'

我需要它是异步的,因为我的机器人应该发送的响应取决于 API 的响应。关于如何解决这个问题的任何想法?

最佳答案

如果你在做异步调用,你的处理函数需要返回一个 Promise。否则,处理程序调度程序不知道有异步调用,并将在函数返回后立即结束。

将 Promise 与网络调用一起使用的最简单方法是使用诸如 request-promise-native 之类的包。 .使用它,您的代码可能类似于:

var options = {
uri: url,
method: 'POST',
json: true,
headers: { ... }
};
return rp(options)
.then( body => {
var val = body.someParameter;
var msg = `The value is ${val}`;
agent.add( msg );
});

如果你真的想继续使用 xhr,你需要将它包装在一个 Promise 中。可能像
return new Promise( (resolve,reject) => {

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
// ... other XMLHttpRequest setup here
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
agent.add(json.response);
resolve();
}
};

});

关于dialogflow-es - 在 Dialogflow 中通过实现发出 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52555015/

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