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); }
private async Task <SpotsResult> searchSpotAsync(SpotsRequest request) { var service = new Services.SpotSearchService(); return(await service.Search(request) as SpotsResult); }