我希望我的机器人在未来某个时候与其他用户发起新的对话。我不是像Bot Connector Node.js文档中那样由传入的 POST 消息发起,而是尝试从对话本身发起。
目前还不清楚哪一种是 Node 的推荐方法:使用 require('botconnector')
、ConnectorClient()
或 Bot Connector REST API。
但是,基于run-async和LUIS示例,我注意到beginDialog
实际上允许您指定预期地址:bot.beginDialog(address, '/run-async/runner', { name: name });
或cortanaBot.beginDialog({ from: alarm.from, to: alarm.to }, '/notify', alarm);
我认为这是一种非常简单明了的方法,但是,当我包含此类参数时,机器人会停止响应(如果我只使用它,它会起作用session.beginDialog('/myalarm', { alarm: "some alarm" });
)。我错过了什么吗?
require('dotenv').config();
var restify = require('restify');
var builder = require('botbuilder');
// Get secrets from server environment
var botConnectorOptions = {
appId: process.env.BOTFRAMEWORK_APPID,
appSecret: process.env.BOTFRAMEWORK_APPSECRET
};
// Create bot
var bot = new builder.BotConnectorBot(botConnectorOptions);
function addressConverter(message) {
return {
to: message.from,
from: message.to//,
// conversationId: message.conversationId,
// channelConversationId: message.channelConversationId,
// channelMessageId: message.channelMessageId
};
}
bot.add('/myalarm', function(session) {
session.send('My Automatic Message');
session.endDialog();
});
bot.add('/', function(session) {
session.send('Hi');
// Delay sending the reply for 5 seconds
setTimeout(function() {
session.send({ text: '5s Time out!' })
var address = addressConverter(session.message);
console.log("Message Address:")
console.log(address)
session.beginDialog(address, '/myalarm', { alarm: "some alarm" });
}, 5000);
session.send({ text: 'I will automatically message you in 5 seconds.' })
});
// Setup Restify Server
var server = restify.createServer();
//server.pre(restify.pre.pause());
// Handle Bot Framework messages
server.post('/api/messages', bot.verifyBotFramework(), bot.listen());
// Serve a static web page
server.get(/.*/, restify.serveStatic({
'directory': '.',
'default': 'index.html'
}));
server.listen(process.env.port || 3978, function() {
console.log('%s listening to %s', server.name, server.url);
})
;