コード例 #1
0
        protected ToDoLuis GetToDoIntent(
            string userInput            = null,
            ToDoLuis.Intent intents     = ToDoLuis.Intent.None,
            double[] ordinal            = null,
            double[] number             = null,
            string[] containsAll        = null,
            string[] listType           = null,
            string[] taskContentML      = null,
            string[] shopContent        = null,
            string[] taskContentPattern = null,
            string[][] foodOfGrocery    = null,
            string[][] shopVerb         = null)
        {
            var intent = new ToDoLuis();

            intent.Text    = userInput;
            intent.Intents = new Dictionary <ToDoLuis.Intent, IntentScore>();
            intent.Intents.Add(intents, new IntentScore()
            {
                Score = TopIntentScore
            });
            intent.Entities               = new ToDoLuis._Entities();
            intent.Entities._instance     = new ToDoLuis._Entities._Instance();
            intent.Entities.ordinal       = ordinal;
            intent.Entities.ContainsAll   = containsAll;
            intent.Entities.ListType      = listType;
            intent.Entities.TaskContent   = taskContentML;
            intent.Entities.FoodOfGrocery = foodOfGrocery;
            intent.Entities.ShopVerb      = shopVerb;

            return(intent);
        }
コード例 #2
0
 private ToDoLuis GetBaseShowTasksIntent(
     string userInput,
     ToDoLuis.Intent intents = ToDoLuis.Intent.ShowToDo,
     string[] listType       = null)
 {
     return(GetToDoIntent(
                userInput,
                intents,
                listType: listType));
 }
コード例 #3
0
 private ToDoLuis GetBaseMarkToDoIntent(
     string userInput,
     ToDoLuis.Intent intents     = ToDoLuis.Intent.MarkToDo,
     double[] ordinal            = null,
     double[] number             = null,
     string[] listType           = null,
     string[] containsAll        = null,
     string[] taskContentPattern = null,
     string[] taskContentML      = null)
 {
     return(GetToDoIntent(
                userInput,
                intents,
                ordinal: ordinal,
                number: number,
                listType: listType,
                containsAll: containsAll,
                taskContentPattern: taskContentPattern,
                taskContentML: taskContentML));
 }
コード例 #4
0
 private ToDoLuis GetBaseAddTaskIntent(
     string userInput,
     ToDoLuis.Intent intents     = ToDoLuis.Intent.AddToDo,
     string[] listType           = null,
     string[] taskContentML      = null,
     string[] shopContent        = null,
     string[] taskContentPattern = null,
     string[][] foodOfGrocery    = null,
     string[][] shopVerb         = null)
 {
     return(GetToDoIntent(
                userInput,
                intents,
                listType: listType,
                taskContentML: taskContentML,
                shopContent: shopContent,
                taskContentPattern: taskContentPattern,
                foodOfGrocery: foodOfGrocery,
                shopVerb: shopVerb));
 }
