/// <summary>
        /// Method to send goal reminder card to personal bot.
        /// </summary>
        /// <param name="personalGoalDetail">Holds personal goal detail entity data sent from background service.</param>
        /// <param name="isReminderBeforeThreeDays">Determines reminder to be sent prior 3 days to end date.</param>
        /// <returns>A Task represents goal reminder card is sent to the bot, installed in the personal scope.</returns>
        public async Task SendGoalReminderToPersonalBotAsync(PersonalGoalDetail personalGoalDetail, bool isReminderBeforeThreeDays = false)
        {
            personalGoalDetail = personalGoalDetail ?? throw new ArgumentNullException(nameof(personalGoalDetail));
            var conversationReference = new ConversationReference()
            {
                ChannelId = Constants.TeamsBotFrameworkChannelId,
                Bot       = new ChannelAccount()
                {
                    Id = $"28:{this.microsoftAppCredentials.MicrosoftAppId}"
                },
                ServiceUrl   = personalGoalDetail.ServiceUrl,
                Conversation = new ConversationAccount()
                {
                    ConversationType = Constants.PersonalConversationType, Id = personalGoalDetail.ConversationId, TenantId = this.options.Value.TenantId
                },
            };

            try
            {
                await this.retryPolicy.ExecuteAsync(async() =>
                {
                    await((BotFrameworkAdapter)this.adapter).ContinueConversationAsync(
                        this.microsoftAppCredentials.MicrosoftAppId,
                        conversationReference,
                        async(turnContext, cancellationToken) =>
                    {
                        string reminderType = string.Empty;
                        AdaptiveTextColor reminderTypeColor = AdaptiveTextColor.Accent;
                        if (isReminderBeforeThreeDays)
                        {
                            reminderType      = this.localizer.GetString("PersonalGoalEndingAfterThreeDays");
                            reminderTypeColor = AdaptiveTextColor.Attention;
                        }
                        else
                        {
                            reminderType = this.GetReminderTypeString(personalGoalDetail.ReminderFrequency);
                        }

                        var goalReminderAttachment = MessageFactory.Attachment(GoalReminderCard.GetGoalReminderCard(this.localizer, this.options.Value.ManifestId, this.options.Value.GoalsTabEntityId, reminderType, reminderTypeColor));
                        this.logger.LogInformation($"Sending goal reminder card to Personal bot. Conversation id: {personalGoalDetail.ConversationId}");
                        await turnContext.SendActivityAsync(goalReminderAttachment, cancellationToken);
                    },
                        CancellationToken.None);
                });
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, $"Error while sending goal reminder card to personal bot: {ex.Message} at {nameof(this.SendGoalReminderToPersonalBotAsync)}");
                throw;
            }
        }
        /// <summary>
        /// Method to send goal reminder card to team and team members or update team goal, personal goal and note details in storage.
        /// </summary>
        /// <param name="teamGoalDetail">Holds team goal detail entity data sent from background service.</param>
        /// <param name="isReminderBeforeThreeDays">Determines reminder to be sent prior 3 days to end date.</param>
        /// <returns>A Task represents goal reminder card is sent to team and team members.</returns>
        public async Task SendGoalReminderToTeamAndTeamMembersAsync(TeamGoalDetail teamGoalDetail, bool isReminderBeforeThreeDays = false)
        {
            teamGoalDetail = teamGoalDetail ?? throw new ArgumentNullException(nameof(teamGoalDetail));

            try
            {
                var    teamId     = teamGoalDetail.TeamId;
                string serviceUrl = teamGoalDetail.ServiceUrl;
                MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);

                var conversationReference = new ConversationReference()
                {
                    ChannelId = Constants.TeamsBotFrameworkChannelId,
                    Bot       = new ChannelAccount()
                    {
                        Id = $"28:{this.microsoftAppCredentials.MicrosoftAppId}"
                    },
                    ServiceUrl   = serviceUrl,
                    Conversation = new ConversationAccount()
                    {
                        ConversationType = Constants.ChannelConversationType, IsGroup = true, Id = teamId, TenantId = this.options.Value.TenantId
                    },
                };

                await this.retryPolicy.ExecuteAsync(async() =>
                {
                    try
                    {
                        await((BotFrameworkAdapter)this.adapter).ContinueConversationAsync(
                            this.microsoftAppCredentials.MicrosoftAppId,
                            conversationReference,
                            async(turnContext, cancellationToken) =>
                        {
                            string reminderType = string.Empty;
                            AdaptiveTextColor reminderTypeColor = AdaptiveTextColor.Accent;
                            if (isReminderBeforeThreeDays)
                            {
                                reminderType      = this.localizer.GetString("TeamGoalEndingAfterThreeDays");
                                reminderTypeColor = AdaptiveTextColor.Warning;
                            }
                            else
                            {
                                reminderType = this.GetReminderTypeString(teamGoalDetail.ReminderFrequency);
                            }

                            var goalReminderAttachment = MessageFactory.Attachment(GoalReminderCard.GetGoalReminderCard(this.localizer, this.options.Value.ManifestId, this.options.Value.GoalsTabEntityId, reminderType, reminderTypeColor));
                            this.logger.LogInformation($"Sending goal reminder card to teamId: {teamId}");
                            await turnContext.SendActivityAsync(goalReminderAttachment, cancellationToken);
                            await this.SendGoalReminderToTeamMembersAsync(turnContext, teamGoalDetail, goalReminderAttachment, cancellationToken);
                        },
                            CancellationToken.None);
                    }
                    catch (Exception ex)
                    {
                        this.logger.LogError(ex, $"Error while performing retry logic to send goal reminder card for : {teamGoalDetail.TeamGoalId}.");
                        throw;
                    }
                });
            }
            #pragma warning disable CA1031 // Catching general exceptions to log exception details in telemetry client.
            catch (Exception ex)
            #pragma warning restore CA1031 // Catching general exceptions to log exception details in telemetry client.
            {
                this.logger.LogError(ex, $"Error while sending goal reminder in team from background service for : {teamGoalDetail.TeamGoalId} at {nameof(this.SendGoalReminderToTeamAndTeamMembersAsync)}");
            }
        }