public override Task OnReceiveActivity(IBotContext context) { if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Alarm.Title == null) { this.SetActiveTopic(TITLE_PROMPT) .OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Alarm.Time == null) { this.SetActiveTopic(TIME_PROMPT) .OnReceiveActivity(context); return(Task.CompletedTask); } this.OnSuccess(context, this.State.Alarm); return(Task.CompletedTask); }
public async override Task OnReceiveActivity(IBotContext context) { if (HasActiveTopic) { await ActiveTopic.OnReceiveActivity(context); //return Task.CompletedTask; } var options = new QnAMakerOptions() { KnowledgeBaseId = "", SubscriptionKey = "", ScoreThreshold = 0.7f }; qnAMaker = new QnAMaker(options); var results = await qnAMaker.GetAnswers(context.Request.Text); this.State.answer = results.First().Answer; //context.Set(ChitChatKey, results.First().Answer); await this.SetActiveTopic(ANSWER_PROMPT) .OnReceiveActivity(context); this.OnSuccess(context, this.State.answer); //return Task.CompletedTask; }
public override Task OnReceiveActivity(IBotContext context) { if ((context.Request.Type == ActivityTypes.Message) && (context.Request.AsMessageActivity().Text.Length > 0)) { var message = context.Request.AsMessageActivity(); // If the user wants to change the topic of conversation... if (message.Text.ToLowerInvariant() == "add alarm") { // Set the active topic and let the active topic handle this turn. this.SetActiveTopic(ADD_ALARM_TOPIC) .OnReceiveActivity(context); return(Task.CompletedTask); } if (message.Text.ToLowerInvariant() == "delete alarm") { this.SetActiveTopic(DELETE_ALARM_TOPIC) .OnReceiveActivity(context); return(Task.CompletedTask); } if (message.Text.ToLowerInvariant() == "show alarms") { this.ClearActiveTopic(); AlarmsView.ShowAlarms(context, context.State.UserProperties[USER_STATE_ALARMS]); return(Task.CompletedTask); } if (message.Text.ToLowerInvariant() == "help") { this.ClearActiveTopic(); this.ShowHelp(context); return(Task.CompletedTask); } // If there is an active topic, let it handle this turn until it completes. if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } ShowDefaultMessage(context); } return(Task.CompletedTask); }
public Task ok_OnReceiveActivity(IBotContext context) { if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } // next feed back prompt this.SetActiveTopic(FEEDBACK_PROMPT) .OnReceiveActivity(context); context.SendActivity($"{HasActiveTopic}"); return(Task.CompletedTask); }
public override Task OnReceiveActivity(IBotContext context) { if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } // If there are no alarms to delete... if (this.State.Alarms.Count == 0) { context.SendActivity("There are no alarms to delete."); return(Task.CompletedTask); } if (this.State.AlarmIndex == null) { // If there is only one alarm to delete, use that index. No need to prompt. if (this.State.Alarms.Count == 1) { AlarmsView.ShowAlarms(context, this.State.Alarms); this.State.AlarmIndex = 0; } else { this.SetActiveTopic(WHICH_ALARM_PROMPT) .OnReceiveActivity(context); return(Task.CompletedTask); } } this.State.Alarm.Title = this.State.Alarms[(int)this.State.AlarmIndex].Title; if (this.State.DeleteConfirmed == null) { this.SetActiveTopic(CONFIRM_DELETE_PROMPT) .OnReceiveActivity(context); return(Task.CompletedTask); } this.OnSuccess(context, new DeleteAlarmTopicValue { Alarm = this.State.Alarm, AlarmIndex = (int)this.State.AlarmIndex, DeleteConfirmed = (bool)this.State.DeleteConfirmed }); return(Task.CompletedTask); }
public async override Task OnReceiveActivity(IBotContext context) { // IMAGE var image = context.Get <ImageRecognizeResult>(ImageMiddleware.ImageRecognizerResultKey); if (image != null) { await context.SendActivity("Thaks for sending me a photo!\nLet's see..."); var keyword = image.PrimaryKeyword(); var finder = new Finder(); var result = await finder.SearchWithKeywordAsync(keyword); if (result != null) { SearcherFeedbackState = true; var activity = createReply(context, result); await context.SendActivity(activity); await context.SendActivity("Did you find what you ware looking for?"); return; } } if ((context.Request.Type == ActivityTypes.Message) && (context.Request.AsMessageActivity().Text.Length > 0)) { var message = context.Request.AsMessageActivity(); var qnamaker = new QnaMaker(); // If there is an active topic, let it handle this turn until it completes. if (HasActiveTopic) { await ActiveTopic.OnReceiveActivity(context); return; } if (!SearcherFeedbackState) { await context.SendActivity("Got it!"); } // CHIT var chitchater = new ChitChater(); var answer = await chitchater.SearchChitChat(message.Text); if (answer != null) { await context.SendActivity(answer); return; } // Feedback if (SearcherFeedbackState) { SearcherFeedbackState = false; var feedbacker = new Feedbacker(); var feedback = await feedbacker.SearchAsync(message.Text); if (feedback == Feedbacker.INTENT.FEEDBACK_NEGATIVE) { await context.SendActivity("Sorry, but could you try agein using another term?"); return; } else if (feedback == Feedbacker.INTENT.FEEDBACK_POSITIVE) { await context.SendActivity("No problem!"); return; } // Not reterun and continue next line when you get NOEN intent. } // SelectQuestion if (SelectQuestionState) { if (int.TryParse(message.Text, out i) && (i < 4)) { var selectquestion = questionlist[i]; var selectanswer = await qnamaker.SearchQnaMaker(selectquestion); await context.SendActivity(selectanswer.First().Answer); SelectQuestionState = false; SearcherFeedbackState = true; return; } else if (turn < maxturn) { await context.SendActivity("Sorry,but please input number(1 - 4)"); turn += 1; return; } else { SelectQuestionState = false; await context.SendActivity("too many attempts"); await context.SendActivity("OK! You may change your mind."); return; } } // QnA qnamaker = new QnaMaker(); var queryresults = await qnamaker.SearchQnaMaker(message.Text); if (queryresults != null) { if (queryresults.First().Questions.Count() == 1) { SearcherFeedbackState = true; await context.SendActivity(queryresults.First().Answer); return; } else { SelectQuestionState = true; SearcherFeedbackState = true; var messages = "Did you mean? Please input number(1 - 4)"; foreach (var q in queryresults.First().Questions.Select((value, index) => new { value, index })) { if (q.index > 2) { messages += "\n\n" + "\n\n" + (q.index + 1) + ".None of adove"; questionlist.Add(queryresults.First().Questions[q.index]); break; } messages += "\n\n" + "\n\n" + (q.index + 1) + "." + queryresults.First().Questions[q.index].ToString(); questionlist.Add(queryresults.First().Questions[q.index]); } await context.SendActivity(messages); return; } } // Search var finder = new Finder(); var result = await finder.SearchAsync(message.Text); if (result != null) { SearcherFeedbackState = true; var activity = createReply(context, result); await context.SendActivity(activity); await context.SendActivity("Did you find what you ware looking for?"); return; } await context.SendActivity("Sorry, but I didn't understand that. Could you try saying that another way?"); } }
public override Task OnReceiveActivity(IBotContext context) { if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (context.TopIntent != null) { foreach (LuisEntity item in context.TopIntent.Entities) { // CUSTOMER if (item.Type == "entity.customer") { this.State.Workitem.Customer = item.Value; } //DATE if (item.Type == "builtin.datetimeV2.date") { FlexObject resolution = item.Resolution; var instance = JsonConvert.SerializeObject(resolution["values"][0]); TimeEx time = JsonConvert.DeserializeObject <TimeEx>(instance); this.State.Workitem.Date = DateTime.Parse(time.value); } } } if (this.State.Workitem.Object == null) { this.SetActiveTopic(Constants.OBJECT_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Workitem.Customer == null) { this.SetActiveTopic(Constants.CUSTOMER_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Workitem.Date == null) { this.SetActiveTopic(Constants.DATE_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Workitem.Hours == null) { this.SetActiveTopic(Constants.HOURS_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Workitem.Description == null) { this.SetActiveTopic(Constants.DESCRIPTION_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } if (this.State.Workitem.Attachment == null) { this.SetActiveTopic(Constants.ATTACHMENT_PROMPT); this.ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } this.OnSuccess(context, this.State.Workitem); return(Task.CompletedTask); }
public override Task OnReceiveActivity(IBotContext context) { if ((context.Request.Type == ActivityTypes.Message) && (!string.IsNullOrEmpty(context.Request.AsMessageActivity().Text) || context.Request.AsMessageActivity().Attachments != null)) { var message = context.Request.AsMessageActivity(); // If the user wants to change the topic of conversation... if (context.TopIntent != null && context.TopIntent.Score > 0.7) { if (context.TopIntent.Name == "intent.image") { context.Reply(((LuisEntity)context.TopIntent.Entities[0]).Value); } if (context.TopIntent.Name == "intent.currentuser") { if (context.State.UserProperties["owner"] != null) { context.Reply($"Current user: {context.State.UserProperties["owner"]}"); } else { context.Reply($"I've not recognized yet. What's your name?"); } return(Task.CompletedTask); } if (context.TopIntent.Name == "intent.workitem.add") { // Set the active topic and let the active topic handle this turn. this.SetActiveTopic(Constants.ADD_WORKITEM_TOPIC) .OnReceiveActivity(context); return(Task.CompletedTask); } if (context.TopIntent.Name == "intent.workitem.list") { this.ClearActiveTopic(); SqlUtils sql = new SqlUtils(Startup.ConnectionString); var owner = context.State.UserProperties["owner"]; //WorkItemsView.ShowWorkItems(context, context.State.UserProperties[Constants.USER_STATE_WORKITEMS], Accessor); WorkItemsView.ShowWorkItems(context, sql.GetWorkItems(owner), Accessor); return(Task.CompletedTask); } if (context.TopIntent.Name == "intent.help") { this.ClearActiveTopic(); this.ShowHelp(context); return(Task.CompletedTask); } if (context.TopIntent.Name == "intent.restart") { this.ClearActiveTopic(); context.State.ConversationProperties.Clear(); context.State.UserProperties.Clear(); //return Task.CompletedTask; } } // If there is an active topic, let it handle this turn until it completes. if (HasActiveTopic) { ActiveTopic.OnReceiveActivity(context); return(Task.CompletedTask); } ShowDefaultMessage(context); } return(Task.CompletedTask); }
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); }