[NEW][APPS-ENGINE] Implement new IPostLivechatRoomTransferred event (#18625)

* Implement new IPostLivechatRoomTransferred event

* Move event trigger to correct place

* Update Apps-Engine version
pull/18491/head^2
Douglas Gubert 5 years ago committed by GitHub
parent 06467a6d18
commit 40520f4272
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      app/apps/server/bridges/listeners.js
  2. 30
      app/livechat/server/lib/Helper.js
  3. 11
      package-lock.json
  4. 2
      package.json

@ -1,4 +1,5 @@
import { AppInterface } from '@rocket.chat/apps-engine/definition/metadata';
import { LivechatTransferEventType } from '@rocket.chat/apps-engine/definition/livechat';
export class AppListenerBridge {
constructor(orch) {
@ -39,6 +40,7 @@ export class AppListenerBridge {
case AppInterface.IPostLivechatRoomClosed:
case AppInterface.IPostLivechatAgentAssigned:
case AppInterface.IPostLivechatAgentUnassigned:
case AppInterface.IPostLivechatRoomTransferred:
return 'livechatEvent';
case AppInterface.IUIKitInteractionHandler:
return 'uiKitInteractionEvent';
@ -100,6 +102,16 @@ export class AppListenerBridge {
room: this.orch.getConverters().get('rooms').convertRoom(data.room),
agent: this.orch.getConverters().get('users').convertToApp(data.user),
});
case AppInterface.IPostLivechatRoomTransferred:
const converter = data.type === LivechatTransferEventType.AGENT ? 'users' : 'departments';
return this.orch.getManager().getListenerManager().executeListener(inte, {
type: data.type,
room: this.orch.getConverters().get('rooms').convertById(data.room),
from: this.orch.getConverters().get(converter).convertById(data.from),
to: this.orch.getConverters().get(converter).convertById(data.to),
});
default:
const room = this.orch.getConverters().get('rooms').convertRoom(data);

@ -1,6 +1,7 @@
import { Meteor } from 'meteor/meteor';
import { Match, check } from 'meteor/check';
import { MongoInternals } from 'meteor/mongo';
import { LivechatTransferEventType } from '@rocket.chat/apps-engine/definition/livechat';
import { Messages, LivechatRooms, Rooms, Subscriptions, Users, LivechatInquiry, LivechatDepartment, LivechatDepartmentAgents } from '../../../models/server';
import { Livechat } from './Livechat';
@ -44,8 +45,11 @@ export const createLivechatRoom = (rid, name, guest, roomInfo = {}, extraData =
const roomId = Rooms.insert(room);
Apps.getBridges().getListenerBridge().livechatEvent(AppEvents.IPostLivechatRoomStarted, room);
callbacks.run('livechat.newRoom', room);
Meteor.defer(() => {
Apps.triggerEvent(AppEvents.IPostLivechatRoomStarted, room);
callbacks.run('livechat.newRoom', room);
});
return roomId;
};
@ -166,7 +170,9 @@ export const removeAgentFromSubscription = (rid, { _id, username }) => {
Subscriptions.removeByRoomIdAndUserId(rid, _id);
Messages.createUserLeaveWithRoomIdAndUser(rid, { _id, username });
Apps.getBridges().getListenerBridge().livechatEvent(AppEvents.IPostLivechatAgentUnassigned, { room, user });
Meteor.defer(() => {
Apps.triggerEvent(AppEvents.IPostLivechatAgentUnassigned, { room, user });
});
};
export const parseAgentCustomFields = (customFields) => {
@ -257,6 +263,15 @@ export const forwardRoomToAgent = async (room, transferData) => {
removeAgentFromSubscription(rid, oldServedBy);
}
Messages.createUserJoinWithRoomIdAndUser(rid, { _id: servedBy._id, username: servedBy.username });
Meteor.defer(() => {
Apps.triggerEvent(AppEvents.IPostLivechatRoomTransferred, {
type: LivechatTransferEventType.AGENT,
room: rid,
from: oldServedBy?._id,
to: servedBy._id,
});
});
}
callbacks.run('livechat.afterForwardChatToAgent', { rid, servedBy, oldServedBy });
@ -267,6 +282,15 @@ export const updateChatDepartment = ({ rid, newDepartmentId, oldDepartmentId })
LivechatRooms.changeDepartmentIdByRoomId(rid, newDepartmentId);
LivechatInquiry.changeDepartmentIdByRoomId(rid, newDepartmentId);
Meteor.defer(() => {
Apps.triggerEvent(AppEvents.IPostLivechatRoomTransferred, {
type: LivechatTransferEventType.DEPARTMENT,
room: rid,
from: oldDepartmentId,
to: newDepartmentId,
});
});
return callbacks.run('livechat.afterForwardChatToDepartment', { rid, newDepartmentId, oldDepartmentId });
};

11
package-lock.json generated

@ -5240,9 +5240,9 @@
}
},
"@rocket.chat/apps-engine": {
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.16.0.tgz",
"integrity": "sha512-hUqctTnf2g4aD3zBC3ou9nsLdKvM88m4yz8hfon1xaMEu0KScByiVESOSH0AmzfEDnkUw9DECxhURA9gsrL2KQ==",
"version": "1.17.0-beta.3607",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.17.0-beta.3607.tgz",
"integrity": "sha512-g8GwN6k6ezBPXYO4q9QqZvrXXeWva3xC62fykQPMzDBSRBT+daofqJd7QOS/LzUUveaWUB3nROKuiUVuWb110A==",
"requires": {
"adm-zip": "^0.4.9",
"cryptiles": "^4.1.3",
@ -5253,11 +5253,6 @@
"uuid": "^3.2.1"
},
"dependencies": {
"adm-zip": {
"version": "0.4.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
"integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg=="
},
"typescript": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",

@ -128,7 +128,7 @@
"@nivo/heatmap": "^0.61.0",
"@nivo/line": "^0.61.1",
"@nivo/pie": "^0.61.1",
"@rocket.chat/apps-engine": "1.16.0",
"@rocket.chat/apps-engine": "1.17.0-beta.3607",
"@rocket.chat/css-in-js": "^0.14.0",
"@rocket.chat/fuselage": "^0.14.0",
"@rocket.chat/fuselage-hooks": "^0.14.0",

Loading…
Cancel
Save