我正在尝试使用 actionssdk 将 Google Home 连接到外部聊天机器人。我有一个 API,它接受用户输入并使用 Webhook 将其发送到我的聊天机器人,但我的聊天机器人以异步方式调用 API 的另一个端点做出响应,并且我无法在 Google 或 Google Home 上的操作中显示响应。
我创建了一个 actionssdkApp。
const {
actionssdk,
SimpleResponse,
Image,
} = require('actions-on-google');
var app = actionssdk();
var express_app = express();
我的 API 有 2 个端点。其中之一是在谷歌上执行操作,将用户输入发送到我的聊天机器人:
app.intent('actions.intent.MAIN', conv => {
console.log('entra en main');
conv.ask('Hi, how is it going?');
});
app.intent('actions.intent.TEXT', (conv, input) => {
var userId = conv.body.user.userId;
console.log(userId);
if(userId && input){
textFound(conv, input, userId);
}else{
textnotFound(conv);
}
});
TextFound 函数使用 webhook 将用户输入发送到我的聊天机器人,但请求未收到响应。我的聊天机器人使用文本答案调用另一个端点:
express_app.post('/webhook', bodyParser.json(), (req, res)=>{
console.log("Webhook");
const userId = req.body.userId;
if (!userId) {
return res.status(400).send('Missing User ID');
}
console.log(req.body);
res.sendStatus(200);
});
这是我想将答案发送到 Google Home 的地方。但我需要 conv 对象在 google Home 中显示答案,或者在 google 或任何其他设备上显示操作。
Edit:
My textFound
功能:
webhook.messageToBot(metadata.channelUrl, metadata.channelSecretKey, userId, input, function(err){
if(err){
console.log('Error in sending message');
conv.ask("Error in sending message");
}else{
conv.ask("some text");
}
});
从这里我的 api 通过以下方式将用户输入发送到我的机器人messageToBot
功能:
request.post({
uri: channelUrl,
headers: headers,
body: body,
timeout: 60000,
followAllRedirects: true,
followOriginalHttpMethod: true,
callback: function(err, res, body) {
if (err) {
console.log('err: '+err);
callback(err);
} else {
console.log('Message sent');
callback(null);
}
}
});
从现在开始,我的机器人不再发送响应,而是拨打电话/webhook
我的 api 的端点和答案。但在这个函数中我没有 de conv 对象,我无法将答案发送给谷歌。我不知道如何访问这个对象。也许有一个 uri 可以通过我的 api 在 google 上的操作中连接到我的项目。