微软今天发表了关于Bot Framework的GDPR合规性的博文 - https://blog.botframework.com/2018/04/23/general-data-protection-regulation-gdpr/。
有一个实施(https://github.com/leeroy79/GDPRBot),但遇到了一些障碍。他们提供的样本依赖于已弃用的州服务,因此对备选方案感到疑惑。
第1部分 -
具体来说 - 我们如何在不使用状态客户端的情况下获得IBotState
或IConversations
(其中3个提到的GDPR方法可以运行),无论是在机器人内部还是在推荐的外部网站中?
第2部分 -
在给定上述方法SetUserData()
和SetPrivateConversationData()
的情况下,如何为某个特定用户清除对话/用户/私人对话数据的任何想法都被弃用了?
我尝试了以下但实际上并没有清除状态。我可以直接执行context.UserData.Clear()
和context.PrivateConversationData.Clear()
但是当此代码移动到独立网站并且context
无法按照GDPR帖子中的建议提供时,这将无效。
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, context.Activity.AsMessageActivity()))
{
var dataStore = scope.Resolve<IBotDataStore<BotData>>();
var address = new Address(
context.Activity.Recipient.Id,
context.Activity.ChannelId,
context.Activity.From.Id,
context.Activity.Conversation.Id,
context.Activity.ServiceUrl);
var token = default(CancellationToken);
await dataStore.SaveAsync(address, BotStoreType.BotUserData, null, token);
await dataStore.SaveAsync(address, BotStoreType.BotPrivateConversationData, null, token);
await dataStore.FlushAsync(address, token);
}
干杯
利
答案 0 :(得分:2)
我们如何获得
IBotState
或IConversations
(其中3个 提到的GDPR方法在不使用State Client的情况下运行 在推荐的机器人或外部网站内?
State Client不被弃用,它是Microsoft提供的初始实现(有时称为Bot State Service
)。
迁移机器人代码以使用自己的存储(请参阅here)后,例如Azure Table Storage或Cosmos DB,您应该使用IBotDataStore<BotData>
界面来操作数据。
还有关于如何清除对话/用户/私人的任何想法 给定所述方法的一个特定用户的会话数据
SetUserData()
和SetPrivateConversationData()
都已弃用?
您必须使用IBotDataStore<BotData>
接口方法:
public interface IBotDataStore<T>
{
/// <summary>
/// Return BotData with Data pointing to a JObject or an empty BotData() record with ETag:""
/// </summary>
/// <param name="key"> The key.</param>
/// <param name="botStoreType"> The bot store type.</param>
/// <param name="cancellationToken"> The cancellation token.</param>
/// <returns>Bot record that is stored for this key, or "empty" bot record ready to be stored</returns>
Task<T> LoadAsync(IAddress key, BotStoreType botStoreType, CancellationToken cancellationToken);
/// <summary>
/// Save a BotData using the ETag.
/// Etag consistency checks
/// If ETag is null or empty, this will set the value if nobody has set it yet
/// If ETag is "*" then this will unconditionally set the value
/// If ETag matches then this will update the value if it is unchanged.
/// If Data is null this removes record, otherwise it stores
/// </summary>
/// <param name="key"> The key.</param>
/// <param name="botStoreType">The bot store type.</param>
/// <param name="data"> The data that should be saved.</param>
/// <param name="cancellationToken"> The cancellation token.</param>
/// <returns>throw HttpException(HttpStatusCode.PreconditionFailed) if update fails</returns>
Task SaveAsync(IAddress key, BotStoreType botStoreType, T data, CancellationToken cancellationToken);
Task<bool> FlushAsync(IAddress key, CancellationToken cancellationToken);
}
这些方法对于user / privateConversation / conversation数据是通用的。