http://goo-ai.vip/api/process 注意:必须为异步请求,收到值时根据结果修改流程状态
POST
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
question | 是 | string | 对方(债务人)说的话 1、max-lenght:300字 |
userProp | 是 | object | 用户参数 |
chatHistory | 是 | array | 历史聊天记录 1、暂时先传历史2轮记录,后期可调整; 2、需要传递客服实际回复的内容。 |
questionRole | 是 | string | 对方角色(债务人或其亲属、朋友等) |
answerRole | 是 | string | 客服角色(如调解专员) |
employeeId | 否 | string | 员工编号(如”160101“,用于调用私有话术库。不传则默认线上话术库) |
process | 是 | DesideProcess | 决策流程信息 |
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
userName | 是 | string | 债务人称呼 |
delayDays | 是 | number | 逾期天数 |
debt | 是 | number | 债务金额 |
proxyName | 否 | string | 委托授权方,也叫项目(不传则不过滤该参数) |
product | 否 | string | 产品名称(不传则不过滤该参数) |
interest | 否 | number | 利息 |
rates | 否 | number | 利息可减免比例 |
character | 否 | string | 债务人性格 |
gender | 否 | string | 性别 |
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
processEnum | 是 | ProcessEnum | 决策流程Enum(如下定义) |
count | 是 | number | 节点轮数 |
export enum ProcessEnum {
start=0, whyDebt=1, repayWilling=2, repayAbility=3, getResult=4
}
1、需要维护当前流程状态(包含当前所在节点以及对应的对话轮数),见DesideProcess
2、每次请求流式接口(docs)都需要带上process字段,开始默认节点为 start(0)。
x
//起始状态:processEnum为start, start只需要一轮,所以初始值count直接为maxCount(maxCount表示点击的最多对话轮数,每一轮对话后count会+1)
let processObject:DesideProcess = {
processEnum:ProcessEnum.start,
count:maxCount
}
const params = {
question,
userProp,
chatHistory: newHistoryQ,
questionRole,
answerRole,
employeeId: getEmployeeId(),
process: isProcess?process:undefined
}
//isProcess为1,则开启决策流程
if(isProcess == 1){
//start状态时,不需要请求process接口,自动往下一流程节点走。
fetch("/api/process", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(params)
}).then(async (response) => {
if(response.status == 200){
const data = response.body;
if (data) {
const reader = data.getReader();
const decoder = new TextDecoder();
const { value } = await reader.read();
const content = decoder.decode(value);
setOutput(output + "\n"+content);
const json = JSON.parse(content);
if(json && json.process && json.value){
handleProcess(json.process, json.value);
}
}
}
});
}
//更新决策流程节点信息
function handleProcess(curProcess:number, curValue:string) {
if (process.processEnum > ProcessEnum.getResult){
process.processEnum = ProcessEnum.getResult;
return;
}
//如果curValue的结果为”是“(说明已经获取到对应节点的信息),或者已超过节点最大对话轮数,则进入下一节点。
if (process.count >= maxCount || (curValue == "是")){
setProcess({
processEnum:process.processEnum + (process.processEnum==ProcessEnum.getResult?0:1),
count:0,
})
} else {
//否则当前节点的对话轮数+1
const newCount = process.count+1;
setProcess({
processEnum:process.processEnum,
count:newCount,
})
}
}
xxxxxxxxxx
{
"process":"1-0",
"question":"债务人是否说明未还款原因?",
"value": "是",
"detail": "债务人在对话中提到了未还款的原因,需要进一步分析原因是否合理以及是否有解决方案。"
}
//根据以上value,判断是否直接进入下一流程。