private async Task <DialogTurnResult> FirstStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
 {
     dustDetail = (DustDetails)stepContext.Options;
     if (dustDetail.Dosistationname == null)
     {
         return(await stepContext.PromptAsync(nameof(ChoicePrompt),
                                              new PromptOptions
         {
             RetryPrompt = MessageFactory.Text("아래 항목 중에서 고르세요"),
             Choices = ChoiceFactory.ToChoices(new List <string> {
                 "강동구", "강북구", "강서구", "관악구", "광진구",
                 "구로구", "금천구", "노원구", "도봉구", "동대문구", "동작구", "마포구", "서대문구", "서초구",
                 "성동구", "성북구", "송파구", "양천구", "영등포구", "용산구", "은평구", "종로구", "중구", "중랑구"
             })
         }, cancellationToken));
     }
     else
     {
         return(await stepContext.NextAsync(dustDetail.Dosistationname, cancellationToken));
     }
 }
Пример #2
0
        /*   private async Task<DialogTurnResult> areaStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
         * {
         *     var dustDetails = (DustDetails)stepContext.Options;
         *
         *     if (dustDetails.Area == null)
         *     {
         *         return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("어떤 지역을 찾으시나요?") }, cancellationToken);
         *     }
         *     else
         *     {
         *         return await stepContext.NextAsync(dustDetails.Area, cancellationToken);
         *     }
         * }*/

        private async Task <DialogTurnResult> serviceStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            dustDetail = (DustDetails)stepContext.Options;

            if (dustDetail.Dustservice == null)
            {
                return(await stepContext.PromptAsync(nameof(ChoicePrompt),
                                                     new PromptOptions
                {
                    Prompt = MessageFactory.Text("지역 첫 자음을 선택해 주세요"),
                    RetryPrompt = MessageFactory.Text("지역 첫 자음을 아래에서 선택해 주세요"),
                    Choices = ChoiceFactory.ToChoices(new List <string> {
                        "ㄱ~ㄴ", "ㄷ~ㅅ", "ㅇ~ㅈ", "ㅊ~ㅂ", "대기환경 정보"
                    })
                }, cancellationToken));
            }
            else
            {
                return(await stepContext.NextAsync(dustDetail.Dustservice, cancellationToken));
            }
        }
Пример #3
0
        public async Task <MainDetail> ExecuteLuisQuery(ILogger logger, ITurnContext turnContext, CancellationToken cancellationToken)
        {
            MainDetail detail = new MainDetail();

            try {
                LuisRecognizer luisRecognizer = new LuisRecognizer(luisApplication);
                recognizerResult = await luisRecognizer.RecognizeAsync(turnContext, cancellationToken);

                //높은 점수의 의도 저장
                var(intent, score) = recognizerResult.GetTopScoringIntent();
                //대화의도에 따른 엔티티 저장

                switch (intent)
                {
                case "버스":
                    BusDetails busDetails = new BusDetails();
                    busDetails.intent = intent;
                    busDetails        = getLuisEntites(busDetails);
                    detail            = busDetails;
                    break;

                case "미세먼지":
                    DustDetails dustDetails = new DustDetails();
                    dustDetails.intent = intent;
                    dustDetails        = getDustLuisEntites(dustDetails);
                    detail             = dustDetails;
                    break;

                case "장학제도":
                    detail.intent = intent;
                    break;

                case "전화번호":
                    PhoneDetails phoneDetails = new PhoneDetails();
                    phoneDetails.intent = intent;
                    phoneDetails        = getPhoneEntites(phoneDetails);
                    detail = phoneDetails;
                    break;

                case "교수님":
                    ProfessorsDetail pfDetail = new ProfessorsDetail();
                    pfDetail.intent = intent;
                    pfDetail        = getProfessorEntites(pfDetail);
                    detail          = pfDetail;
                    break;

                case "트랙정보":
                    TrackInfoCardDetail trackInfoCardDetail = new TrackInfoCardDetail();
                    trackInfoCardDetail.intent = intent;
                    detail = trackInfoCardDetail;
                    break;

                case "공지사항":
                    NoticeDetail noticeDetail = new NoticeDetail();
                    noticeDetail.intent = intent;
                    detail = noticeDetail;
                    break;

                case "맛집":
                    MatjeepchoochunDetail matjeepchoochunDetail = new MatjeepchoochunDetail();
                    matjeepchoochunDetail.intent = intent;
                    matjeepchoochunDetail        = getMatjeepchoochunEntites(matjeepchoochunDetail);
                    detail = matjeepchoochunDetail;
                    break;

                case "학식메뉴":
                    detail.intent = intent;
                    break;

                case "로그인":
                    MainDetail loginDetail = new MainDetail();
                    loginDetail.intent = intent;
                    detail             = loginDetail;
                    break;

                case "시간표":
                    MainDetail timeDetail = new MainDetail();
                    timeDetail.intent = intent;
                    detail            = timeDetail;
                    break;

                case "열람실":
                    MainDetail seatDetail = new MainDetail();
                    seatDetail.intent = intent;
                    detail            = seatDetail;
                    break;
                }
            }
            catch (Exception e)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text("예기치 못한 오류가 발생하였습니다. 다시 시도해주십시오\n" + e.Message), cancellationToken);
            }

            return(detail);
        }
Пример #4
0
 private DustDetails getDustLuisEntites(DustDetails dustDetails)
 {
     dustDetails.Dosistationname = recognizerResult.Entities["구"]?.FirstOrDefault()?.FirstOrDefault()?.ToString().Replace(" ", "");
     return(dustDetails);
 }