我想知道如何將用戶的消息重定向到某個人,而不是讓該機器人處理該消息。假設客戶正在使用屬於公司的機器人進行交談的情況下,我希望如何讓所有內容都能正常工作:是否有可能允許兩個人通過使用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
?
無論如何,有關如何做到這一點的任何想法?