feat(CustomerDetail): 添加对客户扩展字段的处理逻辑
支持处理两种不同格式的表单数据:基础信息+additional_info格式和customerExpandFieldMap格式。当表单数据包含customerExpandFieldMap时,会解析其中的扩展字段并根据不同类型(单选、多选、文本等)提取答案,组合到最终的分析文本中。
This commit is contained in:
@@ -190,47 +190,94 @@ const startBasicAnalysis = async () => {
|
|||||||
let formInfoText = '暂无表单信息';
|
let formInfoText = '暂无表单信息';
|
||||||
|
|
||||||
if (Object.keys(formData).length > 0) {
|
if (Object.keys(formData).length > 0) {
|
||||||
const basicInfo = [];
|
console.log(888888,formData);
|
||||||
const additionalInfo = [];
|
const allInfo = [];
|
||||||
|
|
||||||
// 处理基础信息字段
|
// 处理第一种格式:基础信息和additional_info
|
||||||
const basicFields = {
|
if (formData.name || formData.mobile || formData.additional_info) {
|
||||||
name: '姓名',
|
const basicInfo = [];
|
||||||
mobile: '手机号',
|
const additionalInfo = [];
|
||||||
occupation: '职业',
|
|
||||||
territory: '地区',
|
// 处理基础信息字段
|
||||||
child_name: '孩子姓名',
|
const basicFields = {
|
||||||
child_gender: '孩子性别',
|
name: '姓名',
|
||||||
child_education: '孩子教育阶段',
|
mobile: '手机号',
|
||||||
child_relation: '与孩子关系'
|
occupation: '职业',
|
||||||
};
|
territory: '地区',
|
||||||
|
child_name: '孩子姓名',
|
||||||
Object.entries(basicFields).forEach(([key, label]) => {
|
child_gender: '孩子性别',
|
||||||
if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') {
|
child_education: '孩子教育阶段',
|
||||||
basicInfo.push(`${label}: ${formData[key]}`);
|
child_relation: '与孩子关系'
|
||||||
}
|
};
|
||||||
});
|
|
||||||
|
Object.entries(basicFields).forEach(([key, label]) => {
|
||||||
// 处理 additional_info 数组
|
if (formData[key] && formData[key] !== '暂无' && formData[key] !== '') {
|
||||||
if (formData.additional_info && Array.isArray(formData.additional_info)) {
|
basicInfo.push(`${label}: ${formData[key]}`);
|
||||||
formData.additional_info.forEach(item => {
|
|
||||||
if (item.topic && item.answer) {
|
|
||||||
additionalInfo.push(`${item.topic}\n答案: ${item.answer}`);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 处理 additional_info 数组
|
||||||
|
if (formData.additional_info && Array.isArray(formData.additional_info)) {
|
||||||
|
formData.additional_info.forEach(item => {
|
||||||
|
if (item.topic && item.answer) {
|
||||||
|
additionalInfo.push(`${item.topic}\n答案: ${item.answer}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加基础信息
|
||||||
|
if (basicInfo.length > 0) {
|
||||||
|
allInfo.push('=== 基础信息 ===');
|
||||||
|
allInfo.push(...basicInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加问卷信息
|
||||||
|
if (additionalInfo.length > 0) {
|
||||||
|
allInfo.push('\n=== 问卷信息 ===');
|
||||||
|
allInfo.push(...additionalInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 组合所有信息
|
// 处理第二种格式:customerExpandFieldMap
|
||||||
const allInfo = [];
|
if (formData.customerExpandFieldMap) {
|
||||||
if (basicInfo.length > 0) {
|
const expandInfo = [];
|
||||||
allInfo.push('=== 基础信息 ===');
|
const map = formData.customerExpandFieldMap;
|
||||||
allInfo.push(...basicInfo);
|
|
||||||
|
// 处理所有expand字段
|
||||||
|
Object.entries(map).forEach(([key, value]) => {
|
||||||
|
// 跳过原型链上的属性
|
||||||
|
if (!map.hasOwnProperty(key)) return;
|
||||||
|
|
||||||
|
// 如果是对象类型(包含key和typeCode的字段)
|
||||||
|
if (value && typeof value === 'object' && value.key) {
|
||||||
|
const question = value.key;
|
||||||
|
let answer = '';
|
||||||
|
|
||||||
|
// 根据不同的类型处理答案
|
||||||
|
if (value.typeCode === 'SINGLE_SELECT' || value.typeCode === 'MULTIPLE_SELECT') {
|
||||||
|
if (value.expandValueList && value.expandValueList.length > 0) {
|
||||||
|
answer = value.expandValueList.map(item => item.itemName).join('、');
|
||||||
|
}
|
||||||
|
} else if (value.typeCode === 'TEXT' || value.typeCode === 'TEXTAREA' || value.typeCode === 'NUMBER') {
|
||||||
|
// 直接从formData中获取对应的expand值
|
||||||
|
answer = formData[key] || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只添加有答案的问题
|
||||||
|
if (answer && answer !== '暂无' && answer !== '') {
|
||||||
|
expandInfo.push(`${question}\n答案: ${answer}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 添加扩展信息
|
||||||
|
if (expandInfo.length > 0) {
|
||||||
|
if (allInfo.length > 0) allInfo.push('\n'); // 如果已有其他信息,添加分隔行
|
||||||
|
allInfo.push('=== 问卷详细信息 ===');
|
||||||
|
allInfo.push(...expandInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (additionalInfo.length > 0) {
|
|
||||||
allInfo.push('\n=== 问卷信息 ===');
|
|
||||||
allInfo.push(...additionalInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
formInfoText = allInfo.length > 0 ? allInfo.join('\n') : '暂无表单信息';
|
formInfoText = allInfo.length > 0 ? allInfo.join('\n') : '暂无表单信息';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,6 +308,8 @@ ${chatInfoText}
|
|||||||
${callData.length > 0 && callData[0].record_context ? callData[0].record_context : callInfoText}
|
${callData.length > 0 && callData[0].record_context ? callData[0].record_context : callInfoText}
|
||||||
|
|
||||||
请基于以上客户的表单信息、聊天记录和通话记录,分析客户的基本情况、背景信息和初步画像。`;
|
请基于以上客户的表单信息、聊天记录和通话记录,分析客户的基本情况、背景信息和初步画像。`;
|
||||||
|
|
||||||
|
console.log(888888,formInfoText);
|
||||||
try {
|
try {
|
||||||
await chatService_01.sendMessage(
|
await chatService_01.sendMessage(
|
||||||
query,
|
query,
|
||||||
|
|||||||
Reference in New Issue
Block a user