如何在对话流中使用内联编辑器触发 POST 请求?

How to fire POST request using inline editor in dialogflow?

代码:

var rp = require('request-promise');
var options = {
                method: 'POST',
                uri: 'http://c663fe13.ngrok.io/ap/lighton',
                body: {"color": 'white'},
                json: true // Automatically stringifies the body to JSON
            };

            rp(options)
                .then(function (parsedBody) {
                    // POST succeeded...+
                    console.log("parsedBody", parsedBody);
                })
                .catch(function (err) {
                    // POST failed...
                    console.log("err", err);
                });

但这给了我以下错误:

{ RequestError: Error: getaddrinfo EAI_AGAIN c663fe13.ngrok.io:80 at new RequestError (/srv/node_modules/request-promise-core/lib/errors.js:14:15) at Request.plumbing.callback (/srv/node_modules/request-promise-core/lib/plumbing.js:87:29) at Request.RP$callback [as _callback] (/srv/node_modules/request-promise-core/lib/plumbing.js:46:31)

. . .

name: 'RequestError', message: 'Error: getaddrinfo EAI_AGAIN c663fe13.ngrok.io:80',
cause: { Error: getaddrinfo EAI_AGAIN c663fe13.ngrok.io:80 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) errno: 'EAI_AGAIN', code: 'EAI_AGAIN', syscall: 'getaddrinfo', hostname: 'c663fe13.ngrok.io', host: 'c663fe13.ngrok.io', port: 80 },

我试着用邮递员给它打电话 API,它工作正常。

如果您使用的是免费帐户,您将无法通过 Firebase 云功能访问任何第 3 方服务。如果您要使用免费帐户,最好写下自己的 webhook 代码并使用 fulfillment 将该 webhook 与您的 Dialogflow 代理集成。

更新 查看我分享的代码片段 here。您可以使用它来集成 ExpressJS,然后添加您的 POST 代码并在本地托管它。使用 ngrok 公开本地服务器,然后将 URL 放入 fulfillment.