Ejemplo n.º 1
0
        /// <inheritdoc/>
        public override async Task <DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (options is CancellationToken)
            {
                throw new ArgumentException($"{nameof(options)} cannot be a cancellation token");
            }

            if (Disabled != null && Disabled.GetValue(dc.State))
            {
                return(await dc.EndDialogAsync(cancellationToken : cancellationToken).ConfigureAwait(false));
            }

            string message = Message.GetValueOrNull(dc.State);

            if (string.IsNullOrWhiteSpace(message))
            {
                throw new InvalidOperationException($"Missing {nameof(Message)} for {Kind}.");
            }

            var response = new TaskModuleResponse
            {
                Task      = new TaskModuleMessageResponse(message),
                CacheInfo = GetCacheInfo(dc),
            };

            var responseActivity          = CreateInvokeResponseActivity(response);
            ResourceResponse sendResponse = await dc.Context.SendActivityAsync(responseActivity, cancellationToken : cancellationToken).ConfigureAwait(false);

            return(await dc.EndDialogAsync(sendResponse, cancellationToken : cancellationToken).ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext,
                                                                                 TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            var asJobject = JObject.FromObject(taskModuleRequest.Data);
            var formname  = asJobject["data"].ToString();

            TaskModuleResponse taskModuleResponse = null;

            switch (formname)
            {
            case "alertform":
            {
                var taskInfo = new TaskModuleTaskInfo();
                taskInfo.Url    = taskUrl;
                taskInfo.Width  = 510;
                taskInfo.Height = 500;
                taskInfo.Title  = "Fetched from bot";

                taskModuleResponse = new TaskModuleResponse
                {
                    Task = new TaskModuleContinueResponse()
                    {
                        Value = taskInfo,
                    },
                };
            }
            break;

            default:
                break;
            }


            return(Task.FromResult(taskModuleResponse));
        }
        public void TaskModuleResponseInitsWithNoArgs()
        {
            var response = new TaskModuleResponse();

            Assert.NotNull(response);
            Assert.IsType <TaskModuleResponse>(response);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Returns TaskModule dialog to indicate task completion
        /// </summary>
        /// <param name="activity">Incoming InvokeActivity</param>
        /// <returns>TaskModule dialog</returns>
        public static TaskModuleResponse GetMessagePostedConfirmation(Activity activity)
        {
            var responseCard = File.ReadAllText(HostingEnvironment.MapPath("~/Cards/CardPostedConfirmation.json"));

            responseCard = responseCard.Replace("%personHash%", AnonimizeSender(activity.From));

            var taskModuleResponse = new TaskModuleResponse()
            {
                ResponseType = "task",
                Task         = new TaskResponse()
                {
                    Type  = "continue",
                    Value = new Value()
                    {
                        Card = new Attachment()
                        {
                            ContentType = "application/vnd.microsoft.card.adaptive",
                            Content     = JsonConvert.DeserializeObject(responseCard)
                        }
                    }
                }
            };

            return(taskModuleResponse);
        }
        /// <inheritdoc/>
        public override async Task <DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (options is CancellationToken)
            {
                throw new ArgumentException($"{nameof(options)} cannot be a cancellation token");
            }

            if (Disabled != null && Disabled.GetValue(dc.State))
            {
                return(await dc.EndDialogAsync(cancellationToken : cancellationToken).ConfigureAwait(false));
            }

            if (Card == null)
            {
                throw new ArgumentException($"A valid {nameof(Card)} is required for {Kind}.");
            }

            var activity = await Card.BindAsync(dc, dc.State).ConfigureAwait(false);

            if (activity?.Attachments?.Any() != true)
            {
                throw new InvalidOperationException($"Invalid activity. An attachment is required for {Kind}.");
            }

            Attachment attachment = activity.Attachments[0];

            var title           = Title.GetValueOrNull(dc.State);
            var height          = Height.GetValueOrNull(dc.State);
            var width           = Width.GetValueOrNull(dc.State);
            var completionBotId = CompletionBotId.GetValueOrNull(dc.State);

            var response = new TaskModuleResponse
            {
                Task = new TaskModuleContinueResponse
                {
                    Value = new TaskModuleTaskInfo
                    {
                        Title           = title,
                        Card            = attachment,
                        Height          = height,
                        Width           = width,
                        CompletionBotId = completionBotId,
                    },
                },
                CacheInfo = GetCacheInfo(dc),
            };

            var responseActivity          = CreateInvokeResponseActivity(response);
            ResourceResponse sendResponse = await dc.Context.SendActivityAsync(responseActivity, cancellationToken : cancellationToken).ConfigureAwait(false);

            return(await dc.EndDialogAsync(sendResponse, cancellationToken : cancellationToken).ConfigureAwait(false));
        }
        public void TaskModuleResponseInits()
        {
            var task      = new TaskModuleResponseBase();
            var cacheInfo = new CacheInfo();

            var response = new TaskModuleResponse(task)
            {
                CacheInfo = cacheInfo
            };

            Assert.NotNull(response);
            Assert.IsType <TaskModuleResponse>(response);
            Assert.Equal(task, response.Task);
            Assert.Equal(cacheInfo, response.CacheInfo);
        }
        /// <inheritdoc/>
        public override async Task <DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (options is CancellationToken)
            {
                throw new ArgumentException($"{nameof(options)} cannot be a cancellation token");
            }

            if (Disabled != null && Disabled.GetValue(dc.State))
            {
                return(await dc.EndDialogAsync(cancellationToken : cancellationToken).ConfigureAwait(false));
            }

            string url = Url.GetValueOrNull(dc.State);

            if (string.IsNullOrEmpty(url))
            {
                throw new InvalidOperationException($"Missing {nameof(Url)} for {Kind}.");
            }

            var title  = Title.GetValueOrNull(dc.State);
            var height = Height.GetValueOrNull(dc.State);
            var width  = Width.GetValueOrNull(dc.State);

            var fallbackUrl     = FallbackUrl.GetValueOrNull(dc.State);
            var completionBotId = CompletionBotId.GetValueOrNull(dc.State);

            var response = new TaskModuleResponse
            {
                Task = new TaskModuleContinueResponse
                {
                    Value = new TaskModuleTaskInfo
                    {
                        Title           = title,
                        Url             = url,
                        FallbackUrl     = fallbackUrl,
                        Height          = height,
                        Width           = width,
                        CompletionBotId = completionBotId,
                    },
                },
                CacheInfo = GetCacheInfo(dc),
            };

            var responseActivity          = CreateInvokeResponseActivity(response);
            ResourceResponse sendResponse = await dc.Context.SendActivityAsync(responseActivity, cancellationToken : cancellationToken).ConfigureAwait(false);

            return(await dc.EndDialogAsync(sendResponse, cancellationToken : cancellationToken).ConfigureAwait(false));
        }
        /// <inheritdoc/>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            // Verify action.
            if (!taskModuleRequest.IsReviewInMeetingAction())
            {
                // App doesn't recognize the action.
                throw new Exception("App doesn't recognize the incoming action.");
            }

            // Read resource information from task module request and return link to review it in a meeting.
            var resource = taskModuleRequest.ReadResource();
            var response = new TaskModuleResponse(this.GetTaskModuleContinueResponse(
                                                      title: resource.Name,
                                                      url: $"{this.appSettings.BaseUrl}/reviewinmeeting/{resource.Id}",
                                                      fallbackUrl: resource.Url));

            return(Task.FromResult(response));
        }
        /// <summary>
        /// Handle task module is submit.
        /// </summary>
        /// <param name = "turnContext" > The turn context.</param>
        /// <param name = "taskModuleRequest" >The task module invoke request value payload.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task Module Response for the request.</returns>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleSubmitAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            var taskInfo = new TaskModuleResponse();

            taskInfo.Task = new TaskModuleContinueResponse
            {
                Type  = "continue",
                Value = new TaskModuleTaskInfo()
                {
                    Card   = CardHelper.GetTaskModuleSubmitCard(),
                    Height = 200,
                    Width  = 350,
                    Title  = "Sample Adaptive Card",
                },
            };

            return(Task.FromResult(taskInfo));
        }
        /// <summary>
        /// Handle task module is fetch.
        /// </summary>
        /// <param name = "turnContext" > The turn context.</param>
        /// <param name = "taskModuleRequest" >The task module invoke request value payload.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task Module Response for the request.</returns>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            var asJobject          = JObject.FromObject(taskModuleRequest.Data);
            var buttonType         = (string)asJobject.ToObject <CardTaskFetchValue <string> >()?.Id;
            var taskModuleResponse = new TaskModuleResponse();

            if (buttonType == "checkin")
            {
                taskModuleResponse.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Url    = _applicationBaseUrl + "/" + "CheckIn",
                        Height = 350,
                        Width  = 350,
                        Title  = "Check in details",
                    },
                };
            }
            else if (buttonType == "viewLocation")
            {
                var latitude  = (double)asJobject.ToObject <LocationDetails <double> >()?.Latitude;
                var longitude = (double)asJobject.ToObject <LocationDetails <double> >()?.Longitude;
                taskModuleResponse.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Url    = _applicationBaseUrl + "/" + "ViewLocation?latitude=" + latitude + "&longitude=" + longitude,
                        Height = 350,
                        Width  = 350,
                        Title  = "View location",
                    },
                };
            }

            return(Task.FromResult(taskModuleResponse));
        }
        /// <summary>
        /// Handle task module is fetch.
        /// </summary>
        /// <param name = "turnContext" > The turn context.</param>
        /// <param name = "taskModuleRequest" >The task module invoke request value payload.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task Module Response for the request.</returns>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            var asJobject  = JObject.FromObject(taskModuleRequest.Data);
            var buttonType = (string)asJobject.ToObject <CardTaskFetchValue <string> >()?.Id;

            var taskModuleResponse = new TaskModuleResponse();

            if (buttonType == "generate")
            {
                taskModuleResponse.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Url    = _applicationBaseUrl + "/" + "GenerateQR",
                        Height = 350,
                        Width  = 350,
                        Title  = "Generate QR code",
                    },
                };
            }
            else if (buttonType == "install")
            {
                taskModuleResponse.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Url    = _applicationBaseUrl + "/" + "InstallApp",
                        Height = 350,
                        Width  = 350,
                        Title  = "Install App",
                    },
                };
            }

            return(Task.FromResult(taskModuleResponse));
        }
        /// <summary>
        /// Handle task module is fetch.
        /// </summary>
        /// <param name = "turnContext" > The turn context.</param>
        /// <param name = "taskModuleRequest" >The task module invoke request value payload.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task Module Response for the request.</returns>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            var taskInfo   = new TaskModuleResponse();
            var asJobject  = JObject.FromObject(taskModuleRequest.Data);
            var buttonType = (string)asJobject.ToObject <CardTaskFetchValue <string> >()?.Id;

            if (buttonType == "youTubeVideo")
            {
                var videoId = asJobject.GetValue("youTubeVideoId")?.ToString();
                taskInfo.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Url    = "https://www.youtube.com/embed/" + videoId,
                        Height = 1000,
                        Width  = 700,
                        Title  = "Youtube video",
                    },
                };
            }
            else
            {
                taskInfo.Task = new TaskModuleContinueResponse
                {
                    Type  = "continue",
                    Value = new TaskModuleTaskInfo()
                    {
                        Card   = CardHelper.GetAdaptiveCardForTaskModule(),
                        Height = 200,
                        Width  = 350,
                        Title  = "Sample Adaptive Card",
                    },
                };
            }

            return(Task.FromResult(taskInfo));
        }
