首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Azure聊天机器人时仅存储用户响应

如何在使用Azure聊天机器人时仅存储用户响应
EN

Stack Overflow用户
提问于 2018-08-01 08:24:48
回答 1查看 192关注 0票数 0

我试图将用户响应存储在表存储中。我只想存储他们输入的用户数据,对机器人的响应不感兴趣。这是如何可能的,另外,这在触发词上也是可能的,例如,当用户说“不行”时,它首先会在那里记录与机器人的交互,例如"Hello“。

我已经对这个主题做了很多研究,但是只存储用户输入的文档似乎较少。

任何帮助,这将是非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 09:47:41

我试图将用户响应存储在表存储中。我只想存储他们输入的用户数据,对机器人的响应不感兴趣。这是如何可能的,另外,这在触发词上也是可能的,例如,当用户说“不行”时,它首先会在那里记录与机器人的交互,例如"Hello“。

您似乎只想在表存储中存储用户输入,而不是存储bot响应的数据。要达到这一要求,您可以拦截用户在MessagesController (或对话框MessageReceivedAsync方法)中发送的消息,然后从activity中提取您想要的属性值,并将值存储在表存储中。

代码语言:javascript
复制
public static string firstmessage = null;

/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        if (firstmessage == null)
        {
            firstmessage = activity.Text?.ToString();
        }

        storeuserinput(activity);

        await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());

    }
    else
    {
        HandleSystemMessage(activity);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

private void storeuserinput(Activity activity)
{
    var uid = activity.From.Id;
    var uname = activity.From.Name;

    if (activity.Text?.ToLower().ToString() == "no")
    {
        var userinput = firstmessage;
    }

    //extract other data from "activity" object

    //your code logic here
    //store data in your table storage

    //Note: specifcial scenario of user send attachment
}

如果要将数据存储到Azure表存储中,可以使用WindowsAzure.Storage客户端库将实体存储/添加到表中。

此外,Builder中的中间件功能允许我们拦截用户和bot之间交换的所有消息,您可以参考下面的代码片段来实现相同的要求。

代码语言:javascript
复制
public class MyActivityLogger : IActivityLogger
{
    public async Task LogAsync(IActivity activity)
    {
        if (activity.From.Name!= "{your_botid_here}")
        {
            var uid = activity.From.Id;
            var uname = activity.From.Name;

            var userinput = (activity as IMessageActivity).Text?.ToString();

            //extract other data from "activity" properties

            //your code logic here
            //store data in your table storage

            //Note: specifcial scenario of user send attachment

        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51628606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档