我首先通过OAuthCallback方法中的短信通道向用户发送主动消息
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中保存的用户名和新用户会话数据。
我怀疑这种情况正在发生,因为主动消息没有设置conversationId。而且对话必须以某种方式有所不同。
那么如何在未来的会话中将会话数据设置为我的主动消息呢?
答案 0 :(得分:0)
在主动方案中,当用户应答您的消息时,频道的对话ID会发生变化,就像一个新的会话一样,我们使用频道数据来执行此类功能,但是此解决方案仅适用于小数据,您还可以使用bot框架用来保存对话框上下文的表存储创建持久会话的选项,在此解决方案中,您可以创建另一个表来存储序列化的数据,最后一个表是使用分布式缓存的持久会话,例如Redis,但是这种类型的服务很昂贵,因此您必须分析哪种类型的解决方案最适合您的解决方案,但是首先,您应该尝试使用Channel Data属性,如果可行,则可以分析另一种方法
希望我能对您有所帮助
答案 1 :(得分:0)
不确定四年后这是否仍然有用,但是我认为我在Access UserProfile from NotifyBot中发现了这一点。看看。