Javascript Microsoft Bot Framework在没有用户与Bot对话的情况下发送消息

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

我需要制作一个机器人,使用Javascript每十分钟发送一条消息。我正在使用Microsoft Bot Framework,这是输入代码:

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不会对传入活动做出反应,因此您需要使用恒定密钥定义自己的状态存储类型。