From 8b66ed58002e941b6a4e6800a6d49e352b1b98c7 Mon Sep 17 00:00:00 2001 From: Thassio Victor Date: Thu, 16 Sep 2021 09:54:42 -0300 Subject: [PATCH] [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 --- app/apps/server/bridges/livechat.ts | 14 ++++++++++++++ app/livechat/server/lib/Livechat.js | 14 ++++++++++++++ package-lock.json | 6 +++--- package.json | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/apps/server/bridges/livechat.ts b/app/apps/server/bridges/livechat.ts index 0ae171c3912..551edac89fe 100644 --- a/app/apps/server/bridges/livechat.ts +++ b/app/apps/server/bridges/livechat.ts @@ -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> { + 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 { this.orch.debugLog(`The App ${ appId } is setting livechat visitor's custom fields.`); diff --git a/app/livechat/server/lib/Livechat.js b/app/livechat/server/lib/Livechat.js index e6a9022421c..9e89217620a 100644 --- a/app/livechat/server/lib/Livechat.js +++ b/app/livechat/server/lib/Livechat.js @@ -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); diff --git a/package-lock.json b/package-lock.json index 70f4e8ea17b..059495a304b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 6ce9a4d301c..0a16ff088a3 100644 --- a/package.json +++ b/package.json @@ -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",