コード例 #5
0
        public async Task <DialogTurnResult> ShowTasksAsync(WaterfallStepContext sc, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                var state = await ToDoStateAccessor.GetAsync(sc.Context, cancellationToken : cancellationToken);

                state.ListType = state.ListType ?? ToDoStrings.ToDo;
                var service = await InitListTypeIdsAsync(sc, cancellationToken);

                if (state.IsAction)
                {
                    state.AllTasks = await service.GetTasksAsync(state.ListType);

                    var todoList = new List <string>();
                    if (state.AllTasks != null && state.AllTasks.Any())
                    {
                        state.AllTasks.ForEach(x => todoList.Add(x.Topic));
                    }

                    return(await sc.EndDialogAsync(new TodoListInfo { ActionSuccess = true, ToDoList = todoList }, cancellationToken));
                }

                state.LastListType = state.ListType;

                ToDoLuis.Intent topIntent  = ToDoLuis.Intent.ShowToDo;
                var             luisResult = sc.Context.TurnState.Get <ToDoLuis>(StateProperties.ToDoLuisResultKey);
                if (luisResult != null && luisResult.TopIntent().intent != ToDoLuis.Intent.None)
                {
                    topIntent = luisResult.TopIntent().intent;
                }

                General.Intent generalTopIntent  = General.Intent.None;
                var            generalLuisResult = sc.Context.TurnState.Get <General>(StateProperties.GeneralLuisResultKey);
                if (generalLuisResult != null)
                {
                    generalTopIntent = generalLuisResult.TopIntent().intent;
                }

                if (topIntent == ToDoLuis.Intent.ShowToDo || state.GoBackToStart)
                {
                    state.AllTasks = await service.GetTasksAsync(state.ListType);
                }

                var allTasksCount    = state.AllTasks.Count;
                var currentTaskIndex = state.ShowTaskPageIndex * state.PageSize;
                state.Tasks = state.AllTasks.GetRange(currentTaskIndex, Math.Min(state.PageSize, allTasksCount - currentTaskIndex));
                if (state.Tasks.Count <= 0)
                {
                    var activity = TemplateManager.GenerateActivityForLocale(ShowToDoResponses.NoTasksMessage, new
                    {
                        ListType = state.ListType
                    });
                    await sc.Context.SendActivityAsync(activity, cancellationToken);

                    return(await sc.EndDialogAsync(true, cancellationToken));
                }
                else
                {
                    var cardReply = sc.Context.Activity.CreateReply();

                    if (topIntent == ToDoLuis.Intent.ShowToDo || state.GoBackToStart)
                    {
                        var toDoListCard = ToAdaptiveCardForShowToDosByLG(
                            sc.Context,
                            state.Tasks,
                            state.AllTasks.Count,
                            state.ListType);

                        await sc.Context.SendActivityAsync(toDoListCard, cancellationToken);

                        if (allTasksCount <= state.Tasks.Count)
                        {
                            var activity = TemplateManager.GenerateActivityForLocale(ShowToDoResponses.AskAddOrCompleteTaskMessage);
                            await sc.Context.SendActivityAsync(activity, cancellationToken);
                        }
                    }
                    else if (topIntent == ToDoLuis.Intent.ShowNextPage || generalTopIntent == General.Intent.ShowNext)
                    {
                        if (state.IsLastPage)
                        {
                            state.IsLastPage = false;
                            return(await sc.ReplaceDialogAsync(Actions.CollectGoBackToStartConfirmation, cancellationToken : cancellationToken));
                        }
                        else
                        {
                            var toDoListCard = ToAdaptiveCardForReadMoreByLG(
                                sc.Context,
                                state.Tasks,
                                state.AllTasks.Count,
                                state.ListType);

                            await sc.Context.SendActivityAsync(toDoListCard, cancellationToken);

                            if ((state.ShowTaskPageIndex + 1) * state.PageSize >= state.AllTasks.Count)
                            {
                                return(await sc.ReplaceDialogAsync(Actions.CollectGoBackToStartConfirmation, cancellationToken : cancellationToken));
                            }
                        }
                    }
                    else if (topIntent == ToDoLuis.Intent.ShowPreviousPage || generalTopIntent == General.Intent.ShowPrevious)
                    {
                        if (state.IsFirstPage)
                        {
                            state.IsFirstPage = false;
                            return(await sc.ReplaceDialogAsync(Actions.CollectRepeatFirstPageConfirmation, cancellationToken : cancellationToken));
                        }
                        else
                        {
                            var toDoListCard = ToAdaptiveCardForPreviousPageByLG(
                                sc.Context,
                                state.Tasks,
                                state.AllTasks.Count,
                                state.ShowTaskPageIndex == 0,
                                state.ListType);

                            await sc.Context.SendActivityAsync(toDoListCard, cancellationToken);
                        }
                    }

                    if ((topIntent == ToDoLuis.Intent.ShowToDo || state.GoBackToStart) && allTasksCount > state.Tasks.Count)
                    {
                        state.GoBackToStart = false;
                        return(await sc.NextAsync(cancellationToken : cancellationToken));
                    }
                    else
                    {
                        state.GoBackToStart = false;
                        return(await sc.EndDialogAsync(true, cancellationToken));
                    }
                }
            }
            catch (SkillException ex)
            {
                await HandleDialogExceptionsAsync(sc, ex, cancellationToken);

                return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs));
            }
            catch (Exception ex)
            {
                await HandleDialogExceptionsAsync(sc, ex, cancellationToken);

                return(new DialogTurnResult(DialogTurnStatus.Cancelled, CommonUtil.DialogTurnResultCancelAllDialogs));
            }
        }