/// <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)); }
/// <summary> /// Invoked when an invoke activity is received from the connector. Invoke activities can be used to communicate many different things. /// </summary> /// <param name="turnContext"></param> /// <param name="cancellationToken"></param> /// <returns>Invoke response.</returns> protected override async Task <InvokeResponse> OnInvokeActivityAsync(ITurnContext <IInvokeActivity> turnContext, CancellationToken cancellationToken) { var userTokenClient = turnContext.TurnState.Get <UserTokenClient>(); if (turnContext.Activity.Name == "tab/fetch") { // Check the state value var state = JsonConvert.DeserializeObject <AdaptiveCardAction>(turnContext.Activity.Value.ToString()); var tokenResponse = await GetTokenResponse(turnContext, state.State, cancellationToken); if (tokenResponse == null || string.IsNullOrEmpty(tokenResponse.Token)) { // There is no token, so the user has not signed in yet. var resource = await userTokenClient.GetSignInResourceAsync(_connectionName, turnContext.Activity as Activity, null, cancellationToken); // Retrieve the OAuth Sign in Link to use in the MessagingExtensionResult Suggested Actions var signInLink = resource.SignInLink; return(CreateInvokeResponse(new TabResponse { Tab = new TabResponsePayload { Type = "auth", SuggestedActions = new TabSuggestedActions { Actions = new List <CardAction> { new CardAction { Type = ActionTypes.OpenUrl, Value = signInLink, Title = "Sign in to this app", }, }, }, }, })); } var client = new SimpleGraphClient(tokenResponse.Token); var profile = await client.GetUserProfile(); var userPhoto = await client.GetPublicURLForProfilePhoto(_applicationBaseUrl); return(CreateInvokeResponse(new TabResponse { Tab = new TabResponsePayload { Type = "continue", Value = new TabResponseCards { Cards = new List <TabResponseCard> { new TabResponseCard { Card = CardHelper.GetSampleAdaptiveCard1(userPhoto, profile.DisplayName) }, new TabResponseCard { Card = CardHelper.GetSampleAdaptiveCard2() }, }, }, }, })); } else if (turnContext.Activity.Name == "tab/submit") { await userTokenClient.SignOutUserAsync(turnContext.Activity.From.Id, _connectionName, turnContext.Activity.ChannelId, cancellationToken); return(CreateInvokeResponse(new TabResponse { Tab = new TabResponsePayload { Type = "continue", Value = new TabResponseCards { Cards = new List <TabResponseCard> { new TabResponseCard { Card = CardHelper.GetSignOutCard() }, }, }, }, })); } else if (turnContext.Activity.Name == "task/fetch") { return(CreateInvokeResponse(new TaskModuleResponse { Task = new TaskModuleContinueResponse { Type = "continue", Value = new TaskModuleTaskInfo() { Card = CardHelper.GetAdaptiveCardForTaskModule(), Height = 200, Width = 350, Title = "Sample Adaptive Card", }, }, })); } else if (turnContext.Activity.Name == "task/submit") { return(CreateInvokeResponse(new TaskModuleResponse { Task = new TaskModuleContinueResponse { Type = "continue", Value = new TaskModuleTaskInfo() { Card = CardHelper.GetTaskModuleSubmitCard(), Height = 200, Width = 350, Title = "Sample Adaptive Card", }, }, })); } return(null); }