/// <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)); }
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); }
/// <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)); }
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); }
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; } }
/// <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)); }