2026-07-27 11:28:33 +08:00

276 lines
6.8 KiB
JavaScript

const api = require("../../api");
const youcanProgramId = "progMGvreZ_USJ3EZSgohv0IPp1P1J8SGWMe";
const recommendProgramId = "progWDvPKtYhYNp-4iRQqK4VENpgIdYqzxxI";
let db = null;
//回调数据解析
/**
*
* @param {*} event
* return
* chat_archive_audit_approved 客户同意进行聊天内容存档事件回调
* conversation_new_message 产生会话回调通知
* auth_knowledge_base 知识集管理回调
* hit_keyword 命中关键词规则通知
* chat_archive_export_finished 会话内容导出完成通知
*/
exports.main = async (event, mongodb) => {
db = mongodb;
switch (event.type) {
case "doAsyncJob":
return await doAsyncJob(event);
case "getSessionArchive":
return await this.getSessionArchive(event);
case "getRecommendResult":
return await this.getRecommendResult(event);
case "getSummaryResult":
return await this.getSummaryResult(event);
case "getEmotionResult":
return await this.getEmotionResult(event);
case "createEmotionTask":
return await this.createEmotionTask(event);
case "createRecommendTask":
return await createRecommendTask(event);
case "createSummaryTask":
return await createSummaryTask(event);
case "getDocumentList":
return await getDocumentList(event);
}
};
async function getDocumentList(event) {
const { corpId } = event;
const { success, data } = await syncCallProgram({
program_id: youcanProgramId,
ability_id: "document_list",
corpId,
});
const { kb_info_list, errcode } = data;
if (!success) return { success: false, message: "获取文档列表失败" };
if (errcode !== 0)
return { success: false, message: "获取文档列表失败", errcode };
return { success: true, message: "获取文档列表成功", data: kb_info_list };
}
async function doAsyncJob(event) {
const { notify_id, corpId } = event;
const params = {};
const { errcode, errmsg, response_data } = await syncCallProgram({
program_id: youcanProgramId,
ability_id: "do_async_job",
notify_id,
params,
corpId,
});
if (errcode !== 0) {
console.log("doAsyncJob调用失败", errcode, errmsg);
return {
success: false,
message: "调用失败",
errcode,
errmsg,
};
} else {
const data = JSON.parse(response_data);
if (data.event_type === "conversation_new_message") {
// 产生会话
}
}
}
// 获取会话存档数据
exports.getSessionArchive = async (event) => {
const { corpId, cursor, token, limit = 200 } = event;
let params = {
limit,
};
if (cursor) {
params.cursor = cursor;
}
if (token) {
params.token = token;
}
const { success, data } = await syncCallProgram({
program_id: youcanProgramId,
ability_id: "sync_msg",
params,
corpId,
});
return success ? data : {};
};
async function createTask(event) {
const {
corpId,
createTaskParams,
createTaskabilityId = "",
resultAbilityId = "",
} = event;
const res = await syncCallProgram({
program_id: youcanProgramId,
ability_id: createTaskabilityId,
params: createTaskParams,
corpId,
});
if (!res.success) {
return {
success: false,
message: "创建任务失败",
errcode: res.errcode,
errmsg: res.errmsg,
};
}
const { errcode, jobid } = res.data;
if (errcode !== 0) {
return {
success: false,
message: "创建任务失败",
errcode,
};
} else {
return await getTaskResult({ corpId, jobid, resultAbilityId });
}
}
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function getTaskResult(event) {
await delay(1000);
const { corpId, jobid, resultAbilityId } = event;
const params = {
jobid,
};
let { data } = await syncCallProgram({
program_id: youcanProgramId,
ability_id: resultAbilityId,
params,
corpId,
});
const { errcode, errmsg, status, ...rest } = data;
if (errcode !== 0) {
return {
success: false,
message: "获取任务结果失败",
errcode,
errmsg,
};
}
if (status === 0) {
await delay(1000);
return await getTaskResult(event);
} else if (status === 1) {
return {
success: true,
message: "获取任务结果成功",
...rest,
};
} else if (status === 2) {
return {
success: false,
message: "获取任务结果失败",
errcode,
errmsg,
};
}
}
// 获取话术推荐结果
exports.getRecommendResult = async (event) => {
const { corpId, magList, kbId } = event;
if (!kbId) {
return {
success: false,
message: "kbId不能为空",
};
}
if (!magList || magList.length === 0) {
return {
success: false,
message: "msgList不能为空",
};
}
const createTaskParams = {
msg_list: magList,
kb_id: kbId,
};
let params = {
corpId: corpId,
createTaskParams,
createTaskabilityId: "create_recommend_dialog_task",
resultAbilityId: "get_recommend_dialog_result",
};
return await createTask(params);
};
//获取摘要提取结果
exports.getSummaryResult = async (event) => {
const { corpId, magList } = event;
const createTaskParams = {
msg_list: magList,
};
let params = {
corpId: corpId,
createTaskParams,
createTaskabilityId: "create_summary_task",
resultAbilityId: "get_summary_result",
};
return await createTask(params);
};
// 获取情感分析结果
exports.getEmotionResult = async (event) => {
const { corpId, magList } = event;
const createTaskParams = {
msg_list: magList,
};
let params = {
corpId: corpId,
createTaskParams,
createTaskabilityId: "create_sentiment_task",
resultAbilityId: "get_sentiment_result",
};
return await createTask(params);
};
/**
* 专区程序SDK调用 需要通过同一接口进行调用
* @param {String} program_id 应用关联的程序id
* @param {String} ability_id 能力id
* @param {String} notify_id 通知id
* @param {Object} request_data 请求数据
* @returns
*/
async function syncCallProgram(item) {
let { program_id, ability_id, notify_id, params = {}, corpId } = item;
const request_data = {
input: {
func: ability_id,
func_req: params,
},
};
const query = {
program_id,
ability_id,
request_data,
notify_id,
type: "syncCallProgram",
corpId,
};
return await api.getWecomApi(query);
}
/**
* 专区程序SDK调用 需要通过同一接口进行调用
* @param {String} program_id 应用关联的程序id
* @param {String} ability_id 能力id
* @param {String} notify_id 通知id
* @param {Object} request_data 请求数据
* @returns
*/
async function asyncCallProgram(item) {
let { jobid, corpId } = item;
const query = {
jobid,
corpId,
type: "asyncProgramTask",
};
return await api.getWecomApi(query);
}