我试图将用户响应存储在表存储中。我只想存储他们输入的用户数据,对机器人的响应不感兴趣。这是如何可能的,另外,这在触发词上也是可能的,例如,当用户说“不行”时,它首先会在那里记录与机器人的交互,例如"Hello“。
我已经对这个主题做了很多研究,但是只存储用户输入的文档似乎较少。
任何帮助,这将是非常感谢!
发布于 2018-08-01 09:47:41
我试图将用户响应存储在表存储中。我只想存储他们输入的用户数据,对机器人的响应不感兴趣。这是如何可能的,另外,这在触发词上也是可能的,例如,当用户说“不行”时,它首先会在那里记录与机器人的交互,例如"Hello“。
您似乎只想在表存储中存储用户输入,而不是存储bot响应的数据。要达到这一要求,您可以拦截用户在MessagesController (或对话框MessageReceivedAsync方法)中发送的消息,然后从activity中提取您想要的属性值,并将值存储在表存储中。
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之间交换的所有消息,您可以参考下面的代码片段来实现相同的要求。
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
}
}
}https://stackoverflow.com/questions/51628606
复制相似问题