feat: 任务一键推送企微(总群+KOC个人直达+群发,含推送记录)
This commit is contained in:
@@ -69,6 +69,13 @@ import {
|
||||
setProjectGroupChats,
|
||||
} from "../../../lib/project-service";
|
||||
import { pushProjectTask } from "../../../lib/project-push-service";
|
||||
import {
|
||||
findTodayTaskPushLog,
|
||||
listBoundWecomPartners,
|
||||
listTaskPushLogs,
|
||||
OneClickPushError,
|
||||
oneClickPushTask,
|
||||
} from "../../../lib/task-one-click-push-service";
|
||||
|
||||
type ActionBody = {
|
||||
action?: string;
|
||||
@@ -753,6 +760,35 @@ export async function POST(request: Request) {
|
||||
appFailedCount: appFailed.length,
|
||||
hint: "任务群走企业群发,群主需在企微客户端「群发助手」点击发送后,消息才会送达客户群",
|
||||
});
|
||||
} else if (body.action === "wecom_bound_partners") {
|
||||
const partners = await listBoundWecomPartners(db);
|
||||
const taskId = String(body.taskId ?? "").trim();
|
||||
const pushedToday = taskId
|
||||
? await findTodayTaskPushLog(db, taskId, "task_open")
|
||||
: null;
|
||||
return Response.json({ partners, pushedToday });
|
||||
} else if (body.action === "task_one_click_push") {
|
||||
const wecomConfig = resolveWecomConfig(env as unknown as WecomBindings);
|
||||
const outcome = await oneClickPushTask(
|
||||
db,
|
||||
{
|
||||
taskId: body.taskId,
|
||||
sendMainGroup: body.sendMainGroup,
|
||||
sendKoc: body.sendKoc,
|
||||
createGroupTemplate: body.createGroupTemplate,
|
||||
selectedKocPartnerIds: body.selectedKocPartnerIds,
|
||||
force: body.force,
|
||||
text: body.text,
|
||||
},
|
||||
wecomConfig,
|
||||
);
|
||||
return Response.json({
|
||||
...outcome,
|
||||
hint: "KOC 直达消息已即时送达;任务群走企业群发,群主需在企微客户端「群发助手」点击发送后才会送达客户群",
|
||||
});
|
||||
} else if (body.action === "task_push_logs") {
|
||||
const logs = await listTaskPushLogs(db, String(body.taskId ?? "").trim());
|
||||
return Response.json({ logs });
|
||||
} else if (body.action === "refresh_account_fields") {
|
||||
const status = startAccountFieldRefresh(
|
||||
db,
|
||||
@@ -778,7 +814,8 @@ export async function POST(request: Request) {
|
||||
error instanceof FeishuSourceError ||
|
||||
error instanceof DistributionReleaseError ||
|
||||
error instanceof WecomClientError ||
|
||||
error instanceof ProjectError
|
||||
error instanceof ProjectError ||
|
||||
error instanceof OneClickPushError
|
||||
? error.status
|
||||
: 500,
|
||||
},
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
handleWecomCallbackEvent,
|
||||
parseWecomCallbackXml,
|
||||
} from "../../../lib/wecom-callback-events";
|
||||
import { ensureSchema, getRawDb } from "../../../lib/mvp-db";
|
||||
import { isEnabled, getRuntimeEnv } from "../../../lib/runtime-env";
|
||||
|
||||
type CallbackConfig = {
|
||||
@@ -112,7 +113,12 @@ export async function POST(request: Request) {
|
||||
return new Response("receiveid 校验失败", { status: 403 });
|
||||
}
|
||||
const fields = parseWecomCallbackXml(message);
|
||||
handleWecomCallbackEvent(fields);
|
||||
try {
|
||||
await ensureSchema();
|
||||
await handleWecomCallbackEvent(getRawDb(), fields);
|
||||
} catch (eventError) {
|
||||
console.error("[KOC LOOP] wecom callback event handling failed", eventError);
|
||||
}
|
||||
return new Response("", { status: 200 });
|
||||
} catch (error) {
|
||||
if (error instanceof WecomCallbackCryptoError) {
|
||||
|
||||
Reference in New Issue
Block a user