/// <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)); }
/// <summary> /// 添加请求 /// </summary> /// <param name="model"></param> /// <returns></returns> public async Task <RequestResponseModel> AddRequestAsync(AddRequestRequestModel model) { var url = "https://helpme.adenservices.com/api/v3/requests"; var inputData = new Dictionary <string, string> { { "input_data", JsonConvert.SerializeObject(model) } }; var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = new FormUrlEncodedContent(inputData) }; var response = await HttpClient.SendAsync(request); var body = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <RequestResponseModel>(body); return(result); }