Parse livechat placeholders (#22777)

pull/22757/head
Kevin Aleman 4 years ago committed by GitHub
parent f475e6b82d
commit 66c51f1a29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      ee/app/canned-responses/server/hooks/onMessageSentParsePlaceholder.ts
  2. 1
      ee/app/canned-responses/server/index.js
  3. 14
      package-lock.json
  4. 2
      package.json

@ -0,0 +1,54 @@
import get from 'lodash.get';
import { callbacks } from '../../../../../app/callbacks/server';
import { Users, LivechatVisitors } from '../../../../../app/models/server';
import { IMessage } from '../../../../../definition/IMessage';
import { IOmnichannelRoom, isOmnichannelRoom } from '../../../../../definition/IRoom';
const placeholderFields = {
'contact.name': {
from: 'visitor',
dataKey: 'name',
},
'contact.email': {
from: 'visitor',
dataKey: 'visitorEmails[0].address',
},
'contact.phone': {
from: 'visitor',
dataKey: 'phone[0].phoneNumber',
},
'agent.name': {
from: 'agent',
dataKey: 'name',
},
'agent.email': {
from: 'agent',
dataKey: 'emails[0].address',
},
};
callbacks.add('beforeSaveMessage', (message: IMessage, room: IOmnichannelRoom): any => {
if (!isOmnichannelRoom(room)) {
return message;
}
let messageText = message.msg;
const agentId = room?.servedBy?._id;
const visitorId = room?.v?._id;
const agent = Users.findOneById(agentId, { fields: { name: 1, _id: 1, emails: 1 } }) || {};
const visitor = LivechatVisitors.findOneById(visitorId) || {};
Object.keys(placeholderFields).map((field) => {
const templateKey = `{{${ field }}}`;
const placeholderConfig = placeholderFields[field as keyof typeof placeholderFields];
const from = placeholderConfig.from === 'agent' ? agent : visitor;
const data = get(from, placeholderConfig.dataKey, '');
messageText = messageText.replace(templateKey, data);
return messageText;
});
message.msg = messageText;
return message;
}, callbacks.priority.LOW, 'canned-responses-replace-placeholders');

@ -7,6 +7,7 @@ onLicense('canned-responses', () => {
require('./permissions');
require('./hooks/onRemoveAgentDepartment');
require('./hooks/onSaveAgentDepartment');
require('./hooks/onMessageSentParsePlaceholder');
require('./methods/saveCannedResponse');
require('./methods/removeCannedResponse');

14
package-lock.json generated

@ -9137,6 +9137,15 @@
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz",
"integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg=="
},
"@types/lodash.get": {
"version": "4.4.6",
"resolved": "https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.6.tgz",
"integrity": "sha512-E6zzjR3GtNig8UJG/yodBeJeIOtgPkMgsLjDU3CbgCAPC++vJ0eCMnJhVpRZb/ENqEFlov1+3K9TKtY4UdWKtQ==",
"dev": true,
"requires": {
"@types/lodash": "*"
}
},
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@ -24036,6 +24045,11 @@
"resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
"integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.has": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",

@ -73,6 +73,7 @@
"@types/imap": "^0.8.34",
"@types/jsdom": "^16.2.12",
"@types/less": "^3.0.2",
"@types/lodash.get": "^4.4.6",
"@types/mailparser": "^3.0.2",
"@types/marked": "^1.2.2",
"@types/meteor": "^1.4.71",
@ -234,6 +235,7 @@
"limax": "^2.1.0",
"localforage": "^1.9.0",
"lodash.clonedeep": "^4.5.0",
"lodash.get": "^4.4.2",
"lodash.property": "^4.4.2",
"lru-cache": "^5.1.1",
"mailparser": "^3.2.0",

Loading…
Cancel
Save