【发布时间】:2018-05-07 14:11:13
【问题描述】:
我有一个与docs quickstart 中演示的机器人相同的机器人。它会重复用户所说的任何内容(目前)。
它当前在本地运行并使用 ngrok 公开。我已经使用 Microsoft Bot Framework 注册了该机器人。
我已在 Microsoft Bot Framework 中配置 Microsoft Teams 频道,并将我的机器人旁加载到 Teams 中。我的机器人可以接收来自 Teams 用户的消息。
目前,机器人只是将收到的任何内容重复给用户,但我希望它做的是发布到 Microsoft Teams 频道。我希望它发布到 Teams 频道 - 不是用户 - 无需用户先提示。因此,例如给定特定条件(例如,由某些事件触发,例如一天中的某个时间、拉取请求等),它会在频道中发布一条消息。
我已阅读有关 sending proactive messages 的文档,并且我了解到为了向团队频道发送消息,机器人需要知道用户的“地址”。此信息存储在session.message.address 对象中,并从当前对话中获取。但是,就我而言,我没有“当前保护”,因为我不想只回复用户,我想主动在频道中发帖。
那么,如何为 Teams 频道永久设置必要的凭据/地址/会话数据?
我调查过的事情:
网络挂钩。我已经在我的 Teams 频道中配置了一个 webhook,我可以使用
curl轻松地向它发送一条消息(使用 webhook url)。因此,我可以向 Teams 频道发送仅包含 url 的简单消息(无需身份验证),但我不确定如何将此 url 输入到我的机器人中。How do we maintain different session for different users in Microsoft Bot Framework? 我不确定这里的答案是否能回答我的 问题。我的问题是机器人正在启动“对话”,而不是团队用户,所以我需要能够自己设置会话数据,以便机器人知道去哪里。
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);
});
【问题讨论】:
标签: node.js botframework microsoft-teams