diff --git a/backend/src/models/MailTemplate.js b/backend/src/models/MailTemplate.js index be3e5a4..7463ac1 100644 --- a/backend/src/models/MailTemplate.js +++ b/backend/src/models/MailTemplate.js @@ -14,8 +14,7 @@ const MailTemplate = sequelize.define('MailTemplate', { template_type: { type: DataTypes.STRING(50), allowNull: false, - unique: true, - comment: 'bank, edevlet, corporate, etc.', + comment: 'bank, edevlet, corporate, etc. (multiple templates can have same type)', }, subject_template: { type: DataTypes.STRING(500), diff --git a/backend/src/services/ollama.service.js b/backend/src/services/ollama.service.js index e93247e..04c38f2 100644 --- a/backend/src/services/ollama.service.js +++ b/backend/src/services/ollama.service.js @@ -124,11 +124,15 @@ Senaryo: ${scenario}`; 5. Gerçekçi ve ikna edici olmalı 6. Link için {{tracking_url}} placeholder'ını kullan -Örnek format: +ÇOK ÖNEMLİ: Yanıtın SADECE JSON olmalı, başka hiçbir metin olmamalı! + +Kesinlikle bu formatta yanıt ver: { "subject": "Mail konusu buraya", - "body": "Mail içeriği buraya" -}`; + "body": "
Mail içeriği buraya
Link" +} + +SADECE JSON döndür, hiç açıklama yazma!`; try { logger.info(`Generating template for company: ${company_name}, scenario: ${scenario}`); @@ -157,6 +161,7 @@ Senaryo: ${scenario}`; const aiResponse = response.data.message.content; logger.info('Ollama response received'); + logger.info(`Raw AI response: ${aiResponse.substring(0, 500)}...`); // Log first 500 chars // Parse JSON response let templateData; @@ -168,14 +173,25 @@ Senaryo: ${scenario}`; if (jsonMatch) { templateData = JSON.parse(jsonMatch[0]); } else { + logger.error(`JSON parse failed. Raw response: ${aiResponse}`); throw new Error('AI yanıtı JSON formatında değil'); } } - if (!templateData.subject || !templateData.body) { - throw new Error('AI yanıtında subject veya body eksik'); + logger.info(`Parsed template data keys: ${Object.keys(templateData).join(', ')}`); + + // Check for various possible field names + const subject = templateData.subject || templateData.Subject || templateData.konu || templateData.title; + const body = templateData.body || templateData.Body || templateData.html || templateData.content || templateData.icerik; + + if (!subject || !body) { + logger.error(`Missing fields. Template data: ${JSON.stringify(templateData, null, 2)}`); + throw new Error(`AI yanıtında subject veya body eksik. Mevcut alanlar: ${Object.keys(templateData).join(', ')}`); } + templateData.subject = subject; + templateData.body = body; + return { subject_template: templateData.subject, body_template: templateData.body,