openwhisk actions/IBM Cloud Functions 中的第三方 npm 包
Third party npm package in openwhisk actions / IBM Cloud Functions
我是 OpenWhisk / IBM Cloud Functions 的新手。我尝试使用 IBM Watson Assistant 构建一个基本的聊天机器人应用程序。
所以我拥有的是从我的 Node.js 服务器调用的云函数操作,该操作具有与 Watson 服务交互的所有凭据,我使用 "watson-developer-cloud" npm 包作为依赖项。当我在本地计算机上 运行 时,一切都按预期工作,但是,当我压缩目录并将其作为 OpenWhisk Web 操作上传时,它无法安装依赖项。
我遵循的程序是:
- 运行
npm install
- 压缩当前目录下的所有文件(包括node_modules)
- 使用以下命令上传动作
bx wsk action create chataction --kind nodejs:8 chatactionzip.zip
(这里的 chatactionzip 是压缩后的文件名)。
谁能帮我解决这个问题?我正在上传目录结构的截图。
package.json是这样的
`
{
"name": "chataction",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"watson-developer-cloud": "^3.13.0"
}
}
`
这是我的代码(我正在删除一些凭据,其余部分保持原样)
`
const AssistantV1 = require('watson-developer-cloud/assistant/v1');
function main(params) {
var inputText = params.inputText || 'input was not sent';
//return {result: inputText}
var assistant = new AssistantV1({
username: '',
password: '',
url: '',
//api_key: '',
version: '2018-11-26'
});
var inputMessageParams = {
input: {
text: inputText
},
workspace_id: ''
}
assistant.message(inputMessageParams, function(err, result, response) {
if(err) {
console.log(err);
return {err: err}
}
else {
// console.log(response);
// console.log(response.body.output.text);
// console.log(response.data);
return {result: response.body.output.text[0]}
}
});
//return {notHit: 'npm not working'}
}
exports.main = main;
`
调用代码是这样的
`
const openwhisk = require('openwhisk');
options = {
apihost: 'openwhisk.eu-gb.bluemix.net',
api_key: ''
}
var ow = openwhisk(options);
var params = {inputText: 'Hello'}
var name = 'chataction';
var blocking = true;
var result = true;
ow.actions.invoke({name, blocking, result, params})
.then((result) => {
console.log(result);
});
`
乍一看,您创建的操作是 chataction,但您正在调用 ChatActionZip
几件事:
- Watson Assistant 的 API 版本需要有效。 The latest for V1 API is 2018-09-20.
- 包watson-developer-cloud v3.13.0 is part of the Node.js version 8 environment。如果您没有任何其他依赖项,请尝试仅指定 js 文件并避免使用 zip。
- 存在一个您可以使用的Watson Assistan package for IBM Cloud Functions。
Serverless Actions 是异步的,您需要将代码包装在 Promise 中,或者如果 API 您的使用已经返回 Promise
,则使用 try/catch
您的主要功能在您的方法 assistant.message()
调用完成之前结束
return new Promise((resolve, reject) =>{
assistant.message(inputMessageParams, function(err, result, response) {
if(err) {
console.log(err);
reject({err: err})
}
else {
// console.log(response);
// console.log(response.body.output.text);
// console.log(response.data);
resolve( {result: response.body.output.text[0]})
}
});
});
有关异步 javascript 的更多信息,请参见此处的文档:https://console.bluemix.net/docs/openwhisk/openwhisk_reference.html#openwhisk_ref_javascript
我是 OpenWhisk / IBM Cloud Functions 的新手。我尝试使用 IBM Watson Assistant 构建一个基本的聊天机器人应用程序。 所以我拥有的是从我的 Node.js 服务器调用的云函数操作,该操作具有与 Watson 服务交互的所有凭据,我使用 "watson-developer-cloud" npm 包作为依赖项。当我在本地计算机上 运行 时,一切都按预期工作,但是,当我压缩目录并将其作为 OpenWhisk Web 操作上传时,它无法安装依赖项。
我遵循的程序是:
- 运行
npm install
- 压缩当前目录下的所有文件(包括node_modules)
- 使用以下命令上传动作
bx wsk action create chataction --kind nodejs:8 chatactionzip.zip
(这里的 chatactionzip 是压缩后的文件名)。
谁能帮我解决这个问题?我正在上传目录结构的截图。
package.json是这样的
`
{
"name": "chataction",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"watson-developer-cloud": "^3.13.0"
}
}
`
这是我的代码(我正在删除一些凭据,其余部分保持原样) `
const AssistantV1 = require('watson-developer-cloud/assistant/v1');
function main(params) {
var inputText = params.inputText || 'input was not sent';
//return {result: inputText}
var assistant = new AssistantV1({
username: '',
password: '',
url: '',
//api_key: '',
version: '2018-11-26'
});
var inputMessageParams = {
input: {
text: inputText
},
workspace_id: ''
}
assistant.message(inputMessageParams, function(err, result, response) {
if(err) {
console.log(err);
return {err: err}
}
else {
// console.log(response);
// console.log(response.body.output.text);
// console.log(response.data);
return {result: response.body.output.text[0]}
}
});
//return {notHit: 'npm not working'}
}
exports.main = main;
`
调用代码是这样的 `
const openwhisk = require('openwhisk');
options = {
apihost: 'openwhisk.eu-gb.bluemix.net',
api_key: ''
}
var ow = openwhisk(options);
var params = {inputText: 'Hello'}
var name = 'chataction';
var blocking = true;
var result = true;
ow.actions.invoke({name, blocking, result, params})
.then((result) => {
console.log(result);
});
`
乍一看,您创建的操作是 chataction,但您正在调用 ChatActionZip
几件事:
- Watson Assistant 的 API 版本需要有效。 The latest for V1 API is 2018-09-20.
- 包watson-developer-cloud v3.13.0 is part of the Node.js version 8 environment。如果您没有任何其他依赖项,请尝试仅指定 js 文件并避免使用 zip。
- 存在一个您可以使用的Watson Assistan package for IBM Cloud Functions。
Serverless Actions 是异步的,您需要将代码包装在 Promise 中,或者如果 API 您的使用已经返回 Promise
,则使用 try/catch您的主要功能在您的方法 assistant.message()
调用完成之前结束
return new Promise((resolve, reject) =>{
assistant.message(inputMessageParams, function(err, result, response) {
if(err) {
console.log(err);
reject({err: err})
}
else {
// console.log(response);
// console.log(response.body.output.text);
// console.log(response.data);
resolve( {result: response.body.output.text[0]})
}
});
});
有关异步 javascript 的更多信息,请参见此处的文档:https://console.bluemix.net/docs/openwhisk/openwhisk_reference.html#openwhisk_ref_javascript