2017-02-16 35 views
0

我想知道如何将用户的消息重定向到某个人,而不是让该机器人处理该消息。假设客户正在使用属于公司的机器人进行交谈的情况下,我希望如何让所有内容都能正常工作:是否有可能允许两个人通过使用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

无论如何,有关如何做到这一点的任何想法?

回答

0

是的,BotFramework可以。

基本上,你必须有两个频道或聊天来测试它。一个是代表注册他作为它的角色,并保持开放等待某人聊天。在另一个渠道中,您的客户会尝试使用机器人,直到机器人达到其可用性限制或客户要求与人交谈。在这最后一刻,你连接两个人和机器人。客户发送消息,机器人收到并发送给代表。该代表发送回应,并将机器人发送给客户。这没有什么大不了的。

您可以根据代表性状态(免费聊天或在对话中)发展这个想法。

技术这个关键点是存储代表和客户数据(通道数据,用户数据,会话数据)能够发送响应。

相关问题