protected override async Task HandleTurnAsync(ITurnContext turnContext, ChatUserContext userContext,
                                                      MessageRouter messageRouter, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken))
        {
            Activity activity = turnContext.Activity;

            if (turnContext.TurnState.TryGetValue(typeof(CommandSendMessageProperties).FullName, out object result))
            {
                CommandSendMessageProperties properties = (CommandSendMessageProperties)result;

                //Log broadcast
                if (properties.From.Role == ChatUserRole.Admin && properties.UserId == "*")
                {
                    var allConsumerConservations = await _routingDataManager.GetConsumerConversations();

                    foreach (var consumerConversation in allConsumerConservations)
                    {
                        await _reportDataManager.CreateOrUpdateChatReport(new ChatReportLogCreationModel()
                        {
                            User = properties.From.Role == ChatUserRole.Admin ? new ChatUserModel()
                            {
                                Id = consumerConversation.User.Id
                            } : properties.From,
                            Message = new ChatReportLogModel()
                            {
                                From        = properties.From,
                                Date        = activity.Timestamp.Value.DateTime,
                                Message     = activity.Text,
                                ReportType  = properties.ReportType,
                                Id          = activity.Id,
                                IsBroadcast = true
                            }
                        });
                    }
                }
                else
                {
                    //Log one message
                    ChatReportModel chatReportModel = await _reportDataManager.CreateOrUpdateChatReport(new ChatReportLogCreationModel()
                    {
                        User = properties.From.Role == ChatUserRole.Admin ? new ChatUserModel()
                        {
                            Id = properties.UserId
                        } : properties.From,
                        ChannelId = activity.ChannelId,
                        Message   = new ChatReportLogModel()
                        {
                            From       = properties.From,
                            Date       = activity.Timestamp.Value.DateTime,
                            Message    = activity.Text,
                            ReportType = properties.ReportType,
                            Id         = activity.Id
                        }
                    });

                    turnContext.TurnState.Add(typeof(ChatReportModel).FullName, chatReportModel);
                }

                await next(cancellationToken).ConfigureAwait(false);
            }
        }