hn-hlw-service/weCom/groupmsg.js
2026-07-27 11:28:33 +08:00

195 lines
4.8 KiB
JavaScript

const request = require("../request");
const accessToken = require("./token");
const logger = require("../utils/logger");
exports.main = async (context) => {
let {
access_token = "",
corpId,
permanentCode,
suiteToken,
corpid,
} = context;
if (!access_token) {
access_token = await accessToken.getToken({
corpId,
corpid,
permanentCode: permanentCode,
suiteToken,
});
context.access_token = access_token;
}
console.log("context", context);
switch (context.type) {
case "addWecomMsgTemplate":
return await addWecomMsgTemplate(context);
case "getWecomGroupmsgtask":
return await getWecomGroupmsgtask(context);
case "getWecomGroupmsgSendResult":
return await getWecomGroupmsgSendResult(context);
case "stopWecomGroupmsgTask":
return await stopWecomGroupmsgTask(context);
case "remindGroupmsgSend":
return await remindGroupmsgSend(context);
default: {
return {
success: false,
message: "未找到对应的操作类型",
};
}
}
};
async function addWecomMsgTemplate({
externalUserIds = [],
attachments = [],
content = "",
executor = "",
access_token,
}) {
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_msg_template?access_token=${access_token}`;
let item = {
chat_type: "single",
external_userid: externalUserIds,
text: {
content,
},
attachments: attachments,
allow_select: false,
sender: executor,
};
let { errcode, fail_list, msgid } = await request.main(url, item, "POST");
return {
errcode,
fail_list,
msgid,
};
}
// 获取群发成员发送任务列表
async function getWecomGroupmsgtask({ access_token, msgid, parentId = "" }) {
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_groupmsg_task?access_token=${access_token}`;
let item = {
msgid,
limit: 1000,
};
let { errcode, task_list } = await request.main(url, item, "POST");
if (errcode === 0) {
return {
success: true,
message: "获取成功",
task_list,
parentId,
msgid,
};
} else {
return {
success: true,
message: "获取失败",
msgid,
parentId,
task_list: [],
};
}
}
//获取企业群发成员执行结果
async function getWecomGroupmsgSendResult(context) {
let { msgid, userid, access_token } = context;
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_groupmsg_send_result?access_token=${access_token}`;
let item = {
msgid,
userid,
limit: 1000,
};
let { errcode, send_list } = await request.main(url, item, "POST");
console.log("send_list", send_list, errcode);
if (errcode === 0) {
send_list = send_list.map((item) => {
item["msgid"] = msgid;
// 根据发送状态码,显示发送解决
switch (item.status) {
case 0:
item.result = "未发送";
break;
case 1:
item.result = "已发送";
break;
case 2:
item.result = "因客户不是好友导致发送失败";
case 3:
item.result = "因客户已经收到其他群发消息导致发送失败";
break;
default:
item.result = "未知状态";
break;
}
return item;
});
return {
success: true,
message: "获取成功",
send_list,
msgid,
};
} else {
return {
success: true,
message: "获取失败",
msgid,
send_list: [],
};
}
}
async function stopWecomGroupmsgTask(content) {
let { msgid, access_token } = content;
// 请求的 URL
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/cancel_groupmsg_send?access_token=${access_token}`;
try {
// 发起请求
let { errcode, errmsg } = await request.main(url, { msgid }, "POST");
// 成功时,更新数据库任务状态
return {
success: errcode === 0,
message: errmsg,
};
} catch (error) {
// 捕获异常并返回
logger.error("Error stopping WeCom group message task:", error);
return {
success: false,
message: "请求失败,无法停止群发任务",
};
}
}
async function remindGroupmsgSend(content) {
let { msgid, access_token } = content;
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/remind_groupmsg_send?access_token=${access_token}`;
try {
let { errcode, errmsg } = await request.main(
url,
{
msgid,
},
"POST"
);
if (errcode === 0) {
return {
success: true,
message: "提醒群发成功",
};
} else {
return {
success: false,
message: errmsg,
};
}
} catch (error) {
return {
success: false,
message: error,
};
}
}