feat: Significantly improve AI prompt quality for template generation

Enhanced system prompt:
- Professional cyber security expert role
- Modern HTML/CSS styling instructions
- Responsive design requirements
- Persuasive and urgent tone guidance
- Turkish language grammar emphasis
- Realistic corporate email appearance

Enhanced user prompt:
- Better structured input with emojis (📌)
- Clear field labels (HEDEF ŞİRKET, SENARYO, etc.)
- Detailed HTML example with inline CSS
- Button styling, footer, responsive design
- Max 70 char subject line guidance
- Multiple warnings for quality output

All user inputs are sent to AI:
 company_name (Şirket Adı)
 scenario (Senaryo)
 employee_info (Çalışan Bilgisi) - optional
 custom_prompt (Ek Talimatlar) - optional

template_name and template_type are for DB only, NOT sent to AI.

This will produce much higher quality, styled HTML emails.
This commit is contained in:
salvacybersec
2025-11-11 02:49:12 +03:00
parent eb2205e4ff
commit a8bedc7fbc

View File

@@ -96,43 +96,52 @@ class OllamaService {
const { company_name, scenario, employee_info, custom_prompt } = params;
// Build the prompt
const systemPrompt = `Sen profesyonel bir güvenlik uzmanısın ve phishing test maileri oluşturuyorsun.
Amacın gerçekçi, ikna edici ancak zararsız test mailleri oluşturmak.
Mail şablonları HTML formatında olmalı ve modern, profesyonel görünmeli.
Şablon içinde {{company_name}} ve {{employee_name}} placeholder'ları kullan.`;
const systemPrompt = `Sen profesyonel bir siber güvenlik uzmanısın ve şirketler için phishing farkındalık testi mail şablonları oluşturuyorsun.
let userPrompt = `Aşağıdaki bilgilere göre bir phishing test mail şablonu oluştur:
GÖREV: Gerçekçi, ikna edici ve profesyonel phishing test mailleri oluştur.
Şirket: ${company_name}
Senaryo: ${scenario}`;
KURALLAR:
1. Mail şablonları modern HTML/CSS ile tasarlanmalı
2. Gerçek şirket maillerine benzer görünmeli
3. İkna edici ve inandırıcı olmalı
4. Türkçe dil bilgisi ve imla kurallarına uygun olmalı
5. Kullanıcıyı aciliyet hissi ile harekete geçirmeli
6. Şirket logosu/branding için placeholder kullan
ZORUNLU PLACEHOLDER'LAR:
- {{company_name}} - Şirket adı
- {{employee_name}} - Çalışan adı (varsa "Sayın {{employee_name}}", yoksa "Sayın Yetkili")
- {{tracking_url}} - Tıklama linki (button veya link olarak)
YANIT FORMATI: Sadece ve sadece JSON, hiçbir ek açıklama yok!`;
let userPrompt = `Aşağıdaki bilgilere göre profesyonel bir phishing test mail şablonu oluştur:
📌 HEDEF ŞİRKET: ${company_name}
📌 SENARYO: ${scenario}`;
if (employee_info) {
userPrompt += `\nÇalışan Bilgisi: ${employee_info}`;
userPrompt += `
📌 HEDEF KİTLE: ${employee_info}`;
}
if (custom_prompt) {
userPrompt += `\nEk Talimatlar: ${custom_prompt}`;
userPrompt += `
📌 ÖZEL TALİMATLAR: ${custom_prompt}`;
}
userPrompt += `
ÖNEMLI:
1. Yanıtını JSON formatında ver
2. İki alan olmalı: "subject" (konu) ve "body" (HTML mail içeriği)
3. Body HTML formatında, modern ve profesyonel olmalı
4. {{company_name}} ve {{employee_name}} placeholder'larını kullan
5. Gerçekçi ve ikna edici olmalı
6. Link için {{tracking_url}} placeholder'ını kullan
ÇOK ÖNEMLİ: Yanıtın SADECE JSON olmalı, başka hiçbir metin olmamalı!
Kesinlikle bu formatta yanıt ver:
JSON YANIT FORMATI (AYNEN BU YAPIDA):
{
"subject": "Mail konusu buraya",
"body": "<html><body><h2>Başlık</h2><p>Mail içeriği buraya</p><a href='{{tracking_url}}'>Link</a></body></html>"
"subject": "İkna edici mail konusu buraya (max 70 karakter)",
"body": "<!DOCTYPE html><html><head><meta charset='UTF-8'><style>body{font-family:Arial,sans-serif;line-height:1.6;color:#333;max-width:600px;margin:0 auto;padding:20px;}h2{color:#d32f2f;}.button{display:inline-block;padding:12px 30px;background:#d32f2f;color:white;text-decoration:none;border-radius:5px;margin:20px 0;}.footer{font-size:12px;color:#666;margin-top:30px;border-top:1px solid #ddd;padding-top:15px;}</style></head><body><h2>Başlık</h2><p>Sayın {{employee_name}},</p><p>Mail içeriği buraya - ikna edici ve aciliyet vurgulu</p><a href='{{tracking_url}}' class='button'>Butona tıklat</a><div class='footer'>{{company_name}} © 2024</div></body></html>"
}
SADECE JSON döndür, hiç açıklama yazma!`;
⚠️ SADECE JSON DÖNDÜR! Açıklama, not, yorum YAZMA!
⚠️ Body içinde CSS stillendir, responsive yap!
⚠️ Konuyu çekici ve acil yap!
⚠️ HTML'i tam ve geçerli oluştur!`;
try {
logger.info(`Generating template for company: ${company_name}, scenario: ${scenario}`);