Beispiel #1
0
        private SpotsRequest createSpotRequest(string entity)
        {
            var request = new SpotsRequest();

            request.keyword = entity;
            return(request);
        }
Beispiel #2
0
        public async Task <BaseSearchResult> Search(string utterance)
        {
            try
            {
                var luisResult = await find(utterance);

                var intent = primaryIntent(luisResult);
                var entity = primaryEntity(luisResult);

                SpotsResult result = null;
                switch (intent)
                {
                case INTENT.PLACES__FIND_PLACE:
                    var request = createSpotRequest(entity);
                    previous_request = request;
                    result           = await searchSpotAsync(request);

                    break;

                case INTENT.UTILITIES__SHOW_PREVIOUS:
                    if (previous_request == null)
                    {
                        var new_request = createSpotRequest(entity);
                        previous_request = new_request;
                        result           = await searchSpotAsync(new_request);
                    }
                    else
                    {
                        previous_request.ModifyForPrev();
                        result = await searchSpotAsync(previous_request);
                    }
                    break;

                case INTENT.UTILITIES__SHOW_NEXT:
                    if (previous_request == null)
                    {
                        var new_request = createSpotRequest(entity);
                        previous_request = new_request;
                        result           = await searchSpotAsync(new_request);
                    }
                    else
                    {
                        previous_request.ModifyForNext();
                        result = await searchSpotAsync(previous_request);
                    }
                    break;

                default:
                    // nothing
                    break;
                }

                return(result);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Beispiel #3
0
        private SpotsRequest createSpotNameFieldRequest(string keyword)
        {
            var request = new SpotsRequest();

            request.keyword       = keyword;
            request.search_fields = "name";
            return(request);
        }
Beispiel #4
0
 public async Task <BaseSearchResult> SearchWithKeyword(string keyword)
 {
     try
     {
         var request = createSpotNameFieldRequest(keyword);
         previous_request = request;
         return(await searchSpotAsync(request));;
     }
     catch (Exception)
     {
         return(null);
     }
 }
Beispiel #5
0
        public override async Task OnReceiveActivity(IBotContext context)
        {
            if (HasActiveTopic)
            {
                await ActiveTopic.OnReceiveActivity(context);

                return;
            }

            var utterance = context.Request.AsMessageActivity().Text;


            if (this.State.Alarm.Title == null)
            {
                // LUIS実行
                await context.SendActivity("got it!");

                var luisResult = await playLuis(context, utterance);


                // TODO: LUISの戻り値に応じて呼び出すAPIを変更する
                var intent         = luisResult.Intents.GetValue("Places.FindPlace");
                var entity         = luisResult.Entities.GetValue("Places_AbsoluteLocation");
                var entity_keyword = entity.First().ToString();
                await context.SendActivity(entity_keyword.ToString());

                /*
                 * if (this.State.Alarm.Title == "Searched") {
                 *  this.SetActiveTopic(SEARCH_PROMPT)
                 *      .OnReceiveActivity(context);
                 *  return Task.CompletedTask;
                 *
                 * }
                 *
                 */
                // LUISの結果でスポット検索
                var service = new Services.SpotSearchService();
                var req     = new SpotsRequest();
                req.keyword = entity_keyword;
                var result = await service.Search(req) as SpotsResult;

                await context.SendActivity(result.spots.First().name);

                // Replyを作成し表示
                var reply = context.Request.CreateReply();
                reply.Attachments = result.Attachments;
                await context.SendActivity(reply);

                // next feed back prompt
                await this.SetActiveTopic(FEEDBACK_PROMPT)
                .OnReceiveActivity(context);

                await context.SendActivity($"{HasActiveTopic}");


                return;
            }

            /*
             * if (this.State.Alarm.Title == null) {// spotの場合
             *  await context.SendActivity("スポット表示");
             *  this.State.Alarm.Title = "Searched";
             *
             *  // APIの戻り値表示
             *
             *  // next feed back prompt
             *  await this.SetActiveTopic(FEEDBACK_PROMPT)
             *      .OnReceiveActivity(context);
             * }
             * else {
             *  await context.SendActivity("スポット表示失敗");
             * }
             * await context.SendActivity("すみません、お役に立てなくて");
             * this.OnSuccess(context, null);
             *
             */
            await context.SendActivity("ここまでくれば終了で抜けます");

            //this.OnSuccess(context, this.State.Alarm);
        }
Beispiel #6
0
        private async Task <SpotsResult> searchSpotAsync(SpotsRequest request)
        {
            var service = new Services.SpotSearchService();

            return(await service.Search(request) as SpotsResult);
        }