diff --git a/packages/freshchat-api/package.json b/packages/freshchat-api/package.json index bccc5e1c..ba610c11 100644 --- a/packages/freshchat-api/package.json +++ b/packages/freshchat-api/package.json @@ -1,6 +1,6 @@ { "name": "@freshworks-jaya/freshchat-api", - "version": "0.7.33-beta-09", + "version": "0.7.34", "description": "Provides simple interface for accessing Freshchat's public APIs", "repository": "git@github.com:freshdesk/jaya-lib.git", "main": "lib/index.js", diff --git a/packages/marketplace-models/package.json b/packages/marketplace-models/package.json index ca2721c7..a8b1d910 100644 --- a/packages/marketplace-models/package.json +++ b/packages/marketplace-models/package.json @@ -1,6 +1,6 @@ { "name": "@freshworks-jaya/marketplace-models", - "version": "0.1.26", + "version": "0.1.27", "description": "Provides type definitions for models in marketplace product events", "repository": "git@github.com:freshdesk/jaya-lib.git", "main": "lib/index.js", diff --git a/packages/rule-engine/package.json b/packages/rule-engine/package.json index 6af34455..f1d357fb 100644 --- a/packages/rule-engine/package.json +++ b/packages/rule-engine/package.json @@ -1,6 +1,6 @@ { "name": "@freshworks-jaya/rule-engine", - "version": "0.17.25-beta-03", + "version": "0.17.26", "description": "Provides methods to process rules in product events in marketplace app", "repository": "git@github.com:freshdesk/jaya-lib.git", "main": "lib/index.js", @@ -44,9 +44,9 @@ "typescript": "^4.3.2" }, "dependencies": { - "@freshworks-jaya/freshchat-api": "0.7.33-beta-09", + "@freshworks-jaya/freshchat-api": "0.7.34", "@freshworks-jaya/kairos-api": "^0.1.5", - "@freshworks-jaya/marketplace-models": "0.1.26", + "@freshworks-jaya/marketplace-models": "0.1.27", "@freshworks-jaya/utilities": "^1.0.0", "@google-cloud/logging": "^9.3.1", "axios": "^0.21.4", diff --git a/packages/rule-engine/src/Utils.ts b/packages/rule-engine/src/Utils.ts index 62f0629d..ea71829d 100644 --- a/packages/rule-engine/src/Utils.ts +++ b/packages/rule-engine/src/Utils.ts @@ -125,9 +125,9 @@ export class Utils { if (messageParts && messageParts.length) { messageContent = messageParts - .filter((messagePart) => messagePart.text) + .filter((messagePart) => messagePart.text || messagePart.email) .map((messagePart) => { - return messagePart.text && messagePart.text.content; + return (messagePart.text && messagePart.text.content) || (messagePart.email && messagePart.email.subject); }) .join(' '); } @@ -136,7 +136,7 @@ export class Utils { } /** - * Gets a concatenated string of messageParts with type 'text'. + * Gets a concatenated string of messageParts with type 'email'. */ public static getMessagePartsEmailContent(messageParts: MessagePart[]): string { let messageContent = ''; @@ -213,7 +213,7 @@ export class Utils { } catch (err) { this.log(productEventPayload, integrations, ErrorCodes.DynamicPlaceholder, { dynamicPlaceholderKey, - error: err, + error: err as AnyJson, }); } } diff --git a/packages/rule-engine/src/recommended/actions/send-email-anyone.ts b/packages/rule-engine/src/recommended/actions/send-email-anyone.ts index 6d44b0c2..43577e24 100644 --- a/packages/rule-engine/src/recommended/actions/send-email-anyone.ts +++ b/packages/rule-engine/src/recommended/actions/send-email-anyone.ts @@ -62,7 +62,7 @@ export default async ( accountId: appId, from: { email: 'no-reply@freshchat.com', - name: 'Freshchat Automations', + name: 'Automated response', }, html: emailParams.body, subject: emailParams.subject, diff --git a/packages/rule-engine/src/recommended/actions/send-email-user.ts b/packages/rule-engine/src/recommended/actions/send-email-user.ts index 9ab51f82..1c995422 100644 --- a/packages/rule-engine/src/recommended/actions/send-email-user.ts +++ b/packages/rule-engine/src/recommended/actions/send-email-user.ts @@ -59,7 +59,7 @@ export default async ( accountId: appId, from: { email: 'no-reply@freshchat.com', - name: 'Freshchat Automations', + name: 'Automated response', }, html: conversationHtml, subject: emailSubject, diff --git a/packages/rule-engine/src/recommended/conditions/email-body.ts b/packages/rule-engine/src/recommended/conditions/email-body.ts index 32bbe136..2646400e 100644 --- a/packages/rule-engine/src/recommended/conditions/email-body.ts +++ b/packages/rule-engine/src/recommended/conditions/email-body.ts @@ -14,7 +14,7 @@ export default ( return Utils.evaluateCondition( condition.operator, - Utils.getMessagePartsEmailContent((modelProperties.messages && modelProperties.messages[0].message_parts) || []), + Utils.getMessagePartsEmailContent((modelProperties.messages && modelProperties.messages[0]?.message_parts) || []), condition.value as string, integrations, options, diff --git a/packages/rule-engine/src/recommended/dynamic-placeholders/transcript-paytm-conv-since-last-resolve-html.ts b/packages/rule-engine/src/recommended/dynamic-placeholders/transcript-paytm-conv-since-last-resolve-html.ts new file mode 100644 index 00000000..cad94b68 --- /dev/null +++ b/packages/rule-engine/src/recommended/dynamic-placeholders/transcript-paytm-conv-since-last-resolve-html.ts @@ -0,0 +1,64 @@ +import { ProductEventPayload } from '@freshworks-jaya/marketplace-models'; +import Freshchat from '@freshworks-jaya/freshchat-api'; +import { Integrations, RuleEngineOptions } from '../../models/rule-engine'; +import { Utils } from '../../Utils'; +import { ErrorCodes, ErrorTypes } from '../../models/error-codes'; +import { LogSeverity } from '../../services/GoogleCloudLogging'; +import Constants from '../Constants'; + +export default ( + productEventPayload: ProductEventPayload, + integrations: Integrations, + options: RuleEngineOptions, + ruleAlias: string, +): Promise => { + const freshchatApiUrl = integrations.freshchatv2.url; + const freshchatApiToken = integrations.freshchatv2.token; + const freshchat = new Freshchat(freshchatApiUrl, freshchatApiToken, ruleAlias); + const modelProperties = productEventPayload.data.conversation || productEventPayload.data.message; + + return freshchat + .getConversationTranscript( + `https://${productEventPayload.domain}`, + modelProperties.app_id, + modelProperties.conversation_id, + { + isFetchUntilLastResolve: true, + isIncludeFreshchatLink: false, + messagesLimit: options.isUseStaticIP + ? Constants.MAX_MESSAGES_TRANSCRIPT_STATIC_IP + : Constants.MAX_MESSAGES_TRANSCRIPT, + output: 'paytm_html', + timezoneOffset: integrations.timezoneOffset, + }, + { + isExcludePrivate: true, + isExcludeSystem: true, + }, + ) + .then((transcript) => Promise.resolve(transcript)) + .catch((err) => { + Utils.log( + productEventPayload, + integrations, + ErrorCodes.FreshchatPlaceholder, + { + error: { + err, + payload: { + freshchatApiToken, + options: { + messagesLimit: options.isUseStaticIP + ? Constants.MAX_MESSAGES_TRANSCRIPT_STATIC_IP + : Constants.MAX_MESSAGES_TRANSCRIPT, + timezoneOffset: integrations.timezoneOffset, + }, + }, + }, + errorType: ErrorTypes.TranscriptLastResolveHtml, + }, + LogSeverity.ERROR, + ); + return Promise.reject(); + }); +}; diff --git a/packages/rule-engine/src/recommended/index.ts b/packages/rule-engine/src/recommended/index.ts index 1c0575b0..9da5de3b 100644 --- a/packages/rule-engine/src/recommended/index.ts +++ b/packages/rule-engine/src/recommended/index.ts @@ -99,6 +99,7 @@ import dynamicPlaceholderTranscriptConvEntireText from './dynamic-placeholders/t import dynamicPlaceholderTranscriptConvEntireIncludesPrivateSystemText from './dynamic-placeholders/transcript-conv-entire-includes-private-system-text'; import dynamicPlaceholderTranscriptConvSinceLastResolveText from './dynamic-placeholders/transcript-conv-since-last-resolve-text'; import dynamicPlaceholderTranscriptConvSinceLastResolveIncludesPrivateSystemText from './dynamic-placeholders/transcript-conv-since-last-resolve-includes-private-system-text'; +import dynamicPlaceholderTranscriptPaytmConvSinceLastResolveHtml from './dynamic-placeholders/transcript-paytm-conv-since-last-resolve-html'; const recommendedPlugins: RulePlugin[] = [ { @@ -161,6 +162,7 @@ const recommendedPlugins: RulePlugin[] = [ dynamicPlaceholderTranscriptConvSinceLastResolveIncludesPrivateSystemText, 'transcript.conv_since_last_resolve.text': dynamicPlaceholderTranscriptConvSinceLastResolveText, 'transcript.paytm_conv_entire.html': dynamicPlaceholderTranscriptPaytmConvEntireHtml, + 'transcript.paytm_conv_since_last_resolve.html': dynamicPlaceholderTranscriptPaytmConvSinceLastResolveHtml, }, operators: { [ConditionOperator.StartsWith]: operatorStartsWith,