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); } }