perf(WAI): 消息状态异步返回; 合并保存所有事件的原文

main
Lei OT 7 months ago
parent c40c742994
commit d1124f43bf

@ -2,13 +2,14 @@
const generateId = require('../../utils/generateId.util');
const { domain, name: domainName } = require('../../config').server;
const {second} = require('../../config').database;
const whatsappEvents = require('../emitter');
const createAsyncQueueProcessor = require('../emitter/queueProcessor');
const { callWebhook } = require('../webhook');
const { sessionStore } = require('..');
const { createWhatsApp } = require('../../core/baileys');
const { updateConnection, addCurrentConnection, resetConnection, getConnection } = require('../../services/connections.service');
const { getOutboundMessage, upsertOutboundMessage, createOutboundMessage } = require('../../services/outbound_messages.service');
const { getOutboundMessageByIdOrExternalId, upsertOutboundMessage, createOutboundMessage } = require('../../services/outbound_messages.service');
const { objectMapper, pick, isEmpty, omitEmpty } = require('../../utils/commons.util');
const { logger, getUserLogger } = require('../../utils/logger.util');
const { DbData, waiContentToDB, uploadMediaFile, ctxToSendBuilder, ctxToDB } = require('../../helper/wai.msg.helper');
@ -212,8 +213,9 @@ const setupMessageHandler = async () => {
const now = new Date(new Date().getTime() + 60 * 60 * 1000).toISOString();
const savedId = uniqueMsgId(messageData);
const targetUpsert = messageData.externalId ? { actionId: messageData.externalId } : { id: savedId };
const savedMsg = await getOutboundMessage(targetUpsert);
// const targetUpsert = messageData.externalId ? { actionId: messageData.externalId } : { id: savedId };
const targetUpsert = [{ actionId: messageData.externalId }, { id: savedId }];
const savedMsg = await getOutboundMessageByIdOrExternalId(targetUpsert);
const bixFields = pick(savedMsg, ['actionId', 'externalId']);
const savedTimeFields = pick(savedMsg, Object.values(timeField));
logger.info('message evt\n', eventName, messageData, savedMsg);
@ -229,9 +231,13 @@ const setupMessageHandler = async () => {
const pusher = { customerProfile_id: waiMessage.customerProfile?.id || '', customerProfile_name: waiMessage.customerProfile?.name || '' };
const record = objectMapper(waiMessage, { from: 'from', to: 'to', status: 'msg_status', type: 'msgtype' }, false);
const waiContentFieldsToDB = messageData.type ? waiContentToDB(messageData) : {};
// 是否空数据. 存储有数据的事件原文
const upsertMsgOrigin = !isEmpty(omitEmpty(waiContentFieldsToDB)) || isEmpty(savedMsg);
const msgOrigin = upsertMsgOrigin ? { message_origin: JSON.stringify(messageData) } : {};
// // 是否空数据. 存储有数据的事件原文
// const upsertMsgOrigin = !isEmpty(omitEmpty(waiContentFieldsToDB)) || isEmpty(savedMsg);
// const msgOrigin = upsertMsgOrigin ? { message_origin: JSON.stringify(messageData) } : {};
// 合并数据原文
const msgOriginObj = Object.assign({}, JSON.parse(savedMsg?.message_origin || '{}'), messageData);
const msgOrigin = { message_origin: JSON.stringify(msgOriginObj) };
if (isEmpty(savedMsg.IVADS_link) && ['image', 'sticker', 'audio', 'video', 'document'].includes(messageData.type)) {
// 存储文件
const filePath = messageData[messageData.type].filePath;

@ -5,14 +5,22 @@ const { domain, name } = require('../config').server;
const { objectMapper, pick, isEmpty } = require('../utils/commons.util');
const initModels = require('../models/init-models');
const Sequelize = db.sequelize;
const { sequelize: Sequelize, Op } = db;
// const Sequelize = db.sequelize;
const models = initModels(Sequelize);
const OutboundModelModel = models.outbound_messages;
const getOutboundMessage = async msg => {
const getOutboundMessageByIdOrExternalId = async whereOr => {
let whereCondition = {};
if (Array.isArray(whereOr) && whereOr.length > 0) {
whereCondition = { [Op.or]: whereOr };
} else {
whereCondition = whereOr;
}
const r = await OutboundModelModel.findOne({
where: msg,
where: whereCondition,
order: [['wamid', 'DESC']],
});
return r?.toJSON() || {};
};
@ -46,4 +54,4 @@ const upsertOutboundMessage = async (data, where = {}) => {
return instance.toJSON();
};
module.exports = { getOutboundMessage, createOutboundMessage, upsertOutboundMessage };
module.exports = { getOutboundMessageByIdOrExternalId, createOutboundMessage, upsertOutboundMessage };

Loading…
Cancel
Save