/// <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));
        }
Пример #2
0
        /// <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);
        }