Azure聊天机器人4-实现luis dialog

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
        }
    }
    

猜你喜欢

转载自blog.csdn.net/csharp25/article/details/84679554