/// <summary>
        /// Ends the engagement where the given party is the conversation owner
        /// (e.g. a customer service agent).
        /// </summary>
        /// <param name="conversationOwnerParty">The owner of the engagement (conversation).</param>
        /// <returns>The results. If the number of results is more than 0, the operation was successful.</returns>
        public List <MessageRouterResult> EndEngagement(Party conversationOwnerParty)
        {
            List <MessageRouterResult> messageRouterResults = new List <MessageRouterResult>();

            Party ownerInConversation = RoutingDataManager.FindEngagedPartyByChannel(
                conversationOwnerParty.ChannelId, conversationOwnerParty.ChannelAccount);

            if (ownerInConversation != null && RoutingDataManager.IsEngaged(ownerInConversation, EngagementProfile.Owner))
            {
                Party otherParty = RoutingDataManager.GetEngagedCounterpart(ownerInConversation);
                messageRouterResults.AddRange(
                    RoutingDataManager.RemoveEngagement(ownerInConversation, EngagementProfile.Owner));
            }
            else
            {
                messageRouterResults.Add(new MessageRouterResult()
                {
                    Type = MessageRouterResultType.Error,
                    ConversationOwnerParty = conversationOwnerParty,
                    ErrorMessage           = "No conversation to close found"
                });
            }

            return(messageRouterResults);
        }