and*_*ies 5 node.js botframework microsoft-teams
我有一个与docs quickstart中演示的机器人相同的机器人。无论用户说什么(现在),它都会重复执行。
它当前在本地运行,并通过ngrok公开。我已经在Microsoft Bot Framework中注册了该机器人。
我已经在Microsoft Bot Framework中配置了Microsoft Teams频道,并且已经将我的机器人加载到了Teams中。我的机器人可以接收来自 Teams用户的消息。
目前,该机器人只是将收到的所有内容重复发送给用户,但我要执行的操作是发布到Microsoft Teams频道。我希望它发布到Teams频道- 而不是用户 -无需用户首先提示。因此,例如,在给定特定条件(例如,由某些事件(例如一天中的时间,提取请求等)触发)的情况下,它将在通道中发布消息。
我已经阅读了有关发送主动消息的文档,并且为了将消息发送到团队通道,我收集了该机器人需要知道用户的“地址”。此信息存储在session.message.address对象中,并从当前对话中获取该信息。但是,就我而言,我没有“当前保留”功能,因为我不想只回应用户,所以我想主动发布在频道中。
那么,如何为团队频道永久设置必要的凭据/地址/会话数据?
Webhooks。我已经在Teams频道中配置了一个Webhook,并且可以使用轻松地(使用webhook网址)向其发送消息curl。因此,我可以向团队频道发送一条简单的消息,其中仅包含一个网址(无需身份验证),但是我不确定如何将该网址发送到我的机器人中。
我们如何在Microsoft Bot Framework中为不同的用户维护不同的会话?我不确定这里的答案是否能回答我的问题。我的问题是,机器人正在发起“对话”,而不是Teams用户,因此我需要能够自己设置会话数据,以便机器人知道要去哪里。
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);
});
Run Code Online (Sandbox Code Playgroud)
小智 5
对于任何想为c#做到这一点的人,以下是对我有用的解决方案:
var channelData = context.Activity.GetChannelData<TeamsChannelData>();
var message = Activity.CreateMessageActivity();
message.Text = "Hello World";
var conversationParameters = new ConversationParameters
{
IsGroup = true,
ChannelData = new TeamsChannelData
{
Channel = new ChannelInfo(channelData.Channel.Id),
},
Activity = (Activity) message
};
var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl));
var response = await
connectorClient.Conversations.CreateConversationAsync(conversationParameters);
Run Code Online (Sandbox Code Playgroud)
注意:如果要在Bot的控制器代码之外调用此代码,则需要在serviceUrl上调用TrustServiceUrl,如下所示:
MicrosoftAppCredentials.TrustServiceUrl(serviceUrl, DateTime.MaxValue);
var connectorClient = new ConnectorClient(new Uri(serviceUrl));
Run Code Online (Sandbox Code Playgroud)
答案来源:https : //github.com/OfficeDev/BotBuilder-MicrosoftTeams/issues/162
这绝对是可能的。我们将这些称为主动消息,并且可以主动向用户和渠道发送消息。
\n\n对于后者,请参阅https://github.com/OfficeDev/microsoft-teams-sample-complete-node上的示例,特别是此文件ProactiveMsgToChannelDialog.ts。
\n\n要将主动消息发送到渠道,您需要使用 Microsoft Teams SDK(如这些示例所示)。
\n\n最后但并非最不重要的一点是,您需要将机器人添加到团队中,以便向团队中的某个频道发送消息,这需要清单。
\n| 归档时间: |
|
| 查看次数: |
4390 次 |
| 最近记录: |