Javascript Microsoft Bot Framework在没有用户与Bot对话的情况下发送消息
我需要制作一个机器人,使用Javascript每十分钟发送一条消息。我正在使用Microsoft Bot Framework,这是输入代码:Javascript Microsoft Bot Framework在没有用户与Bot对话的情况下发送消息,javascript,botframework,bots,Javascript,Botframework,Bots,我需要制作一个机器人,使用Javascript每十分钟发送一条消息。我正在使用Microsoft Bot Framework,这是输入代码: const restify = require('restify'); const botbuilder = require('botbuilder'); var adapter = new botbuilder.BotFrameworkAdapter({ appId: process.env.MicrosoftAppId, appPas
const restify = require('restify');
const botbuilder = require('botbuilder');
var adapter = new botbuilder.BotFrameworkAdapter({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword
});
let server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log(`\n${server.name} listening to ${server.url}`);
console.log(`\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator`);
});
server.post('/api/messages', (req, res) => {
adapter.processActivity(req, res, async (turnContext) => {
if (turnContext.activity.type === 'message') {
const text = turnContext.activity.text;
await turnContext.sendActivity(`You just said: ${ text }`);
}
});
});
基本上,对于与机器人交谈的人所说的任何话,都会以“你刚才说:x”来回应
我需要的是机器人在Skype中分组,每十分钟发送一条消息
但是,在我的示例中,服务器等待发送到/api/messages,然后使用适配器处理该请求,并从turnContext(来自processActivity方法)触发“sendActivity”方法
我怎么能只在固定的时间间隔发送一条消息,而忽略所有消息/提及 您要做的是称为主动消息传递。您可以查看并更好地了解如何执行此操作 如果您希望由计时器触发主动消息,则可以在bot中的线程上运行计时器,不过通常建议在外部运行计时器 要禁用bot的消息传递,只需在应用程序中选择该选项。但是,如果禁用消息传递,我不确定如何检索对话ID 如果您仍然希望bot接收消息但不想回复消息,只需编辑bot代码中响应条件的部分
turnContext.activity.type=='message'
请记住,Skype机器人的功能可能会越来越有限。您应该在Skype频道配置中看到一条官方消息,上面写着:
截至2019年10月31日,Skype频道将不再接受新的机器人注册。当前的Skype机器人将继续不间断地运行
不确定这是否有效,但您是否查看过主动消息?我认为您可以使用这里的方法,但是让消息在计时器上发送,而不是基于通知。我一直在寻找一种方法来实现这一点,但Microsoft文档提供的主动消息示例取决于用户至少联系一次机器人,以便它能够捕获并存储会话id以进行进一步的交互。如果我正确理解这个问题(这就是我要找的)@nick正在尝试与用户联系,而不管之前是否有过交互。谢谢,我使用了主动消息,它很有效!我会在另一个进程上设置一个计时器。我遇到了一个问题,尽管每次我将更改推送到bot时,它都会停止服务器重新加载更改,因此我需要再次标记bot以使其工作。我需要在数据库中保存聊天记录的引用来解决这个问题,对吗?是的,机器人不应该在自己的内存中存储任何需要在回合之间保存的内容。传统的bot状态使用传入活动中的会话ID和/或用户ID作为密钥来访问存储中的正确数据,但您的主动消息传递bot不会对传入活动做出反应,因此您需要使用恒定密钥定义自己的状态存储类型。