Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我如何连接Google Actions和Watson?_Node.js_Actions On Google_Ibm Watson - Fatal编程技术网

Node.js 我如何连接Google Actions和Watson?

Node.js 我如何连接Google Actions和Watson?,node.js,actions-on-google,ibm-watson,Node.js,Actions On Google,Ibm Watson,我正在尝试将Watson连接到Google Actions,我的功能在firebase中,当我只测试与Watson的连接时,它就工作了。但当我尝试在谷歌控制台中测试它时,它关闭了项目 这是我在Firebase云函数中的代码: const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}

我正在尝试将Watson连接到Google Actions,我的功能在firebase中,当我只测试与Watson的连接时,它就工作了。但当我尝试在谷歌控制台中测试它时,它关闭了项目

这是我在Firebase云函数中的代码:

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

const app = actionssdk({debug: true});
var AssistantV1 = require('watson-developer-cloud/assistant/v1');

app.intent('actions.intent.MAIN', (conv) => {
    conv.ask('Olá, como posso lhe ajudar?');
});


app.intent('actions.intent.TEXT', (conv, input) => {
    var AssistantV1 = require('watson-developer-cloud/assistant/v1');
    var assistant = new AssistantV1({
        username: '###############',
        password: '###############',
        url:'###############',
        version: '2018-07-10'
    });

    assistant.message(
    {
        workspace_id: '###############',
        input: { text: result },
        headers: {'Custom-Header': 'custom',
        'Accept-Language': 'custom'
        }
    },
    function(response) {
        conv.ask(response.output.text[0]);
    }
    );
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);`

问题在于
assistant.message()
将回调函数作为处理响应的参数,但google library上的操作要求您在处理异步调用时返回承诺。您需要将此异步调用包装在一个承诺中,然后将此承诺返回到a-o-g库,以便它知道等待回调完成

我还没有测试代码,但我怀疑类似的东西应该可以工作:

return new Promise( (resolve, reject) => {
  assistant.message({
    workspace_id: '###############',
    input: { text: result },
    headers: {
      'Custom-Header': 'custom',
      'Accept-Language': 'custom'
    }
  },
  function(response) {
    conv.ask(response.output.text[0]);
    resolve();
  });

});

谢谢,它解决了这个问题,但现在我收到->“TypeError:无法读取undefined的属性'text'”这听起来像是另一个问题,我建议您发布详细信息,包括您当前的代码、出现的错误以及新堆栈溢出问题的位置。显示“响应”的值也可能有用。如果这个答案有帮助的话,我们将永远感谢你投票和/或接受它。