如何连接 Google Actions 和 Watson?
how do I connect Google Actions and Watson?
我正在尝试将 Watson 连接到 Google Actions,我的函数在 firebase 中,当我只测试与 Watson 的连接时,它可以工作。但是当我尝试在 Google 控制台中测试它时,它关闭了项目。
这是我在 Firebase Cloud Functions 中的代码:
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()
将回调函数作为参数来处理响应,但是 actions-on-google 库希望您 return Promise 当您正在处理异步调用。您需要将此异步调用包装在 Promise 中,然后 return 此 Promise 到 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();
});
});
我正在尝试将 Watson 连接到 Google Actions,我的函数在 firebase 中,当我只测试与 Watson 的连接时,它可以工作。但是当我尝试在 Google 控制台中测试它时,它关闭了项目。
这是我在 Firebase Cloud Functions 中的代码:
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()
将回调函数作为参数来处理响应,但是 actions-on-google 库希望您 return Promise 当您正在处理异步调用。您需要将此异步调用包装在 Promise 中,然后 return 此 Promise 到 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();
});
});