Update: 2026-07-05 17:49:26
This commit is contained in:
@@ -312,4 +312,65 @@ class SiroGeminiService {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function evaluateTelegramForReporting(array $messages, string $model = 'gemini-flash-lite-latest'): ?string {
|
||||||
|
if (!$this->apiKey || empty($messages)) return null;
|
||||||
|
|
||||||
|
$messagesJson = json_encode($messages, JSON_UNESCAPED_UNICODE);
|
||||||
|
|
||||||
|
$prompt = "
|
||||||
|
أنت محلل بيانات استخباراتية للسوق لتطبيق 'سيرو' لنقل الركاب.
|
||||||
|
إليك مجموعة من الرسائل التي جمعها الروبوت الخاص بنا من قنوات ومجموعات السائقين على تليغرام اليوم:
|
||||||
|
$messagesJson
|
||||||
|
|
||||||
|
المطلوب منك:
|
||||||
|
1. قراءة جميع هذه الرسائل واستخراج أي شكاوى، أسئلة، أو نقاشات تتعلق بـ (تطبيقات النقل الذكي مثل كريم، أوبر، جيني، يلاغو، تكسي إف، أسعار المحروقات، مشاكل التطبيقات، الإضرابات).
|
||||||
|
ملاحظة هامة عن بنية البيانات:
|
||||||
|
- كل رسالة تبدأ بـ [TELEGRAM]: هي عبارة عن رسالة مرسلة في مجموعة تليغرام.
|
||||||
|
2. تلخيص أهم هذه النقاشات في تقرير قصير ومفيد (News Report).
|
||||||
|
3. تجاهل رسائل الانضمام للمجموعات، الملصقات، الإعلانات العشوائية، أو الرسائل القصيرة جداً التي لا تحتوي على معنى مفيد للسوق.
|
||||||
|
|
||||||
|
هام جداً:
|
||||||
|
- يجب أن يكون التقرير باللغة العربية بالكامل.
|
||||||
|
- يجب أن تغلف التقرير بالكامل بوسم <div dir=\"rtl\" align=\"right\"> في البداية و </div> في النهاية لضمان القراءة من اليمين لليسار.
|
||||||
|
- استخدم <h3> للعناوين و <ul> للقوائم داخل التقرير.
|
||||||
|
- لا تقم بتضمين علامات ```html في المخرجات.
|
||||||
|
إذا لم يكن هناك أي شيء مفيد، اكتب فقط: <div dir=\"rtl\" align=\"right\"><p>لا توجد بيانات مفيدة في هذه الدفعة.</p></div>
|
||||||
|
";
|
||||||
|
|
||||||
|
$url = $this->baseUrl . "{$model}:generateContent?key={$this->apiKey}";
|
||||||
|
|
||||||
|
$postData = [
|
||||||
|
'contents' => [
|
||||||
|
[
|
||||||
|
'parts' => [
|
||||||
|
['text' => $prompt]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'generationConfig' => [
|
||||||
|
'temperature' => 0.5,
|
||||||
|
'maxOutputTokens' => 1500
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
$ch = curl_init($url);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
|
||||||
|
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
if ($httpCode === 200) {
|
||||||
|
$data = json_decode($response, true);
|
||||||
|
$text = $data['candidates'][0]['content']['parts'][0]['text'] ?? '';
|
||||||
|
return trim(preg_replace('/```html|```/', '', $text));
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user