diff --git a/src/productBoard/controller.ts b/src/productBoard/controller.ts index 3a89077e..5d86c6d4 100644 --- a/src/productBoard/controller.ts +++ b/src/productBoard/controller.ts @@ -1,8 +1,11 @@ import { debugProductBoard, debugRequest } from '../debuggers'; +import { Integrations } from '../models'; import { getConfig, getEnv, sendRequest } from '../utils'; -import { Conversations } from './models'; +import { ALL_MODELS, Conversations } from './models'; const init = async app => { + const mailIntegrations = ['office365', 'yahoo', 'outlook', 'imap', 'exchange', 'gmail']; + app.get('/productBoard/note', async (req, res) => { const { erxesApiId } = req.query; try { @@ -20,11 +23,39 @@ const init = async app => { const PRODUCT_BOARD_TOKEN = await getConfig('PRODUCT_BOARD_TOKEN'); const MAIN_APP_DOMAIN = getEnv({ name: 'MAIN_APP_DOMAIN' }); - const { customer, messages, tags, erxesApiConversationId, user } = req.body; - + const { customer, tags, erxesApiConversationId, user, integrationId } = req.body; + let { messages } = req.body; let content = ''; + let title = ''; + + const integration = await Integrations.findOne({ erxesApiId: integrationId }).lean(); + + let origin = messages[messages.length - 1].content; + + if (integration) { + if (integration.kind !== 'facebook-post') { + const conversations = ALL_MODELS[integration.kind].conversations; + const conversation = await conversations.findOne({ erxesApiId: erxesApiConversationId }).lean(); + + const conversationMessages = ALL_MODELS[integration.kind].conversationMessages; + messages = await conversationMessages.find({ conversationId: conversation._id }); + } else { + const post = await ALL_MODELS['facebook-post'].posts.findOne({ erxesApiId: integrationId }).lean(); + + const comments = await ALL_MODELS['facebook-post'].comments.find({ postId: post._id }); + + for (const comment of comments) { + const commentDate = new Date(comment.timestamp).toUTCString(); + content = content.concat(`${commentDate}

${comment.content}


`); + } + origin = post.postId; + title = post.content; + } + } for (const message of messages) { + title = messages[0].content; + const messageDate = new Date(message.createdAt).toUTCString(); if (message.customerId) { @@ -38,9 +69,13 @@ const init = async app => { content = content.concat(`${attachment.name}
`); } } - } - const origin = messages[messages.length - 1].content; + if (mailIntegrations.some(i => integration.kind === i)) { + title = messages[0].subject; + content = content.concat(`${message.from[0]} ${messageDate}

${message.body}


`); + origin = messages[messages.length - 1].subject; + } + } try { const result = await sendRequest({ @@ -50,7 +85,7 @@ const init = async app => { authorization: `Bearer ${PRODUCT_BOARD_TOKEN}`, }, body: { - title: messages[0].content, + title, content, customer_email: customer.primaryEmail, display_url: `${MAIN_APP_DOMAIN}/inbox/?_id=${erxesApiConversationId}`, diff --git a/src/productBoard/models.ts b/src/productBoard/models.ts index aa0afeb0..73cec3b8 100644 --- a/src/productBoard/models.ts +++ b/src/productBoard/models.ts @@ -1,6 +1,56 @@ import { Document, Model, model, Schema } from 'mongoose'; +import { + Comments, + ConversationMessages as FacebookMessengerConversationMessages, + Conversations as FacebookMessengerConversations, + Customers as FacebookMessengerCustomers, + Posts, +} from '../facebook/models'; import { field } from '../models/utils'; - +import { + NylasExchangeConversationMessages, + NylasExchangeConversations, + NylasExchangeCustomers, + NylasGmailConversationMessages, + NylasGmailConversations, + NylasGmailCustomers, + NylasImapConversationMessages, + NylasImapConversations, + NylasImapCustomers, + NylasOffice365ConversationMessages, + NylasOffice365Conversations, + NylasOffice365Customers, + NylasOutlookConversationMessages, + NylasOutlookConversations, + NylasOutlookCustomers, + NylasYahooConversationMessages, + NylasYahooConversations, + NylasYahooCustomers, +} from '../nylas/models'; +import { + SmoochLineConversationMessages, + SmoochLineConversations, + SmoochLineCustomers, + SmoochTelegramConversationMessages, + SmoochTelegramConversations, + SmoochTelegramCustomers, + SmoochTwilioConversationMessages, + SmoochTwilioConversations, + SmoochTwilioCustomers, + SmoochViberConversationMessages, + SmoochViberConversations, + SmoochViberCustomers, +} from '../smooch/models'; +import { + ConversationMessages as TwitterConversationMessages, + Conversations as TwitterConversations, + Customers as TwitterCustomers, +} from '../twitter/models'; +import { + ConversationMessages as WhatsAppConversationMessages, + Conversations as WhatsAppConversations, + Customers as WhatsAppCustomers, +} from '../whatsapp/models'; export interface IConversation { erxesApiId?: string; timestamp: Date; @@ -45,3 +95,75 @@ export const Conversations = model( 'conversations_productboard', conversationSchema, ); + +export const ALL_MODELS = { + gmail: { + customers: NylasGmailCustomers, + conversations: NylasGmailConversations, + conversationMessages: NylasGmailConversationMessages, + }, + exchange: { + customers: NylasExchangeCustomers, + conversations: NylasExchangeConversations, + conversationMessages: NylasExchangeConversationMessages, + }, + imap: { + customers: NylasImapCustomers, + conversations: NylasImapConversations, + conversationMessages: NylasImapConversationMessages, + }, + outlook: { + customers: NylasOutlookCustomers, + conversations: NylasOutlookConversations, + conversationMessages: NylasOutlookConversationMessages, + }, + yahoo: { + customers: NylasYahooCustomers, + conversations: NylasYahooConversations, + conversationMessages: NylasYahooConversationMessages, + }, + office365: { + customers: NylasOffice365Customers, + conversations: NylasOffice365Conversations, + conversationMessages: NylasOffice365ConversationMessages, + }, + telegram: { + customers: SmoochTelegramCustomers, + conversations: SmoochTelegramConversations, + conversationMessages: SmoochTelegramConversationMessages, + }, + viber: { + customers: SmoochViberCustomers, + conversations: SmoochViberConversations, + conversationMessages: SmoochViberConversationMessages, + }, + line: { + customers: SmoochLineCustomers, + conversations: SmoochLineConversations, + conversationMessages: SmoochLineConversationMessages, + }, + twilio: { + customers: SmoochTwilioCustomers, + conversations: SmoochTwilioConversations, + conversationMessages: SmoochTwilioConversationMessages, + }, + whatsapp: { + customers: WhatsAppCustomers, + conversations: WhatsAppConversations, + conversationMessages: WhatsAppConversationMessages, + }, + twitter: { + customers: TwitterCustomers, + conversations: TwitterConversations, + conversationMessages: TwitterConversationMessages, + }, + 'facebook-messenger': { + customers: FacebookMessengerCustomers, + conversations: FacebookMessengerConversations, + conversationMessages: FacebookMessengerConversationMessages, + }, + 'facebook-post': { + posts: Posts, + comments: Comments, + }, +};