/// <summary> /// 未匹配到解决方案则可以发起请求 /// </summary> /// <param name="stepContext"></param> /// <param name="cancellationToken"></param> /// <returns></returns> private async Task <DialogTurnResult> NoAnswerAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var subject = stepContext.Result as string; var activity = stepContext.Context.Activity.CreateReply("没有找到匹配的答案。"); var card = new ThumbnailCard(); // 选择发起工单 var data = new TaskFetchValueModel { Type = TaskFetchTypes.AddRequest, Data = JsonConvert.SerializeObject(new InputWorkOrderModel { Id = Guid.NewGuid().ToString("N"), Subject = subject }) }; card.Text = "您可以选择发起请求,获得更多帮助:"; card.Buttons = new List <CardAction>(); card.Buttons.Add(new CardAction("invoke", "发起请求", value: new { type = "task/fetch", data })); activity.Attachments = new List <Attachment> { card.ToAttachment() }; await stepContext.Context.SendActivityAsync(activity, cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken).ConfigureAwait(false)); }
/// <summary> /// 查找解决方案 /// </summary> /// <param name="stepContext"></param> /// <param name="cancellationToken"></param> /// <returns></returns> private async Task <DialogTurnResult> FindSolutionAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { // 创建请求时的标题 var subject = $"From Aden Test Bot:{stepContext.Context.Activity.RemoveRecipientMention().Replace("\r", "").Replace("\n", "")}"; // 获取答案 var results = await _qna.GetAnswersAsync(stepContext.Context); // 匹配到解决方案 if (results.Any()) { // QnA Maker 答案中存放的是解决方案 ID var answer = results.FirstOrDefault(); var data = new TaskFetchValueModel { Data = answer.Answer, Type = TaskFetchTypes.Solution }; var card = new ThumbnailCard { Buttons = new List <CardAction> { new CardAction("invoke", "查看解决方案", value: new { type = "task/fetch", data }) } }; var activity = stepContext.Context.Activity.CreateReply("为您找到以下解决方案:"); activity.Attachments.Add(card.ToAttachment()); // 发送找到解决方案的消息,包含“查看解决方案”按钮 await stepContext.Context.SendActivityAsync(activity); // 并自动发起请求 var member = await TeamsInfo.GetMemberAsync(stepContext.Context, stepContext.Context.Activity.From.Id, cancellationToken); var requester = member.GetRequesterName(); var request = new AddRequestRequestModel { Request = new AddRequestRequest(subject, requester) }; var result = await _request.AddRequestAsync(request); if (result.ResponseStatus.StatusCode == 2000) { // TODO 记录自动创建的请求,后续可对这个请求追踪状态变化 var reply = MessageFactory.Text($"已自动创建请求【[{subject}](https://helpme.adenservices.com/WorkOrder.do?woMode=viewWO&woID={result.Request.Id})】。"); await stepContext.Context.SendActivityAsync(reply, cancellationToken); // 15 分钟后自动修改这个请求的状态 BackgroundJob.Schedule <RequestHelper>(r => r.ResolvedRequestAsync(result.Request.Id), TimeSpan.FromMinutes(15)); } // 结束对话 return(await stepContext.EndDialogAsync(null, cancellationToken).ConfigureAwait(false)); } return(await stepContext.NextAsync(subject, cancellationToken).ConfigureAwait(false)); }