diff --git a/packages/rocketchat-livechat/client/views/app/tabbar/visitorForward.js b/packages/rocketchat-livechat/client/views/app/tabbar/visitorForward.js index 75d27be5195c..d328e4065967 100644 --- a/packages/rocketchat-livechat/client/views/app/tabbar/visitorForward.js +++ b/packages/rocketchat-livechat/client/views/app/tabbar/visitorForward.js @@ -18,7 +18,13 @@ Template.visitorForward.helpers({ return LivechatDepartment.find({ enabled: true }); }, agents() { - return AgentUsers.find({ _id: { $ne: Meteor.userId() } }, { sort: { name: 1, username: 1 } }); + const query = { + _id: { $ne: Meteor.userId() }, + status: { $ne: 'offline' }, + statusLivechat: 'available', + }; + + return AgentUsers.find(query, { sort: { name: 1, username: 1 } }); }, agentName() { return this.name || this.username; diff --git a/packages/rocketchat-livechat/server/lib/Livechat.js b/packages/rocketchat-livechat/server/lib/Livechat.js index 29dc9ba41c18..8d026bfb240d 100644 --- a/packages/rocketchat-livechat/server/lib/Livechat.js +++ b/packages/rocketchat-livechat/server/lib/Livechat.js @@ -439,11 +439,13 @@ RocketChat.Livechat = { let agent; if (transferData.userId) { - const user = RocketChat.models.Users.findOneById(transferData.userId); - agent = { - agentId: user._id, - username: user.username, - }; + const user = RocketChat.models.Users.findOneOnlineAgentById(transferData.userId); + if (!user) { + return false; + } + + const { _id: agentId, username } = user; + agent = Object.assign({}, { agentId, username }); } else if (RocketChat.settings.get('Livechat_Routing_Method') !== 'Guest_Pool') { agent = RocketChat.Livechat.getNextAgent(transferData.departmentId); } else { diff --git a/packages/rocketchat-livechat/server/models/Users.js b/packages/rocketchat-livechat/server/models/Users.js index ba5b04c41e23..9be00bc99f01 100644 --- a/packages/rocketchat-livechat/server/models/Users.js +++ b/packages/rocketchat-livechat/server/models/Users.js @@ -51,6 +51,24 @@ RocketChat.models.Users.findOneOnlineAgentByUsername = function(username) { return this.findOne(query); }; +/** + * Find an online agent by its user Id + * @return + */ +RocketChat.models.Users.findOneOnlineAgentById = function(_id) { + const query = { + _id, + status: { + $exists: true, + $ne: 'offline', + }, + statusLivechat: 'available', + roles: 'livechat-agent', + }; + + return this.findOne(query); +}; + /** * Gets all agents * @return