连接到Firebase功能的Google Action无法调用外部api?

时间:2018-08-17 02:35:54

标签: node.js firebase google-cloud-platform xmlhttprequest actions-on-google

当前,我有一个使用ActionSDK和NodeJS构建的google action,其中,实现由Firebase云功能托管。我现在想做的就是将google action的输入传递给外部api,但似乎无法将其发送出去?

'use strict';

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');
const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

const app = actionssdk({debug: true});


app.intent('actions.intent.MAIN', (conv) => {
  conv.ask('Hello, this is Patrick.');
});

app.intent('actions.intent.TEXT', (conv, input) => {

  var xhr = new XMLHttpRequest();
  xhr.open("GET", "https://www.googleapis.com/customsearch/v1?key={apikey}&cx={searchID}&q=" + input, true);
  xhr.send();

  xhr.onreadystatechange = function () {
    conv.ask(this.readyState.toString());
  }


exports.myFunction = functions.https.onRequest(app);

但这总是给我以下答案:

  

我的测试应用目前没有响应。请稍后重试。

在错误标签中,它显示:

  

{     “ error”:“未设置任何响应。这是否在未作为对意图处理程序的承诺返回的异步调用中使用?”   }

我不知道为什么会这样,因为我是这门新手。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

如果您使用的是免费的Firebase层,则不允许使用外部API。您将需要启用计费并升级到付费层才能访问。

更新 您可能需要使用Promise发送回响应。查看this问题。