/// <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));
        }
Esempio n. 2
0
        /// <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);
        }