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,
+ },
+};