UNPKG

focus-product-extractor2

Version:

Extract product information from chat/order data

304 lines (294 loc) 9.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.InputAdapter = void 0; var _messageTypes = require("../constants/messageTypes.js"); /** * 输入适配器类,负责将原始输入数据转换为统一格式 */ class InputAdapter { /** * 解析输入数据 * @param {Object} input - 输入数据对象 * @returns {Array} 解析后的消息数组 */ parse(input) { // 基础参数校验 if (!input || typeof input !== 'object') { return []; } const { scene, rawData, platform, shopId } = input; if (!(rawData !== null && rawData !== void 0 && rawData.messages)) { return []; } // 订单场景暂不支持 if (scene === 'order') { console.log('TODO: scene:order类型的功能正在开发中'); return []; // if (!rawData.orderItems) { // return []; // } // return rawData.orderItems.map(order => ({...order, platform, shopId, scene})); } // 为每条消息添加平台和店铺信息 const processedMessages = rawData.messages.map(msg => ({ ...msg, platform, shopId })); // console.log('[InputAdapter] Processed messages:', processedMessages); return this._parseMessages(processedMessages, scene); } /** * 创建基础消息结构 * @private */ _createBaseMsg(msg, scene) { var _msg$message, _msg$message2; return { platform: msg.platform, shopId: msg.shopId, sender: msg.sender, timestamp: msg.timestamp, scene, messageType: (_msg$message = msg.message) === null || _msg$message === void 0 ? void 0 : _msg$message.type, messageSubType: (_msg$message2 = msg.message) === null || _msg$message2 === void 0 ? void 0 : _msg$message2.sub_type, ...this._extractIds(msg.message) }; } /** * 从消息中提取ID字段(skuId, spuId, orderId) * @private */ _extractIds(message) { if (!message) return {}; return { ...(message.sku_id && { skuId: message.sku_id }), ...(message.spu_id && { spuId: message.spu_id }), ...(message.order_id && { orderId: message.order_id }) }; } /** * 解析消息数组 * @private */ _parseMessages(messages, scene) { // console.log('[InputAdapter] Parsing messages, count:', messages.length); return messages.map(msg => { var _message$text, _message$file; const baseMsg = this._createBaseMsg(msg, scene); const message = msg.message || {}; // console.log('\n[InputAdapter] Processing message:', JSON.stringify(message)); // console.log('[InputAdapter] Processing message cardMsg:', JSON.stringify(message.card_msg)); // console.log('[InputAdapter] Processing message type:', message.sub_type); switch (message.sub_type) { case _messageTypes.MESSAGE_SUB_TYPES.TEXT: return { ...baseMsg, text: ((_message$text = message.text) === null || _message$text === void 0 ? void 0 : _message$text.content) || '' }; case _messageTypes.MESSAGE_SUB_TYPES.IMAGE: return this._handleImageMessage(baseMsg, message); case _messageTypes.MESSAGE_SUB_TYPES.VIDEO: return this._handleVideoMessage(baseMsg, message); case _messageTypes.MESSAGE_SUB_TYPES.CARD: return this._handleCardMessage(baseMsg, message); case _messageTypes.MESSAGE_SUB_TYPES.FILE: return { ...baseMsg, fileUrl: (_message$file = message.file) === null || _message$file === void 0 ? void 0 : _message$file.url }; case _messageTypes.MESSAGE_SUB_TYPES.BUYER_ENTER: return this._handleBuyerEnterMessage(baseMsg, message); case _messageTypes.MESSAGE_SUB_TYPES.TRANSFER_OUT: case _messageTypes.MESSAGE_SUB_TYPES.TRANSFER_IN: return this._handleTransferMessage(baseMsg, message); case _messageTypes.MESSAGE_SUB_TYPES.VOICE: return this._handleVoiceMessage(baseMsg, message); default: return baseMsg; } }); } _handleImageMessage(baseMsg, message) { var _message$image, _message$image2, _message$image3; return { ...baseMsg, imageUrl: (_message$image = message.image) === null || _message$image === void 0 ? void 0 : _message$image.url, imageSize: { width: (_message$image2 = message.image) === null || _message$image2 === void 0 ? void 0 : _message$image2.width, height: (_message$image3 = message.image) === null || _message$image3 === void 0 ? void 0 : _message$image3.height } }; } _handleVideoMessage(baseMsg, message) { var _message$video, _message$video2, _message$video3; return { ...baseMsg, videoUrl: (_message$video = message.video) === null || _message$video === void 0 ? void 0 : _message$video.url, videoSize: { width: (_message$video2 = message.video) === null || _message$video2 === void 0 ? void 0 : _message$video2.width, height: (_message$video3 = message.video) === null || _message$video3 === void 0 ? void 0 : _message$video3.height } }; } _handleCardMessage(baseMsg, message) { const cardData = this._parseCardMessage(message.card_msg); const result = { ...baseMsg, cardData }; if (cardData !== null && cardData !== void 0 && cardData.some(item => item.type === _messageTypes.CARD_MESSAGE_TYPES.WARE)) { return { ...result, ...this._extractIds(message) }; } return result; } _handleBuyerEnterMessage(baseMsg, message) { const enterMsg = message.buyer_enter_msg || {}; return { ...baseMsg, from: enterMsg.from, ...this._extractIds(enterMsg) }; } _handleTransferMessage(baseMsg, message) { const transferInfo = message.transfer_out || message.transfer_in || {}; return { ...baseMsg, transferInfo: { from: transferInfo.from, ...(transferInfo.from_spin && { fromSpin: transferInfo.from_spin }), ...(transferInfo.to_spin && { toSpin: transferInfo.to_spin }), ...(transferInfo.pin && { pin: transferInfo.pin }), orderId: transferInfo.order_id, platGoodsId: transferInfo.plat_goods_id } }; } _handleVoiceMessage(baseMsg, message) { var _message$voice, _message$voice2; return { ...baseMsg, voiceUrl: (_message$voice = message.voice) === null || _message$voice === void 0 ? void 0 : _message$voice.url, duration: (_message$voice2 = message.voice) === null || _message$voice2 === void 0 ? void 0 : _message$voice2.duration }; } /** * 解析卡片消息 * @private */ _parseCardMessage(cardMsg) { if (!(cardMsg !== null && cardMsg !== void 0 && cardMsg.data)) { return null; } // console.log('[InputAdapter] Parsing card message:', cardMsg); return cardMsg.data.flatMap(item => { // 1标题卡片 if (item.header) { return { type: _messageTypes.CARD_MESSAGE_TYPES.HEADER, icon: item.header.icon, title: item.header.title }; } // 2文本内容卡片 if (item.content) { return { type: _messageTypes.CARD_MESSAGE_TYPES.CONTENT, icon: item.content.icon, title: item.content.title, content: item.content.content }; } // 3图片卡片 if (item.img) { return { type: _messageTypes.CARD_MESSAGE_TYPES.IMAGE, url: item.img.url }; } // 4商品卡片 if (item.wares) { return item.wares.list.map(ware => ({ type: _messageTypes.CARD_MESSAGE_TYPES.WARE, title: ware.title, desc: ware.desc, price: ware.price, num: ware.num, imageUrl: ware.image_url, wareUrl: ware.ware_url })); } // 5订单卡片 if (item.orders) { return item.orders.list.map(order => ({ type: _messageTypes.CARD_MESSAGE_TYPES.ORDER, title: order.title, desc: order.desc, extraInfo: order.extra_info, price: order.price, num: order.num, imageUrl: order.image_url, wareUrl: order.ware_url })); } //6 信息列表卡片 if (item.infos) { return item.infos.list.map(info => ({ type: _messageTypes.CARD_MESSAGE_TYPES.INFO, title: info.title, desc: info.desc })); } // 进度卡片 if (item.progress) { return item.progress.list.map(progress => ({ type: _messageTypes.CARD_MESSAGE_TYPES.PROGRESS, title: progress.title, icon: progress.icon, color: progress.color, desc: progress.desc, tip: progress.tip })); } // 优惠券卡片 if (item.coupons) { return item.coupons.list.map(coupon => ({ type: _messageTypes.CARD_MESSAGE_TYPES.COUPON, name: coupon.name, discount: coupon.discount, quota: coupon.quota, tag: coupon.tag, beginTime: coupon.begin, endTime: coupon.end, imageUrl: coupon.image_url, status: coupon.status })); } return null; }).filter(Boolean); } } exports.InputAdapter = InputAdapter; var _default = exports.default = new InputAdapter();