public async Task <IActionResult> WinnerNominationAsync([FromBody] IList <AwardWinnerNotification> details)
        {
            try
            {
                if (details == null)
                {
                    return(this.BadRequest());
                }

                var    emails      = string.Join(",", details.Select(row => row.NominatedToPrincipalName)).Split(",").Select(row => row.Trim()).Distinct();
                string teamId      = details.First().TeamId;
                var    claims      = this.GetUserClaims();
                var    teamDetails = await this.teamStorageProvider.GetTeamDetailAsync(teamId);

                string serviceUrl = teamDetails.ServiceUrl;
                string appId      = this.configuration["MicrosoftAppId"];
                string appBaseUrl = this.configuration.GetValue <string>("Bot:AppBaseUri");
                string manifestId = this.configuration.GetValue <string>("Bot:ManifestId");
                MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
                var conversationParameters = new ConversationParameters()
                {
                    ChannelData = new TeamsChannelData()
                    {
                        Team = new TeamInfo()
                        {
                            Id = teamId
                        }, Channel = new ChannelInfo()
                        {
                            Id = teamId
                        }
                    },
                    Activity = (Activity)MessageFactory.Carousel(WinnerCarouselCard.GetAwardWinnerCard(appBaseUrl, details, this.localizer, manifestId)),
                    Bot      = new ChannelAccount()
                    {
                        Id = appId
                    },
                    IsGroup  = true,
                    TenantId = this.configuration.GetValue <string>("Bot:TenantId"),
                };

                await((BotFrameworkAdapter)this.adapter).CreateConversationAsync(
                    Channel,
                    serviceUrl,
                    new MicrosoftAppCredentials(this.configuration.GetValue <string>("MicrosoftAppId"), this.configuration.GetValue <string>("MicrosoftAppPassword")),
                    conversationParameters,
                    async(turnContext, cancellationToken) =>
                {
                    Activity mentionActivity = await CardHelper.GetMentionActivityAsync(emails, claims.FromId, teamId, turnContext, this.localizer, this.logger, MentionActivityType.Winner, default);
                    await((BotFrameworkAdapter)this.adapter).ContinueConversationAsync(
                        this.configuration.GetValue <string>("MicrosoftAppId"),
                        turnContext.Activity.GetConversationReference(),
                        async(continueConversationTurnContext, continueConversationCancellationToken) =>
                    {
                        mentionActivity.ApplyConversationReference(turnContext.Activity.GetConversationReference());
                        await continueConversationTurnContext.SendActivityAsync(mentionActivity, continueConversationCancellationToken);
                    }, cancellationToken);
                }, default);
        public async Task <IActionResult> WinnerNominationAsync([FromBody] AwardWinner details)
        {
            try
            {
                if (details == null || details.Winners == null)
                {
                    return(this.BadRequest(new { message = "Award winner details can not be null." }));
                }

                var    emails      = string.Join(",", details.Winners.Select(row => row.NomineeUserPrincipalNames)).Split(",").Select(row => row.Trim()).Distinct();
                string teamId      = details.TeamId;
                var    claims      = this.GetUserClaims();
                var    teamDetails = await this.teamStorageProvider.GetTeamDetailAsync(teamId);

                string serviceUrl = teamDetails.ServiceUrl;
                string appBaseUrl = this.botSettingsOptions.Value.AppBaseUri;
                MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
                var conversationParameters = new ConversationParameters()
                {
                    ChannelData = new TeamsChannelData()
                    {
                        Channel = new ChannelInfo()
                        {
                            Id = teamId
                        }
                    },
                    Activity = (Activity)MessageFactory.Carousel(WinnerCarouselCard.GetAwardWinnerCard(appBaseUrl, details.Winners, this.localizer)),
                    Bot      = new ChannelAccount()
                    {
                        Id = this.microsoftAppCredentials.MicrosoftAppId
                    },
                    IsGroup  = true,
                    TenantId = this.botSettingsOptions.Value.TenantId,
                };

                await((BotFrameworkAdapter)this.adapter).CreateConversationAsync(
                    Constants.TeamsBotFrameworkChannelId,
                    serviceUrl,
                    this.microsoftAppCredentials,
                    conversationParameters,
                    async(turnContext, cancellationToken) =>
                {
                    Activity mentionActivity = await CardHelper.GetMentionActivityAsync(emails, claims.FromId, teamId, turnContext, this.localizer, this.logger, MentionActivityType.Winner, default);
                    await turnContext.SendActivityAsync(mentionActivity, cancellationToken);
                    await turnContext.SendActivityAsync(MessageFactory.Text(this.localizer.GetString("ViewWinnerTabText")), cancellationToken);
                }, default);
        public async Task <IActionResult> WinnerNominationAsync([FromBody] IList <AwardWinnerNotification> details)
        {
            try
            {
                if (details == null)
                {
                    return(this.BadRequest());
                }

                var    emails      = string.Join(",", details.Select(row => row.NominatedToPrincipalName)).Split(",").Select(row => row.Trim()).Distinct();
                string teamId      = details.First().TeamId;
                var    claims      = this.GetUserClaims();
                var    teamDetails = await this.teamStorageProvider.GetTeamDetailAsync(teamId);

                string serviceUrl = teamDetails.ServiceUrl;
                string appId      = this.configuration["MicrosoftAppId"];
                MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
                var conversationReference = new ConversationReference()
                {
                    ChannelId = Channel,
                    Bot       = new ChannelAccount()
                    {
                        Id = appId
                    },
                    ServiceUrl   = serviceUrl,
                    Conversation = new ConversationAccount()
                    {
                        ConversationType = ChannelConversationType,
                        IsGroup          = true,
                        Id       = teamId,
                        TenantId = this.configuration.GetValue <string>("Bot:TenantId"),
                    },
                };

                await((BotFrameworkAdapter)this.adapter).ContinueConversationAsync(
                    appId,
                    conversationReference,
                    async(conversationTurnContext, conversationCancellationToken) =>
                {
                    System.Diagnostics.Debug.WriteLine(conversationTurnContext.Activity.ServiceUrl);
                    var result = await conversationTurnContext.SendActivityAsync(MessageFactory.Carousel(WinnerCarouselCard.GetAwardWinnerCard(details, this.localizer)));
                    Activity mentionActivity = await CardHelper.GetMentionActivityAsync(emails, claims.FromId, teamId, conversationTurnContext, this.localizer, this.logger, default);
                    conversationReference.Conversation.Id = $"{teamId};messageid={result.Id}";
                    await conversationTurnContext.SendActivityAsync(mentionActivity);
                },