我想知道如何将用户的消息重定向到某个人,而不是让该机器人处理该消息。假设客户正在使用属于公司的机器人进行交谈的情况下,我希望如何让所有内容都能正常工作:是否有可能允许两个人通过使用Microsoft Bot Framework的chatbot进行对话?
用户开始与机器人进行对话。
机器人使用户可以选择与代表交谈。
从现在起,来自用户的消息被重定向到 代表(在另一个软件后面)。
代表响应消息,它们被强制给用户。
我已经对如何能够实现这一目标给予了一些思考,到目前为止我还没有取得很大进展。将用户消息重定向到另一个地方的部分看起来相当容易,因为在用户说他想与某人交谈之后,我会在其上放置一个标志UserData,用于将消息重定向到其他地方。
例子:
对话框里面,这里的LUIS意图时,我真想上的UserData国旗:
[LuisIntent("SpeakWithEmployee")]
public async Task IntentSpeakWithEployee(IDialogContext context, LuisResult result)
{
await context.PostAsync("This conversation will be redirected to a employee.");
context.UserData.SetValue<bool>("RedirectToEmployee", true);
}
现在在MessagesController这里就是我正在做重定向用户的留言:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
StateClient state = activity.GetStateClient();
BotData botData = state.BotState.GetUserData(activity.ChannelId, activity.From.Id);
bool redirectToEmployee = botData.GetProperty<bool>("RedirectToEmployee");
if (redirectToEmployee)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
Activity reply = activity.CreateReply();
reply.Text = $"Echoe: {activity.Text}";
await connector.Conversations.ReplyToActivityAsync(reply);
}
else
{
await Conversation.SendAsync(activity,() => new RootDialog());
}
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
这看起来很容易。我的问题是找出员工回复用户的部分。我不知道如何实施下一部分。
我将需要使用DirectLine API以允许员工回复用户,对吗?在该软件上,该员工正在运行,我想我必须发送POST消息给机器人的端点,是吗?
我还需要存储用户标识,活动标识和类似信息,以便允许员工的消息转到正确的用户。但是,当员工使用的软件向机器人端点发送POST时,POST将不得不包含activity
?
无论如何,有关如何做到这一点的任何想法?