[NEW][APPS] Get livechat's room transcript via bridge method (#22985)

* Get livechat room messages via livechart bridge

* Fix indentation

* Add livechat room only filter

* Fix indentation

* Fix wrong import path to IMessage interface

* Adjustments based on linter hints

* Make message conversion a parallel operation

* Update Apps-Engine version

* Adjustments based on review comments

* Simplify retrieval of livechat room data

* Fix indentation

Co-authored-by: Douglas Gubert <douglas.gubert@gmail.com>
pull/22957/head^2
Thassio Victor 4 years ago committed by GitHub
parent 0ac3f330d8
commit 8b66ed5800
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      app/apps/server/bridges/livechat.ts
  2. 14
      app/livechat/server/lib/Livechat.js
  3. 6
      package-lock.json
  4. 2
      package.json

@ -8,6 +8,7 @@ import {
IDepartment,
} from '@rocket.chat/apps-engine/definition/livechat';
import { IUser } from '@rocket.chat/apps-engine/definition/users';
import { IMessage } from '@rocket.chat/apps-engine/definition/messages';
import { getRoom } from '../../../livechat/server/api/lib/livechat';
import { Livechat } from '../../../livechat/server/lib/Livechat';
@ -222,6 +223,19 @@ export class AppLivechatBridge extends LivechatBridge {
return LivechatDepartment.findEnabledWithAgents().map(boundConverter);
}
protected async _fetchLivechatRoomMessages(appId: string, roomId: string): Promise<Array<IMessage>> {
this.orch.debugLog(`The App ${ appId } is getting the transcript for livechat room ${ roomId }.`);
const messageConverter = this.orch.getConverters()?.get('messages');
if (!messageConverter) {
throw new Error('Could not get the message converter to process livechat room messages');
}
const boundMessageConverter = messageConverter.convertMessage.bind(messageConverter);
return Livechat.getRoomMessages({ rid: roomId }).map(boundMessageConverter);
}
protected async setCustomFields(data: { token: IVisitor['token']; key: string; value: string; overwrite: boolean }, appId: string): Promise<number> {
this.orch.debugLog(`The App ${ appId } is setting livechat visitor's custom fields.`);

@ -1096,6 +1096,20 @@ export const Livechat = {
return true;
},
getRoomMessages({ rid }) {
check(rid, String);
const isLivechat = Promise.await(Rooms.findByTypeInIds('l', [rid])).count();
if (!isLivechat) {
throw new Meteor.Error('invalid-room');
}
const ignoredMessageTypes = ['livechat_navigation_history', 'livechat_transcript_history', 'command', 'livechat-close', 'livechat-started', 'livechat_video_call'];
return Messages.findVisibleByRoomIdNotContainingTypes(rid, ignoredMessageTypes, { sort: { ts: 1 } }).fetch();
},
requestTranscript({ rid, email, subject, user }) {
check(rid, String);
check(email, String);

6
package-lock.json generated

@ -5282,9 +5282,9 @@
}
},
"@rocket.chat/apps-engine": {
"version": "1.28.0-alpha.5370",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.28.0-alpha.5370.tgz",
"integrity": "sha512-OGfjeX8cxPjreG34AioFCtEA6eJRRqoay6WddZ2goFxQjBVWQzwvmuzXKNZt/hclTjRZbBVu0yKscJhlW1ijug==",
"version": "1.28.0-alpha.5379",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.28.0-alpha.5379.tgz",
"integrity": "sha512-EaLK46AzhoKgJDo+frl83SmBGgcauLvz/2YKy8xBLOzhLQQYUY9IBSXDlC2B+sTMkEaefE+9wV4xA5F+q74FGg==",
"requires": {
"adm-zip": "^0.4.9",
"cryptiles": "^4.1.3",

@ -158,7 +158,7 @@
"@nivo/heatmap": "0.73.0",
"@nivo/line": "0.62.0",
"@nivo/pie": "0.73.0",
"@rocket.chat/apps-engine": "1.28.0-alpha.5370",
"@rocket.chat/apps-engine": "1.28.0-alpha.5379",
"@rocket.chat/css-in-js": "^0.29.0",
"@rocket.chat/emitter": "^0.29.0",
"@rocket.chat/fuselage": "^0.29.0",

Loading…
Cancel
Save