/** * 文案库 AI 能力 API(#1893) * 三个端点均走真实后端,不参与 SCRIPTS_API_MOCK 开关。 */ import apiClient from "../client" /** ── 1. 从抖音视频提取文案(下载 + ASR) */ export interface ExtractFromDouyinRequest { url: string } export interface ExtractFromDouyinResponse { text: string duration_seconds?: number source_url?: string } export async function extractScriptFromDouyin( body: ExtractFromDouyinRequest, opts?: { signal?: AbortSignal }, ): Promise { const res = await apiClient.post( "/scripts/extract-from-douyin", body, { // ASR 可能较慢,给足超时 timeout: 60_000, signal: opts?.signal, }, ) return res.data } /** ── 2. AI 改写文案 */ export type RewriteStyle = "口语化" | "正式" | "活泼" | "治愈" | "励志" export const REWRITE_STYLE_OPTIONS: { value: RewriteStyle; label: string }[] = [ { value: "口语化", label: "口语化" }, { value: "正式", label: "正式" }, { value: "活泼", label: "活泼" }, { value: "治愈", label: "治愈" }, { value: "励志", label: "励志" }, ] export interface AiRewriteRequest { content: string style?: RewriteStyle } export interface AiRewriteResponse { original: string rewritten: string style: RewriteStyle } export async function aiRewriteScript( body: AiRewriteRequest, opts?: { signal?: AbortSignal }, ): Promise { const res = await apiClient.post("/scripts/ai-rewrite", body, { timeout: 60_000, signal: opts?.signal, }) return res.data } /** ── 3. AI 生成标题 */ export interface AiGenerateTitlesRequest { content: string count?: number } export interface AiGenerateTitlesResponse { titles: string[] } export async function aiGenerateTitles( body: AiGenerateTitlesRequest, opts?: { signal?: AbortSignal }, ): Promise { const res = await apiClient.post( "/scripts/ai-generate-titles", { content: body.content, count: body.count ?? 3 }, { timeout: 30_000, signal: opts?.signal, }, ) return res.data }