Microsoft Bot Framework发送消息,而无需用户与机器人对话

时间:2019-10-01 13:50:14

标签: javascript botframework bots

我需要让一个机器人使用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的POST,然后它使用适配器来处理该请求并从turnContext触发“ sendActivity”方法,该方法来自processActivity方法。

如何仅以固定的间隔发送消息,而忽略所有消息/提及。

1 个答案:

答案 0 :(得分:2)

您要执行的操作称为主动消息传递。您可以查看this documentthe sample it references,以更好地了解如何执行此操作。

如果您希望通过计时器触发主动消息,则可以在机器人的线程上运行计时器,尽管通常建议在外部运行计时器。

要为您的漫游器禁用消息传递,只需在channel configuration中选择该选项。不过,我不确定如果禁用消息传递功能将如何检索会话ID。

enter image description here

如果您仍然希望机器人接收消息,但又不想回复,只需编辑您的机器人代码中响应条件myfoo2的部分即可。

请记住,Skype机器人功能可能会越来越受限制。您应该在Skype频道配置中看到一条官方消息,内容为:

  

从2019年10月31日起,Skype频道将不再接受新的Bot注册。当前的Skype机器人将继续不间断运行。