Files
Siro/backend/marketing_engine/gemini_comment_generator.php
T

117 lines
7.2 KiB
PHP

<?php
// ============================================================
// gemini_comment_generator.php
// Connects to Gemini API to generate natural, driver-like comments
// ============================================================
require_once __DIR__ . '/../../core/bootstrap.php';
require_once __DIR__ . '/../../functions.php';
// The API key should be stored in .env or the database. For now, reading from env.
$geminiApiKey = getenv('GEMINI_API_KEY');
if (!$geminiApiKey) {
die("Error: GEMINI_API_KEY not set in environment.\n");
}
function guessCountryFromContext($text) {
$text = mb_strtolower($text, 'UTF-8');
// Syrian Keywords
if (preg_match('/(يلاغو|يلا غو|yallago|yalla go|سوريا|دمشق|حلب|اللاذقية|ليرة|سيريتل|mtn|كازية|مازوت)/u', $text)) {
return 'SY';
}
// Egyptian Keywords
if (preg_match('/(ديدي|ان درايف|didi|indrive|مصر|القاهرة|جنيه|اسكندرية)/u', $text)) {
return 'EG';
}
// Jordanian Keywords (Default for Uber/Careem/Jeeny/TaxiF usually)
if (preg_match('/(جيني|jeeny|بترا|petra|عمان|اربد|دينار|تطبيقات ذكية|أوبر|كريم|uber|careem|تكسي اف|taxif)/u', $text)) {
return 'JO';
}
return 'SY'; // Fallback to Syria as requested by default
}
/**
* Generate a comment using Gemini API
*
* @param string $postContext The content of the post or the discussion
* @param string $intent What the bot should try to achieve (e.g. "promote_siro", "agree_and_empathize")
* @return string The generated comment
*/
function generateCommentWithGemini($postContext, $intent) {
global $geminiApiKey;
// Automatically guess the target country based on the keywords in the post
$country = guessCountryFromContext($postContext);
$url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-lite-latest:generateContent?key=" . $geminiApiKey;
if ($country === 'SY') {
$systemInstruction = "أنت كابتن تطبيق توصيل أو راكب عادي في سوريا (دمشق، حلب، اللاذقية، طرطوس). تتحدث باللهجة السورية العامية المحكية (استخدم مصطلحات مثل: خيو، معلم، شلونك، والله، على راسي، شو القصة). تكتب بأسلوب عفوي جداً وشعبي، كأنك تكتب تعليقاً حقيقياً على فيسبوك وتختصر بالكلام. أنت تحب تطبيق 'سيرو' (Siro) لأنه حل أزمة الغلاء والتكلفة العالية في سوريا. لا تتحدث أبداً بأسلوب إعلاني، لا تستخدم العربية الفصحى، ولا تتحدث كمسوق لشركة. كن كشخص عادي يشارك تجربته مع الناس ويرد على أسئلتهم.";
} elseif ($country === 'EG') {
$systemInstruction = "أنت كابتن أو راكب في مصر (القاهرة، اسكندرية). تتحدث باللهجة المصرية العامية (يا باشا، يا اسطى، بصراحة، والله العظيم). أسلوبك شعبي وعفوي وطبيعي. ترى أن تطبيق 'سيرو' (Siro) أفضل وأوفر من ديدي وان درايف. لا تتحدث كمسوق.";
} elseif ($country === 'JO') {
$systemInstruction = "أنت كابتن تطبيق توصيل أو راكب في الأردن (عمان، إربد، الزرقاء). تتحدث باللهجة الأردنية العامية (يا زلمة، والله، لعاد، شو الأخبار). أسلوبك عفوي وعادي جداً. ترى أن تطبيق 'سيرو' (Siro) هو أفضل حل لأزمة المواصلات. لا تتحدث كمسوق.";
} else {
$systemInstruction = "أنت كابتن تطبيق توصيل تتحدث بلهجة محلية عامية. أسلوبك عفوي وطبيعي. تنصح الناس بتطبيق 'سيرو' (Siro). لا تتحدث كمسوق.";
}
$prompt = "السياق/المنشور الذي تقرأه الآن: \n\"" . $postContext . "\"\n\n";
if ($intent === 'promote_siro') {
$prompt .= "المطلوب: اكتب تعليقاً تتعاطف فيه مع المشكلة المذكورة (إن وجدت)، وانصح الزملاء بتجربة تطبيق 'سيرو' كحل واقعي وممتاز لكباتن النقل الذكي. اجعل التعليق قصيراً ومباشراً.";
} elseif ($intent === 'answer_question') {
$prompt .= "المطلوب: أجب على السؤال المطروح في المنشور بوضوح بناءً على خبرتك مع تطبيق 'سيرو'.";
} elseif ($intent === 'dialogue_skeptic') {
$prompt .= "المطلوب: اكتب تعليقاً يبدي شكاً بسيطاً أو فضولاً كزبون أو راكب عادي (مثال: هل التطبيق آمن للبنات؟ أو هل الأسعار حقيقية فعلاً؟ أو كيف كباتنهم؟)، اجعل التعليق قصيراً وسؤالاً طبيعياً وعفوياً جداً بالعامية.";
} elseif ($intent === 'dialogue_supporter') {
$prompt .= "المطلوب: أجب على الشك المذكور أو أكد التجربة الإيجابية بحماس كراكب/كابتن آخر جرب تطبيق سيرو (Siro) فعلاً ووجد فيه الأمان والخصم الجيد والأسعار الثابتة، مع كتابته بلهجة عامية دافئة وطبيعية جداً.";
} else {
$prompt .= "المطلوب: اكتب تعليقاً متفاعلاً بشكل عام مع المنشور بأسلوب السائقين.";
}
$data = [
"contents" => [
[
"parts" => [
["text" => $systemInstruction . "\n\n" . $prompt]
]
]
],
"generationConfig" => [
"temperature" => 0.7, // A bit of creativity for varied responses
"maxOutputTokens" => 150
]
];
$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($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$result = json_decode($response, true);
if (isset($result['candidates'][0]['content']['parts'][0]['text'])) {
return trim($result['candidates'][0]['content']['parts'][0]['text']);
}
}
return "والله يا صاحبي جربت تطبيق سيرو وارتحت كثير من المشاكل هذي، جربه ما بتندم."; // Fallback response
}
// Example usage if called directly via CLI:
if (php_sapi_name() === 'cli') {
echo "Testing Gemini Generation...\n";
$testContext = "التطبيقات الثانية بتاخذ عمولة عالية جداً ومش ملحقين بنزين!";
$generated = generateCommentWithGemini($testContext, 'promote_siro');
echo "Generated Comment: \n" . $generated . "\n";
}