我正在使用XMLHttpRequest创建DialogFlow应用并使用Cloud Functions for Firebase部署实现。 但是发生了以下错误。
错误:EROFS:只读文件系统,打开'.node-xmlhttprequest-sync-2' 在错误(本机) at Object.fs.openSync(fs.js:642:18) at Object.fs.writeFileSync(fs.js:1348:33) at send(/user_code/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:477:10)
我的代码是这样的。
'use strict';
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const DialogflowApp = require('actions-on-google').DialogflowApp;
const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
const googleAssistantRequest = 'google';
const Actions = {
UNRECOGNIZED_DEEP_LINK: 'deeplink.unknown',
TEST_HTTPREQUEST: 'test.httprequest'
};
const testHttpRequest = app => {
var req = new XMLHttpRequest();
req.open('GET', 'http://www.google.com', false);
req.send();
if (req.status === 200) {
console.log(req.responseText);
}
}
const actionMap = new Map();
actionMap.set(Actions.TEST_HTTPREQUEST, testHttpRequest);
exports.mytestapp = functions.https.onRequest((request, response) => {
const app = new DialogflowApp({ request, response });
console.log(`Request headers: ${JSON.stringify(request.headers)}`);
console.log(`Request body: ${JSON.stringify(request.body)}`);
app.handleRequest(actionMap);
});
有没有人知道如何解决这个错误?
答案 0 :(得分:0)
您的函数testHttpRequest
需要使用app
来响应来自Dialogflow的用户请求。使用ask
或tell
方法来回复请求。例如,在testHttpRequest
中的if语句之后,您可以添加:
app.tell('This response came from Cloud Functions for Firebase!');
告诉Google客户端库上的操作,当您通过Google模拟器上的操作或Google智能助理设备调用助理应用时,将该字符串作为对您请求的响应发送(请参阅Google测试文档上的操作)。
您可能还遇到了动作名称问题。您在此处的履行中引用的操作(deeplink.unknown
和test.httprequest
)也必须列为an action in an intent in your Dialogflow agent,否则您的代码将永远不会被触发。 Google智能助理还需要一个欢迎意图。默认情况下,Dialogflow中的欢迎意图的操作input.welcome
不包含在您的代码中,因此在您匹配代码和Dialogflow代理中列出的操作之前,您的代码可能不会被触发。
此外,外部HTTP呼叫(在Google的网络之外)are not permitted on Cloud Functions without setting up billing first。