如何在使用Bot Framework V4 C#SDK的团队中迁移1:1主动消息功能
我有一个Bot Framework V3 SDK实现(工作正常),可以使用Microsoft Team Bot(安装在同一个团队中)与特定团队中的任何用户启动1:1私人聊天。 我在尝试将其迁移到V4 SDK时遇到问题 我读过很多文章和其他问题,除非用户首先联系机器人(以避免向用户发送垃圾邮件),否则不可能做到这一点,但V3版本不是这样,我需要的功能也不是这样 原始解决方案使用Microsoft.Bot.Connector.Teams程序集中的“如何在使用Bot Framework V4 C#SDK的团队中迁移1:1主动消息功能,c#,migration,botframework,microsoft-teams,proactive,C#,Migration,Botframework,Microsoft Teams,Proactive,我有一个Bot Framework V3 SDK实现(工作正常),可以使用Microsoft Team Bot(安装在同一个团队中)与特定团队中的任何用户启动1:1私人聊天。 我在尝试将其迁移到V4 SDK时遇到问题 我读过很多文章和其他问题,除非用户首先联系机器人(以避免向用户发送垃圾邮件),否则不可能做到这一点,但V3版本不是这样,我需要的功能也不是这样 原始解决方案使用Microsoft.Bot.Connector.Teams程序集中的“CreateOrGetDirectConversat
CreateOrGetDirectConversation
”扩展方法,但在该程序集的V4版本中不可用
我尝试使用CreateDirectConversation
/CreateDirectConversationAsync
方法,但没有成功(它们总是导致“错误请求”错误)
这是使用V3库实际运行的代码:
//创建1:1对话
var conversation=connectorClient.Conversations.CreateOrGetDirectConversation(botAccount、user、tenantId);
//向用户发送消息
var message=Activity.CreateMessageActivity();
message.Type=ActivityTypes.message;
message.Text=“我的消息”;
connectorClient.Conversations.SendToConversation((活动)消息,conversation.Id);
我发现很难迁移。我遗漏了什么吗?根据文件:
机器人程序可以创建与单个Microsoft team用户的新对话,只要您的机器人程序在个人、groupChat或团队范围内具有通过先前添加获得的用户信息。此信息使您的机器人能够主动通知他们。例如,如果您的机器人被添加到团队中,它可以查询团队名册并在个人聊天中向用户发送个人消息,或者用户可以@提及另一个用户以触发机器人向该用户发送直接消息
注意:V4的扩展仍在预发布中,这就是为什么很难找到它的示例和代码的原因
添加中间件
在Startup.cs
中:
var-credentials=新的SimpleCredentialProvider(配置[“MicrosoftAppId”]、配置[“MicrosoftAppPassword”]);
服务。AddSingleton(凭证);
[...]
services.AddBot(选项=>
{
options.CredentialProvider=凭证;
options.Middleware.Add(
新团队管理软件(
新的ConfigurationCredentialProvider(this.Configuration));
[...]
准备你的机器人
在主.cs
中:
private readonly SimpleCredentialProvider\u credentialProvider;
[...]
公共(会话状态会话状态,SimpleCredentialProvider CredentialProvider)
{
_credentialProvider=credentialProvider;
[...]
发送消息
var teamConversationData=turnContext.Activity.GetChannelData();
var connectorClient=new connectorClient(新Uri(activity.ServiceUrl)、\u credentialProvider.AppId、\u credentialProvider.Password);
var userId=;
var tenantId=teamConversationData.Tenant.Id;
var参数=新的ConversationParameters
{
Members=new[]{new ChannelAccount(userId)},
ChannelData=新团队SchannelData
{
租户=新租户信息(租户信息),
},
};
var conversationResource=await connectorClient.Conversations.CreateConversationAsync(参数);
var message=Activity.CreateMessageActivity();
message.Text=“这是一条主动消息。”;
等待connectorClient.Conversations.SendToConversationAsync(conversationResource.Id,(活动)消息);
注意:如果需要获取用户ID,可以使用:
var members=(等待turnContext.TurnState.Get().Conversations.GetConversationMembersSync(
Activity.GetChannelData().Team.Id).ConfigureAwait(false)).ToList();
此外,我在测试中不需要这个,但如果您出现401个错误,您可能需要:
MicrosoftAppCredentials.TrustServiceUrl(turnContext.Activity.ServiceUrl);
资源