MS bot 框架在整个会话的各种功能中使用用户名及其属性

MS bot framework use the user name and his properties throughout the session in various functions

您好,我使用的是 MS Bot 框架 v4,我使用的是 C# 代码。我已经在 Direct-line 机器人通道中部署了机器人。

我在前端使用 JavaScript 获取用户名及其属性,并将其传递给机器人。 使用状态管理,我可以在 onmemberaddedasync activity.

中管理用户名
 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);

            }
        }

    }

到这里为止一切正常,当我尝试在 OnMessageActivityAsync 中使用用户名时,成员的范围没有扩展,因此我创建了一个分配给其中用户名的全局变量,现在已扩展并且可以可以在其他方法中使用,但它与当前用户的会话无关,如果其他用户登录了机器人,它会使用他们的名字。

此外,我有一些类似于电子邮件 ID 的自定义用户属性,但这会在对话过程中发生变化,我需要捕获该值并将其传递给前端 JavaScript 代码来完成一些前端活动,这也不是特定于会话的。

是否有任何选项可以为多个功能和其他用户属性中使用的用户名维护会话。

请推荐一个方法。

我找到了在整个会话中使用用户名的解决方案,我们可以从 turncontext 本身捕获用户名,如下所述。

 await turnContext.SendActivityAsync(MessageFactory.Text("Hi, **" + turnContext.Activity.From.Name + "** How are you !"), cancellationToken);

turnContext.Activity.From.Name => 这将给出用户名