C# 使用触发字在Azure聊天机器人中永久存储会话数据

C# 使用触发字在Azure聊天机器人中永久存储会话数据,c#,azure,botframework,azure-storage,chatbot,C#,Azure,Botframework,Azure Storage,Chatbot,我正在开发azure聊天机器人,特别是C#中的QnA机器人,现在正在考虑将会话历史存储到表或数据库存储中 但与web上的大多数教程和文档不同的是,我不想从头到尾存储整个对话,我只想存储用户发送给机器人的第一条消息。我希望此消息暂时存储,直到用户键入“否”。当用户键入“否”时,我希望临时存储器中保存的内容永久存储 这在聊天机器人中可能吗 如果您有任何帮助或见解,我们将不胜感激 使用字典这样的临时存储,这将非常容易实现。要做到这一点,有很多方法。我要研究的一件事是捕捉“否”文本。在本例中,我没有使用

我正在开发azure聊天机器人,特别是C#中的QnA机器人,现在正在考虑将会话历史存储到表或数据库存储中

但与web上的大多数教程和文档不同的是,我不想从头到尾存储整个对话,我只想存储用户发送给机器人的第一条消息。我希望此消息暂时存储,直到用户键入“否”。当用户键入“否”时,我希望临时存储器中保存的内容永久存储

这在聊天机器人中可能吗


如果您有任何帮助或见解,我们将不胜感激

使用字典这样的临时存储,这将非常容易实现。要做到这一点,有很多方法。我要研究的一件事是捕捉“否”文本。在本例中,我没有使用scorables,但它提供了您正在寻找的基本功能。这样做的目的是,当收到消息时,检查是否已经保存了来自该用户ID的消息,如果没有保存,则进行保存。如果用户发送文本“否”,则将文本保存到永久存储器并从字典中删除条目。我只是在一个基本的RootDialog.cs中执行此操作:

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;

        var userId = activity.From.Id;
        var message = activity.Text;
        if (!Utils.FirstMessageDictionary.ContainsKey(userId))
        {

            Utils.FirstMessageDictionary.Add(userId, message);
            await context.PostAsync($"Message saved {userId} - {Utils.FirstMessageDictionary[userId]}");
        }

        if (message.ToLower() == "no")
        {

            //save to permanent storage here 

            Utils.FirstMessageDictionary.Remove(userId);
            await context.PostAsync($"Entry Removed for {userId}");

            try
            {
                await context.PostAsync($"{userId} - {Utils.FirstMessageDictionary[userId]}");
            }
            catch (Exception e)
            {
                await context.PostAsync($"No entry found for {userId}");
            }
        }
        context.Wait(MessageReceivedAsync);
    }
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var活动=等待作为活动的结果;
var userId=activity.From.Id;
var message=activity.Text;
if(!Utils.FirstMessageDictionary.ContainsKey(userId))
{
Utils.FirstMessageDictionary.Add(userId,message);
wait context.PostAsync($“消息保存{userId}-{Utils.FirstMessageDictionary[userId]}”);
}
if(message.ToLower()=“否”)
{
//保存到此处的永久存储
Utils.FirstMessageDictionary.Remove(userId);
wait context.PostAsync($“为{userId}删除的条目”);
尝试
{
wait context.PostAsync($“{userId}-{Utils.FirstMessageDictionary[userId]}”);
}
捕获(例外e)
{
wait context.PostAsync($“找不到{userId}的条目”);
}
}
Wait(MessageReceivedAsync);
}
我还为字典制作了一个简单的类:

public static class Utils
{
    public static Dictionary<string, string> FirstMessageDictionary = new Dictionary<string, string>();
}
公共静态类Utils
{
公共静态字典FirstMessageDictionary=新字典();
}

感谢您的回复!,关于QnA聊天机器人模板,该代码应放在何处?再次感谢!你能分享你正在使用的模板的链接吗?这是从Azure创建的,这是我创建帽子机器人的步骤,并收到了模板代码:它在messages controller的post方法中应该可以正常工作