c# - MS Bot Builder : how to set session data to proactive message?

标签 c# botframework

我首先通过 OAuthCallback 方法中的 sms channel 向用户发送主动消息

 var connector = new ConnectorClient();
 Message message = new Message();
 message.From = new ChannelAccount { Id = Constants.botId, Address = "+12312311", ChannelId = "sms", IsBot = true };
 message.To = new ChannelAccount { Id = newUserId, Address = "+18768763", ChannelId = "sms", IsBot = false };
 message.Text = $"How are you doing? ";
 message.Language = "en";
 connector.Messages.SendMessage(message);

 IBotData myDataBag = new JObjectBotData(message);

 myDataBag.UserData.SetValue("Username", "Bob");
 myDataBag.PerUserInConversationData.SetValue("Newuser", "yes");

然后在我的主 Dialog.cs 中我尝试访问它
public static readonly IDialog<string> dialog = Chain
    .PostToChain()            
    .Switch(new Case<Message, IDialog<string>>((msg) =>
    {
        var regex = new Regex("hello$", RegexOptions.IgnoreCase);
        return regex.IsMatch(msg.Text);
    },
    (ctx, msg) =>
    {
        // Clearing user related data upon logout
        string isnewuser = ctx.PerUserInConversationData.TryGetValue("Newuser");
        string username = ctx.UserData.TryGetValue("Username");
        return Chain.Return($"Welcome {username}");
    }))
    .Unwrap()
    .PostToUser();

我在手机上收到消息。但是,我无法取回保存在 OAuthCallback 中的用户名和新用户 session 数据。

我怀疑这是因为主动消息没有设置 sessionId。并且 sessionId 必须以某种方式不同。

那么我怎样才能让它在 future 的对话中将 session 数据设置为我的主动消息呢?

最佳答案

在proactive的场景中,当用户回复你的消息时, channel 的 session ID会发生变化,就像一个新的 session ,我们使用 channel 数据来做这种类型的功能,但是这个解决方案只针对小数据,你也可以选择创建使用与机器人框架用于保存对话上下文相同的表存储的持久 session ,在此解决方案中,您可以创建另一个表来存储序列化的数据,最后一个是使用分布式缓存(如 Redis)的持久 session ,但是这种类型的服务很昂贵,因此您必须分析哪种类型的解决方案适合您的解决方案,但首先,您应该尝试使用 Channel Data 属性,如果它有效,您可以分析另一种方法

我希望我有所帮助

关于c# - MS Bot Builder : how to set session data to proactive message?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899365/

相关文章:

javascript - Request.QueryString 不接收值

c# - 如何从编码的 UI 测试创建可执行文件(最好是 .exe 而不是命令行)?

facebook - 无法将 Facebook channel 添加到 Microsoft Bot Framework

c# - 如何从Azure表格存储中获取聊天记录

azure - 是否可以在没有azure平台的情况下创建聊天机器人(使用microsoft bot平台和luis)

c# - 是否可以使用 SDK4 通过 Bot 从 MS Teams 获取用户电子邮件?

c# - 如何使用 C# 互操作对 excel 中的列重新排序

c# - goto - 不在范围内 (C#)

c# - 使用正则表达式提取匹配文本

c# - 如何在 OnTurnAsync 方法中处理来自 AdaptiveCard 的回发