如何使用内联编辑器在Dialogflow实现上测试HTTP请求

时间:2018-08-24 14:11:26

标签: dialogflow actions-on-google

我正在使用内联编辑器测试Dialogflow实现。 我想做的是使用que'request'库的http请求。 这是我正在使用的代码:

const requesthttp = require('request');

requesthttp('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(body.url);
    console.log(body.explanation);
});

但是它返回了一个找不到的错误。

我还注意到了Dialogflow上的警报,并显示以下消息:

“未配置结算帐户。无法访问外部网络,并且配额受到严格限制。配置结算帐户以消除这些限制。”

所以...很可能如果不配置计费帐户就无法测试这段代码。

我的问题是...是否可以使用网址来测试此代码? 还是我测试此代码的唯一方法是配置一个计费帐户并付款?

预先感谢

3 个答案:

答案 0 :(得分:4)

有很多方法可以测试您的代码。

  • 如果您想继续使用Dialogflow的内联编辑器,则需要将Firebase设置为使用付款计划。但是,Blaze plan是基本使用级别后的“随用随付”。此使用级别应足以涵盖该服务的大多数测试(甚至是非常轻量级的)使用,而无需收费。一旦您的操作获得批准,您就可以获得Google Cloud Platform的积分,如果您超过最低水平,该积分可以用于此用途。

  • 您还可以使用Inline Editor所基于的Firebase Cloud Functions和您自己的本地编辑器。这样的优点之一是您可以在本地提供该功能,该功能具有与部署它相同的许多功能,但是没有URL限制(毕竟它是您自己的机器)。您可以使用ngrok之类的工具在测试过程中为您的计算机创建安全的隧道。测试之后,您可以使用付费计划将其部署到Firebase。

  • 您当然可以选择使用任何其他所需的托管方法。 Google和Dialogflow允许您在任何服务器上运行实现Webhook,只要该服务器可以使用有效的非自签名证书提供HTTPS连接即可。如果您使用的是node.js,则可以继续使用这些库。如果您希望使用另一种语言,则需要能够解析并返回JSON,但除此之外没有任何限制。

答案 1 :(得分:1)

有很多创建自己的服务器的方法,例如将NodeJS客户端与Express.JS一起使用,您可以使用NGROK作为实现的Webhook将其公开到互联网上。

从下面的Express.JS的Google Actions代码开始

'use strict';

const {dialogflow} = require('actions-on-google');
const express = require('express');
const bodyParser = require('body-parser');

const app = dialogflow();

app.intent('Default Welcome Intent', conv => {
    conv.ask('Hi, Welcome to Assistant by Express JS ');
});

express().use(bodyParser.json(), app).listen(8080);

答案 2 :(得分:0)

由于DF使用Firebase云功能,因此可以像在nodejs中一样使用https。但是,要求在google / firebase Universe之外的域需要Firebase的付费版本。

const https = require('https');

return new Promise((resolve, reject) => {
        const hostname = info.hostname;
        const pathname = info.pathname;
        let data = '';
        const request = https.get(`https://${hostname}${pathname}`, (res) => {
            res.on('data', (d) => {
                data += d;
            });
            res.on('end', resolve);
        });
        request.on('error', reject);
    });