Ejemplo n.º 13
0
        protected override async Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            JObject value = JObject.Parse(turnContext.Activity.Value.ToString());
            JObject data  = JObject.Parse(value.GetValue("data").ToString());
            string  Id    = data.GetValue("Id").ToString();

            var model = new TaskModuleResponse
            {
                Task = new TaskModuleContinueResponse
                {
                    Value = new TaskModuleTaskInfo()
                    {
                        Url         = _configuration["BaseUrl"] + "/Result?id=" + Id,
                        FallbackUrl = _configuration["BaseUrl"] + "/Result?id=" + Id,
                        Height      = 300,
                        Width       = 350,
                        Title       = "Details",
                    },
                },
            };

            return(model);
        }
Ejemplo n.º 14
0
        protected virtual async Task OnInvokeActivityAsync(ITurnContext <IInvokeActivity> turnContext, CancellationToken cancellationToken)
        {
            switch (turnContext.Activity.Name)
            {
            case "task/fetch":
                var activityValue            = turnContext.Activity.Value.ToString();
                var taskModuleRequestDetails = JsonConvert.DeserializeObject <TaskModuleRequest>(activityValue);
                var actionDetails            = JsonConvert.DeserializeObject <ActionDetails>(taskModuleRequestDetails.Data.ToString());
                TaskModuleResponse response  = new TaskModuleResponse
                {
                    Task = new TaskModuleContinueResponse()
                    {
                        Type  = "continue",
                        Value = new TaskModuleTaskInfo()
                        {
                            Title  = "Test task module",
                            Height = 470,
                            Width  = 400,
                            Card   = GetSimpleAdaptiveCard(actionDetails.ActionType).ToAttachment()
                        }
                    }
                };

                await SendResponse(turnContext, response);

                break;

            case "task/submit":
                // Close task module by sending reponse as Accepted.
                await SendResponse(turnContext);

                await turnContext.SendActivityAsync(MessageFactory.Text("Thanks for submitting your request."));

                break;
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 用户点击 “发起请求” 获取 “查看解决方案” 按钮时
        /// </summary>
        /// <param name="turnContext"></param>
        /// <param name="taskModuleRequest"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        protected override Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
        {
            TaskModuleResponse response = null;

            if (taskModuleRequest.Data is JObject @object)
            {
                var taskFetchValue = @object["data"].ToObject <TaskFetchValueModel>();

                // 查看解决方案
                if (taskFetchValue.Type == TaskFetchTypes.Solution)
                {
                    // 显示解决方案
                    response = new TaskModuleResponse
                    {
                        Task = new TaskModuleContinueResponse
                        {
                            Value = new TaskModuleTaskInfo()
                            {
                                Title  = "查看解决方案",
                                Height = 500,
                                Width  = "medium",
                                Url    = $"{_configuration["AppHost"]}/solutions/{taskFetchValue.Data}"
                            }
                        }
                    };
                }
                // 发起请求
                else if (taskFetchValue.Type == TaskFetchTypes.AddRequest)
                {
                    var model = JsonConvert.DeserializeObject <InputWorkOrderModel>(taskFetchValue.Data);
                    var card  = CreateInputFormAdaptiveCard(model);

                    if (IsRequestCreated(model?.Id))
                    {
                        // TODO 优化
                    }

                    // 显示输入表单
                    response = new TaskModuleResponse
                    {
                        Task = new TaskModuleContinueResponse
                        {
                            Value = new TaskModuleTaskInfo()
                            {
                                Title  = "发起请求",
                                Height = 500,
                                Width  = "medium",
                                Card   = new Attachment()
                                {
                                    ContentType = AdaptiveCard.ContentType, Content = card
                                }
                            }
                        }
                    };
                }
            }

            if (response == null)
            {
                response = new TaskModuleResponse
                {
                    Task = new TaskModuleMessageResponse
                    {
                        Value = "操作失败"
                    }
                };
            }


            return(Task.FromResult(response));
        }