private async Task <IEnumerable <ConversationReference> > GetHandoffConversation(ITurnContext turnContext, Activity activity, CommandSendMessageProperties properties, ConversationReference selfConversation) { //Broadcast to many users IEnumerable <ConversationReference> conversations = null; if (properties.From.Role == ChatUserRole.Consumer) { conversations = await _routingDataManager.GetAdminConversations(); //Send event to event processor... if possible if (turnContext.TurnState.TryGetValue(typeof(ChatReportModel).FullName, out object result)) { await PushMessageToEventProcessorSaga(activity.Text, activity.ChannelId, properties, (ChatReportModel)result); } } //To one user only - Admin only else if (properties.From.Role == ChatUserRole.Admin) { if (properties.UserId == "*") { conversations = await _routingDataManager.GetConversations(); } else { conversations = await _routingDataManager.GetConversationsFromUser(properties.UserId); IEnumerable <ConversationReference> conversations2 = await _routingDataManager.GetAdminConversations(); conversations = conversations2.Union(conversations); } } else { throw new Exception("Message handoff not handled"); } //Do not send to self conversations = _routingDataManager.RemoveSelfConversation(conversations, selfConversation); return(conversations); }