import { callQiaoqiaoAgentApi } from "../tools-common/qiaoqiao-api.js"; import type { ResolvedQiaoqiaoAccount } from "../types.js"; import type { QiaoqiaoDmParams } from "./schemas.js"; export async function runDmAction( account: ResolvedQiaoqiaoAccount, params: QiaoqiaoDmParams, ): Promise { const accountConfig = account.config as { apiBase?: string }; const apiBase = accountConfig.apiBase; if (params.action === "list_conversations") { const query = new URLSearchParams(); if (params.limit !== undefined) query.set("limit", String(params.limit)); if (params.offset !== undefined) query.set("offset", String(params.offset)); const data = await callQiaoqiaoAgentApi<{ conversations?: unknown[]; total?: number; limit?: number; offset?: number; hasMore?: boolean; }>({ method: "GET", path: `/dm/conversations${query.toString() ? `?${query.toString()}` : ""}`, appId: account.appId!, appSecret: account.appSecret!, apiBase, }); return { ok: true, action: "list_conversations", total: Number(data.total ?? data.conversations?.length ?? 0), conversations: data.conversations ?? [], limit: data.limit, offset: data.offset, hasMore: Boolean(data.hasMore), }; } if (params.action === "list_unreplied") { const data = await callQiaoqiaoAgentApi({ method: "GET", path: "/dm/unreplied-conversations", appId: account.appId!, appSecret: account.appSecret!, apiBase, }); const conversations = Array.isArray(data) ? data : data.conversations ?? []; return { ok: true, action: "list_unreplied", total: Array.isArray(data) ? data.length : Number(data.total ?? conversations.length), conversations, }; } if (params.action === "send") { const recipientId = String(params.recipientId || "").trim(); const content = String(params.content || "").trim(); if (!recipientId || !content) { throw new Error("recipientId and content are required for send"); } const targetMode = String(params.targetMode || "human").trim().toLowerCase() === "agent" ? "agent" : "human"; const data = await callQiaoqiaoAgentApi({ method: "POST", path: "/dm/messages", appId: account.appId!, appSecret: account.appSecret!, apiBase, body: { recipientId, content, targetMode, }, }); return { ok: true, action: "send", message: data, }; } if (params.action === "send_by_qiaoqiao_id") { const qiaoqiaoId = String(params.qiaoqiaoId || "").trim(); const content = String(params.content || "").trim(); if (!qiaoqiaoId || !content) { throw new Error("qiaoqiaoId and content are required for send_by_qiaoqiao_id"); } const data = await callQiaoqiaoAgentApi({ method: "POST", path: "/dm/messages/by-qiaoqiao-id", appId: account.appId!, appSecret: account.appSecret!, apiBase, body: { qiaoqiaoId, content, }, }); return { ok: true, action: "send_by_qiaoqiao_id", message: data, }; } const peerId = String(params.peerId || "").trim(); if (!peerId) { throw new Error("peerId is required for list_messages"); } const query = new URLSearchParams({ peerId }); const data = await callQiaoqiaoAgentApi({ method: "GET", path: `/dm/messages/all?${query.toString()}`, appId: account.appId!, appSecret: account.appSecret!, apiBase, }); const messages = Array.isArray(data) ? data : data.messages ?? []; return { ok: true, action: "list_messages", total: Array.isArray(data) ? data.length : Number(data.total ?? messages.length), messages, peerId: Array.isArray(data) ? peerId : data.peerId ?? peerId, }; }