C# MS bot framework在整个会话的各个功能中使用用户名及其属性
大家好,我使用的是MSbot框架,v4,我使用的是C代码。我已将机器人部署在直连机器人通道中 我使用JavaScript在前端获取用户名和他的属性,并将其传递给机器人。 使用状态管理,我可以在onMemberAddedAdaSync活动中管理用户名C# MS bot framework在整个会话的各个功能中使用用户名及其属性,c#,botframework,session-variables,direct-line-botframework,C#,Botframework,Session Variables,Direct Line Botframework,大家好,我使用的是MSbot框架,v4,我使用的是C代码。我已将机器人部署在直连机器人通道中 我使用JavaScript在前端获取用户名和他的属性,并将其传递给机器人。 使用状态管理,我可以在onMemberAddedAdaSync活动中管理用户名 protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpd
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var userStateAccessors = _userState.CreateProperty<UserProfile>(nameof(UserProfile));
var userProfile = await userStateAccessors.GetAsync(turnContext, () => new UserProfile());
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
userProfile.Name = member.Name.Replace('.', ' ');
await turnContext.SendActivityAsync(MessageFactory.Text($"Hi **{member.Name.Replace('.',' ')}**. I'm bot, "), cancellationToken);
}
}
}
受保护的覆盖MemberSaddedAsync上的异步任务(IList membersAdded、iTunesContext turnContext、CancellationToken CancellationToken)
{
var userStateAccessors=_userState.CreateProperty(nameof(UserProfile));
var userProfile=await userStateAccessors.GetAsync(turnContext,()=>newuserprofile());
foreach(membersAdded中的var成员)
{
if(member.Id!=turnContext.Activity.Recipient.Id)
{
userProfile.Name=member.Name.Replace('.','');
Wait turnContext.SendActivityAsync(MessageFactory.Text($“Hi**{member.Name.Replace('.','')}**.I'm bot,”),cancellationToken);
}
}
}
一切正常,直到这里,当我尝试在OnMessageActivityAsync中使用用户名时,成员的范围没有扩展,因此我创建了一个全局变量,在其中分配用户名,该变量现在已扩展,可以在其他方法中使用,但与当前用户的会话无关,如果其他用户登录到bot,则会使用他们的名称
另外,我有一些类似于email id的自定义用户属性,但在对话过程中会发生变化,我需要捕获该值并将其传递给前端JavaScript代码以执行一些前端活动,这也不是特定于会话的
是否有任何选项可用于维护多个函数和其他用户属性中使用的用户名的会话
请建议一种方法。我找到了在整个会话中使用用户名的解决方案,我们可以从turncontext本身捕获用户名,如下所述
await turnContext.SendActivityAsync(MessageFactory.Text("Hi, **" + turnContext.Activity.From.Name + "** How are you !"), cancellationToken);
turnContext.Activity.From.Name=>这将给出用户的名称?@stuartd感谢您的回复,我使用状态管理模板开发了bot,与您提到的一样,我面临的挑战是使用其他方法(如OnTurnAsync和OnEventActivityAsync)访问会话状态和用户状态数据,有没有可能的方法。考虑我的情况:我将把用户名指定为USER Prime.Name=成员。NoMeNestAddiaSycC方法中的名称,并且我想在OnMeMeAdvigyAsYNC方法中使用相同的方法。如何做到这一点在那篇文章的
OnMessageActivityAsync
中有一个访问用户和会话状态的例子?这对你不管用吗?@JeganBaskaran你找到解决办法了吗?