版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csharp25/article/details/84679554
在rootDialog消息转发到LuisDialog
[Serializable]
public class RootDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
await context.Forward(new LanguageParseDialog(), ResumeAftelLuisDialog, activity, CancellationToken.None);
}
private async Task ResumeAftelLuisDialog(IDialogContext context, IAwaitable<object> result)
{
context.Wait(MessageReceivedAsync);
}
}
LuisDialog:
[Serializable]
[LuisModel(Constant.LuisModelId, Constant.LuisSubscribeKey, domain: "southeastasia.api.cognitive.microsoft.com")]
public class LanguageParseDialog : LuisDialog<object>
{
public LanguageParseDialog()
{
}
public LanguageParseDialog(ILuisService service)
: base(service)
{
}
[LuisIntent("")]
[LuisIntent("None")]
public async Task None(IDialogContext context, LuisResult result)
{
var errorResult = "Try something else, please.";
await context.PostAsync(errorResult);
context.Wait(this.MessageReceived);
}
[LuisIntent("MovieTickets.book")]
public async Task BookMovieTicket(IDialogContext context, LuisResult luisResult)
{
string response = string.Empty;
response = "Do you want to book movie ticket ?";
await context.PostAsync(response);
context.Wait(this.MessageReceived);
}
[LuisIntent("Music.PlayMusic")]
public async Task PlayMusic(IDialogContext context, LuisResult luisResult)
{
string response = string.Empty;
response = "Do you want to play music?";
await context.PostAsync(response);
context.Wait(this.MessageReceived);
}
[LuisIntent("Weather.GetForecast")]
public async Task Weather(IDialogContext context, LuisResult luisResult)
{
string response = string.Empty;
//TODO link to weather
response = "You want to know the weather?";
await context.PostAsync(response);
context.Wait(this.MessageReceived);
}
}
Controller实现:
[BotAuthentication]
public class MessagesController : ApiController
{
/// <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.GetActivityType() == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
private Activity HandleSystemMessage(Activity message)
{
string messageType = message.GetActivityType();
if (messageType == ActivityTypes.DeleteUserData)
{
// Implement user deletion here
// If we handle user deletion, return a real message
}
else if (messageType == ActivityTypes.ConversationUpdate)
{
// Handle conversation state changes, like members being added and removed
// Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
// Not available in all channels
}
else if (messageType == ActivityTypes.ContactRelationUpdate)
{
// Handle add/remove from contact lists
// Activity.From + Activity.Action represent what happened
}
else if (messageType == ActivityTypes.Typing)
{
// Handle knowing that the user is typing
}
else if (messageType == ActivityTypes.Ping)
{
}
return null;
}
}