我们在线索部分已经实现了线索的录入和线索的跟进,尝试着用agent的能力去做智能评估。但问题是云开发本质是一种serverless无服务架构,他要求结果即刻返回。agent需要一系列的推导,很容易就超时了,目前这种集成是无法顺畅完成的,那就等待技术有进一步发展再引入。
1 创建数据模型
2 创建API
/**
* 线索转化 API(CloudBase 低码平台服务端函数)
* 入参:leadId(线索标识)、summary(线索摘要)、type(客户类型)
* 逻辑:
* 1) 根据 leadId 查询 crm_leads 获取基础信息(姓名、手机号、微信等)
* 2) 检查 customers 是否已存在同一线索的客户,避免重复创建
* 3) 创建 customers 记录,写入 name/phone/wechat/type/summary/lead_id
* 4) 返回创建结果(或已存在的客户信息)
*
* 参考:
* - 数据模型 CRUD:wedaCreateV2 / wedaGetItemV2 / wedaGetRecordsV2
* - 复杂查询:wedaGetRecordsV2 + filter.where
*
* 提示:此函数应部署在 CloudBase 低码平台的「业务逻辑」/「服务」中,
* 在平台运行时通过 context.callModel 访问数据模型。
*/
module.exports = async function(params, context){
const p = params ||{}
const leadId = p.leadId
const summary = typeof p.summary ==='string' ? p.summary :''
const type= p.type
// 参数校验
if(!leadId){
return{ code: 400, message: '缺少参数:leadId'}
}
if(!type){
return{ code: 400, message: '缺少参数:type(客户类型)'}
}
try {
// 1) 查询线索基础信息
const leadQuery = await context.callModel({
dataSourceName: 'crm_leads',
methodName: 'wedaGetRecordsV2',
params: {
// 仅通过 _id 精确匹配
filter: { where: { _id: {$eq: leadId }}},
select: {$master:true},
},
fetchOption: { useAdmin: true},
})
// 解析 records 字段(与平台实际返回一致)
let leadRecords = leadQuery && leadQuery.records
let lead = Array.isArray(leadRecords) ? leadRecords[0]: null
if(!lead){
return{ code: 404, message: `未找到线索:${leadId}`}
}
// 2) 去重:检查是否已存在由该线索转化的客户
const existQuery = await context.callModel({

dataSourceName: 'customers',
methodName: 'wedaGetRecordsV2',
params: {
// 仅通过 lead_id 精确匹配
filter: { where: { lead_id: {$eq: leadId }}},
select: {$master:true},
},
fetchOption: { useAdmin: true},
})
const existRecordsArr = existQuery && existQuery.records
const existRecords = Array.isArray(existRecordsArr) ? existRecordsArr :[]
if(existRecords.length >0){
const existed = existRecords[0]
return{
code: 200,
message: '客户已存在(按 lead_id 去重)',
data: { existed: true, id: existed._id, customer: existed },
}
}
// 3) 组装客户数据
const customerData ={
name: lead.name ||'未命名客户',
phone: lead.phone ||'',
wechat: lead.wechat ||'',
type: type,
summary,
// 多对一:直接写入线索记录 id;如平台要求引用对象结构,请按实际模型调整
lead_id: { _id: leadId },
}
// 4) 创建客户记录
const createRes = await context.callModel({
dataSourceName: 'customers',
methodName: 'wedaCreateV2',
params: { data: customerData },
fetchOption: { useAdmin: true},
})
let newId = createRes &&(createRes.id || createRes.Id )
try {
await context.callModel({
dataSourceName: 'crm_leads',
methodName: 'wedaUpdateV2',
params: {
filter: { where: { _id: {$eq: leadId }}},
data: { status: '5'},
},
fetchOption: { useAdmin: true},
})
} catch (e){}
return{
code: 200,
message: '线索转化成功',
data: { id: newId, customer: { id: newId, ...customerData }},
}
} catch (err){
return{ code: 500, message: '线索转化失败', error: String(err && err.message ? err.message : err)}
}
}