我有一个Microsoft Bot Framework的v4创建的Bot。我可以在Azure门户的“网络聊天测试”部分中成功使用此漫游器。我也可以在我在Microsoft Teams中创建的应用程序中成功使用此bot。我现在想从“在Web聊天中测试”部分发送通知给Teams中的特定用户。例如,在“测试网络聊天”中,我想输入
Hello someuser@mytenant.com
当通过“网络聊天测试”发送该消息时,我想在Microsoft Teams中仅向someuser@mytenant.com
显示“ Hello”。我已经成功地标记了“ Web聊天中的测试”中的字符串。因此,我知道我想发送什么,以及我想发送给谁。但是,我不知道该如何发送。
当前,我的机器人中包含以下内容:
public class EchoBot : ActivityHandler
{
private ConcurrentDictionary<string, ConversationReference> _conversationReferences;
public EchoBot(ConcurrentDictionary<string, ConversationReference> conversationReferences)
{
_conversationReferences = conversationReferencs;
}
private void AddConversationReference(Activity activity)
{
var reference = activity.GetConversationReference();
_conversationReferences.AddOrUpdate(reference.User.Id, reference, (key, newValue) => reference);
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> context, CancellationToken cancellationToken)
{
AddConversationReference(context.Activity as Activity);
var parameters = GetParameters(); // Parses context.Activity.Text;
// Send a message to the target (i.e. someuser@mytenant.com)
var connection = new Microsoft.Bot.Connector.ConnectorClient(new Uri(context.Activity.ServiceUrl));
var tenant = context.Activity.GetChannelData<TeamsChannelData>().Tenant;
// how do I send the message to parameters.Target?
// Confirm message was sent to the sender
var confirmation = $"Message was sent to {parameters.Target}.";
await context.SendActivityAsync(MessageFactory.Text(confirmation));
}
}
我已经审查了如何send proactive notifications to users。但是,我一直无法成功完成以下工作:a)获取parameters.Target
中指定的用户,以及b)向该用户发送通知。我想念什么?
答案 0 :(得分:1)
首先,您需要将user@email.com
映射到其Teams userId(可能带有静态字典),格式为:
29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzXXXXXXXXMij8BVMdBcL9L_RwWNJyAHFQb0TXXXXXX
您可以通过以下任一方式获取小组用户ID:
Activity.ChannelData
,或者Activity.ChannelData
中找到)。注意:#1和#2都要求用户首先向机器人发送消息,这会破坏主动消息的目的
有了适当的团队ID后,您只需send a proactive message to a Teams user。该链接的末尾还提到了trustServiceUrl
,如果您在尝试发送主动消息时遇到权限/身份验证问题,可能会很方便。