Files
makemd/server/src/services/AdMimicryService.ts

61 lines
1.9 KiB
TypeScript
Raw Normal View History

import db from '../config/database';
import { AIService } from './AIService';
import { AuditService } from './AuditService';
/**
* [BIZ_MKT_10] 广仿
* 广TikTok/FB/IG AI 仿
*/
export class AdMimicryService {
/**
*
*/
static async generateMimicry(
tenantId: string,
competitorAdId: string,
originalContent: string,
traceId: string
): Promise<string> {
// 1. 风格提取 (模拟调用 AIService 分析竞品素材风格)
const style = await AIService.extractAdStyle(originalContent);
// 2. 差异化逻辑 (注入租户产品的独有优势)
const differentiation = "Fast 2-day global shipping & Eco-friendly materials";
// 3. 生成新素材内容 (模拟基于 AI 的风格迁移生成)
const mimickedContent = await AIService.generateAdFromStyle(style, differentiation);
// 4. 持久化记录
await db('cf_ad_mimicry').insert({
tenant_id: tenantId,
competitor_ad_id: competitorAdId,
original_content: originalContent,
mimicked_content: mimickedContent,
differentiation_logic: differentiation,
similarity_score: 0.85 // 模仿相似度指标
});
// 5. 审计记录
await AuditService.log({
tenant_id: tenantId,
action: 'AD_MIMICRY_GENERATED',
target_type: 'AD_CREATIVE',
target_id: competitorAdId,
trace_id: traceId,
new_data: JSON.stringify({ mimickedContent }),
metadata: JSON.stringify({ originalAdId: competitorAdId, style })
});
return mimickedContent;
}
/**
* 广仿
*/
static async getMimicryHistory(tenantId: string) {
return await db('cf_ad_mimicry')
.where({ tenant_id: tenantId })
.orderBy('created_at', 'desc');
}
}