feat(market-intel): implement role-based campaign engine and gritty reporting
- Implementierung der rollenbasierten Campaign-Engine mit operativem Fokus (Grit). - Integration von Social Proof (Referenzkunden) in die E-Mail-Generierung. - Erweiterung des Deep Tech Audits um gezielte Wettbewerber-Recherche (Technographic Search). - Fix des Lösch-Bugs in der Target-Liste und Optimierung des Frontend-States. - Erweiterung des Markdown-Exports um transparente Proof-Links und Evidenz. - Aktualisierung der Dokumentation in readme.md und market_intel_backend_plan.md.
This commit is contained in:
@@ -170,11 +170,65 @@ export const generateOutreachCampaign = async (
|
||||
language: Language,
|
||||
referenceUrl: string
|
||||
): Promise<EmailDraft[]> => {
|
||||
// Dieser Teil muss noch im Python-Backend implementiert werden
|
||||
console.warn("generateOutreachCampaign ist noch nicht im Python-Backend implementiert.");
|
||||
return [];
|
||||
};
|
||||
console.log(`Frontend: Starte Outreach-Generierung für ${companyData.companyName}...`);
|
||||
|
||||
try {
|
||||
const response = await fetch(`${API_BASE_URL}/generate-outreach`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
companyData,
|
||||
knowledgeBase,
|
||||
referenceUrl
|
||||
}),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(`Backend-Fehler: ${errorData.error || response.statusText}`);
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
console.log(`Frontend: Outreach-Generierung für ${companyData.companyName} erfolgreich.`);
|
||||
|
||||
// Transform new backend structure to match frontend EmailDraft interface
|
||||
if (Array.isArray(result)) {
|
||||
return result.map((item: any) => {
|
||||
// Construct a body that shows the sequence
|
||||
let fullBody = "";
|
||||
const firstSubject = item.emails?.[0]?.subject || "No Subject";
|
||||
|
||||
if (item.emails && Array.isArray(item.emails)) {
|
||||
item.emails.forEach((mail: any, idx: number) => {
|
||||
fullBody += `### Email ${idx + 1}: ${mail.subject}\n\n`;
|
||||
fullBody += `${mail.body}\n\n`;
|
||||
if (idx < item.emails.length - 1) fullBody += `\n---\n\n`;
|
||||
});
|
||||
} else {
|
||||
// Fallback for flat structure or error
|
||||
fullBody = item.body || "No content generated.";
|
||||
}
|
||||
|
||||
return {
|
||||
persona: item.target_role || "Unknown Role",
|
||||
subject: firstSubject,
|
||||
body: fullBody,
|
||||
keyPoints: item.rationale ? [item.rationale] : []
|
||||
};
|
||||
});
|
||||
} else if (result.campaign && Array.isArray(result.campaign)) {
|
||||
return result.campaign as EmailDraft[];
|
||||
}
|
||||
|
||||
return [];
|
||||
|
||||
} catch (error) {
|
||||
console.error(`Frontend: Outreach-Generierung fehlgeschlagen für ${companyData.companyName}`, error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
export const translateEmailDrafts = async (drafts: EmailDraft[], targetLanguage: Language): Promise<EmailDraft[]> => {
|
||||
// Dieser Teil muss noch im Python-Backend oder direkt im Frontend implementiert werden
|
||||
console.warn("translateEmailDrafts ist noch nicht im Python-Backend implementiert.");
|
||||
|
||||
Reference in New Issue
Block a user