首页 文章

我如何让我的机器人向Microsoft Teams Channels 发布消息?

提问于
浏览
4

我的机器人与docs quickstart中演示的机器人相同 . 无论用户说什么(现在),它都会重复 .

它目前在本地运行,并使用ngrok进行曝光 . 我已经使用Microsoft Bot Framework注册了bot .

我已经在Microsoft Bot Framework中配置了Microsoft Teams Channels ,并且我将我的机器人安装到了团队中 . 我的机器人可以从团队用户接收消息 .

目前,机器人只是重复它收到的任何回复给用户,但 what I want it to do is post to a Microsoft Teams channel . 我希望它发布到Teams Channels - not a user - 而不是由用户首先提示 . 因此,例如,给定某个条件(例如,由某些事件触发,例如时间,拉取请求等),它在 Channels 中发布消息 .

我已经阅读了有关sending proactive messages的文档,并且我认为为了向团队 Channels 发送消息,机器人需要知道用户的"address" . 此信息存储在 session.message.address 对象中,它从当前对话中获取 . 但是,在我的情况下,我不想回复用户,我想主动在 Channels 中发帖 .

那么,如何为Teams Channels 永久设置必要的凭证/地址/会话数据?

我已经研究过的事情:

  • Webhooks . 我在我的Teams Channels 中配置了一个webhook,我可以使用 curl 轻松地发送消息(使用webhook url) . 因此,我可以向团队 Channels 发送一个简单的消息,只需一个网址(不需要身份验证),但我'm not sure how I' d将此网址发送到我的机器人 .

  • How do we maintain different session for different users in Microsoft Bot Framework?我不确定这里的答案是否回答了我的问题 . 我的问题是机器人正在启动'conversation',而不是团队用户,因此我需要能够自己设置会话数据,以便机器人知道去哪里 .

App.js:

require('dotenv').config();
var restify = require('restify');
var builder = require('botbuilder');

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
   console.log('%s listening to %s', server.name, server.url); 
});

// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD    
});

// Listen for messages from users 
server.post('/api/messages', connector.listen());

// Receive messages from the user and respond by echoing each message back (prefixed with 'You said:')
var bot = new builder.UniversalBot(connector, function (session) {
    session.send("You said: %s", session.message.text);
});

2 回答

  • 0

    希望这对你有用..下面的代码在开始聊天之前主动将消息发送到会话 .

    bot.on('conversationUpdate', function (message) {  
           if (message.membersAdded[0].id === message.address.bot.id) {             
                 var reply = new builder.Message()    
                       .address(message.address)               
                       .text("Hello"");        
                 bot.send(reply);    
           }
        });
    
  • 2

    这绝对是可能的 . 我们将这些主动消息称为主动消息,并且可以主动向用户和 Channels 发送消息 .

    对于后者,请参阅https://github.com/OfficeDev/microsoft-teams-sample-complete-node处的示例,特别是此文件ProactiveMsgToChannelDialog.ts .

    要将主动消息发送到 Channels ,您需要使用Microsoft Teams SDK(如这些示例所示) .

    最后但并非最不重要的是,您需要将机器人添加到团队中,以便向团队中的某个渠道发送消息,这需要清单 .

相关问题