[NEW] Check if agent can receive new livechat conversations when its status is away/idle (#15451)

pull/13902/head^2
Renato Becker 7 years ago committed by Rodrigo Nascimento
parent c685f15178
commit bdf4811b37
  1. 6
      app/livechat/server/config.js
  2. 69
      app/models/server/models/Users.js
  3. 1
      packages/rocketchat-i18n/i18n/en.i18n.json
  4. 1
      packages/rocketchat-i18n/i18n/pt-BR.i18n.json

@ -166,6 +166,12 @@ Meteor.startup(function() {
i18nLabel: 'Comment_to_leave_on_closing_session',
});
settings.add('Livechat_enabled_when_agent_idle', true, {
type: 'boolean',
group: 'Livechat',
i18nLabel: 'Accept_new_livechats_when_agent_is_idle',
});
settings.add('Livechat_webhookUrl', false, {
type: 'string',
group: 'Livechat',

@ -7,6 +7,23 @@ import { Base } from './_Base';
import Subscriptions from './Subscriptions';
import { settings } from '../../../settings/server/functions/settings';
const queryStatusAgentOnline = (extraFilters = {}) => {
if (settings.get('Livechat_enabled_when_agent_idle') === false) {
extraFilters = Object.assign(extraFilters, { statusConnection: { $ne: 'away' } });
}
const query = {
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
...extraFilters,
};
return query;
};
export class Users extends Base {
constructor(...args) {
super(...args);
@ -74,14 +91,7 @@ export class Users extends Base {
}
findOnlineAgents() {
const query = {
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
};
const query = queryStatusAgentOnline();
return this.find(query);
}
@ -112,29 +122,13 @@ export class Users extends Base {
}
findOneOnlineAgentByUsername(username) {
const query = {
username,
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
};
const query = queryStatusAgentOnline({ username });
return this.findOne(query);
}
findOneOnlineAgentById(_id) {
const query = {
_id,
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
};
const query = queryStatusAgentOnline({ _id });
return this.findOne(query);
}
@ -148,30 +142,17 @@ export class Users extends Base {
}
findOnlineUserFromList(userList) {
const query = {
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
username: {
$in: [].concat(userList),
},
const username = {
$in: [].concat(userList),
};
const query = queryStatusAgentOnline({ username });
return this.find(query);
}
getNextAgent() {
const query = {
status: {
$exists: true,
$ne: 'offline',
},
statusLivechat: 'available',
roles: 'livechat-agent',
};
const query = queryStatusAgentOnline();
const collectionObj = this.model.rawCollection();
const findAndModify = Meteor.wrapAsync(collectionObj.findAndModify, collectionObj);

@ -14,6 +14,7 @@
"%_of_conversations": "% of Conversations",
"Accept": "Accept",
"Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Accept incoming livechat requests even if there are no online agents",
"Accept_new_livechats_when_agent_is_idle": "Accept new livechat requests when the agent is idle",
"Accept_with_no_online_agents": "Accept with No Online Agents",
"access-mailer": "Access Mailer Screen",
"access-mailer_description": "Permission to send mass email to all users.",

@ -14,6 +14,7 @@
"%_of_conversations": "% de conversas",
"Accept": "Aceitar",
"Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Aceitar requisições de livechat mesmo que não tenham agentes online",
"Accept_new_livechats_when_agent_is_idle": "Aceitar novas requisições de livechat quando o agente estiver inativo",
"Accept_with_no_online_agents": "Aceitar Sem Agentes Online",
"access-mailer": "Acessar Tela do Mailer",
"access-mailer_description": "Permissão para enviar e-mails em massa para todos os usuários.",

Loading…
Cancel
Save