پاسخ دهی خودکار به نظرات کاربران در بازار (PHP)
گاهی اوقات پاسخ به تک تک نظرات کاربران ممکنه طاقت فرسا و خسته کننده باشه به خصوص اگه تعداد نظرات برنامه تون زیاد باشه. بازار اومده یه سرویسی تحت عنوان API نظرات بازار ارائه داده که باهاش میتونین تک تک نظرات رو بگیرین، آنالیز کنین و در صورت نیاز پاسخ بدین.
این لینک داکیومنتش هست که در اون نحوه استفاده از api به صورت عمومی برای تمامی زبان ها توضیح داده شده اما از زدن مثال برای یه زبان برنامه نویسی خاص اجتناب شده و به همین خاطر تصمیم گرفتم کدهاشو به زبان php بنویسم و باهاتون به اشتراک بگذارم.
اول از همه باید این تابعی که نوشتم رو اضافه کنین:
function StartAutomaticallyReplyingToUserComments($request_url='https://sandoghche.cafebazaar.ir/api/v0/reviews/') { $api_key_value = ''; $confirmation = Array("خوب", "عالی", "ممنون"); $Replay = Array("خوبی از خودته", "تشکر از نظرت", "ممنون از خودت که نظر دادی"); $Decline = Array("بد", "بیخود", "نصب نکنید"); $Star = Array(4, 5); $Email = "test@gmail.com"; $handler = curl_init($request_url); curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, True); curl_setopt($handler, CURLOPT_FOLLOWLOCATION, True); curl_setopt($handler, CURLOPT_RETURNTRANSFER, True); curl_setopt($handler, CURLOPT_URL, $request_url); curl_setopt($handler, CURLOPT_TIMEOUT, 90); $headers = Array('Content-Type: application/json;charset=UTF-8', "CAFEBAZAAR-PISHKHAN-API-SECRET: $api_key_value"); curl_setopt($handler, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($handler); curl_close($handler); $get_data = json_decode($response, True); $array = $get_data['results']; foreach ($array As $i => $item) { $mText = $array[$i]['text']; $mRate = $array[$i]['rate']; $mAccept = false; $mReplay = ""; If (array_search($mRate, $Star, True) !== False && empty($array[$i]['developer_reply']) == true) { foreach ($confirmation As $ii => $item) { If (str_contains($mText, $confirmation[$ii])) { $mAccept = true; $mReplay = $Replay[$ii]; foreach ($Decline As $iii => $item) { If (str_contains($mText, $Decline[$iii])) { $mAccept = false; break; } } break; } } } If ($mAccept == True) { $body = json_encode(Array('text' => $mReplay, 'email' => $Email)); $mID = $array[$i]['id']; $request_url = "https://sandoghche.cafebazaar.ir/api/v0/reviews/$mID/"; $handler = curl_init($request_url); curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, True); curl_setopt($handler, CURLOPT_FOLLOWLOCATION, True); curl_setopt($handler, CURLOPT_RETURNTRANSFER, True); curl_setopt($handler, CURLOPT_URL, $request_url); curl_setopt($handler, CURLOPT_TIMEOUT, 90); curl_setopt($handler, CURLOPT_POST, True); curl_setopt($handler, CURLOPT_POSTFIELDS, $body); $headers = Array('Content-Type: application/json;charset=UTF-8', "CAFEBAZAAR-PISHKHAN-API-SECRET: $api_key_value"); curl_setopt($handler, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($handler); curl_close($handler); echo $i . '(' . $array[$i]['text'] . ") : " . $response . "<br>"; } } StartAutomaticallyReplyingToUserComments($get_data['next']); }
تنها قسمتی از تابع بالا که لازمه ویرایش کنین، همون 6 خط اول هست یعنی اینا:
$api_key_value = ''; $confirmation = Array("خوب", "عالی", "ممنون"); $Replay = Array("خوبی از خودته", "تشکر از نظرت", "ممنون از خودت که نظر دادی"); $Decline = Array("بد", "بیخود", "نصب نکنید"); $Star = Array(4, 5); $Email = "test@gmail.com";
خب اول باید متغیر api_key_value رو مقدار دهی کنیم. برای این کار وارد پیشخان بازار میشیم و روی برنامه ای که میخوایم به نظراتش پاسخ بدیم، کلیک میکنیم. سپس از منوی سمت راست صفحه، روی گزینهی API پیشخان بازار کلیک میکنیم. حالا با کلیک روی گزینهی “دریافت توکن جدید” در پیشخان توکن خودمون رو دریافت میکنیم و اونو برابر با متغیر api_key_value قرار میدیم.
متغیر confirmation مربوط به کلماتی هست که اگه نظر کاربر شامل یکی از اونها باشه به نظر پاسخ داده میشه.
متغیر Replay هم مربوط به پاسخ های شما هستش که باید به ترتیب متغیر confirmation باشه. یعنی اگه مقدار اول (index 0) آرایه confirmation در کامنت کاربر باشه پاسخی که براش در نظر گرفته میشه مقدار اول (index 0) آرایه Replay خواهد بود یا مثلا اگه مقدار دوم (index 1) آرایه confirmation در کامنت کاربر باشه پاسخی که براش در نظر گرفته میشه مقدار دوم (index 1) آرایه Replay خواهد بود و به همین ترتیب…
متغیر Decline مربوط به کلماتی هست که اگه نظر کاربر شامل یکی از اونها باشه از پاسخ به نظر کاربر خودداری میشه حتی اگه کامنتش شامل یکی از اعضای آرایه confirmation باشه!
در متغیر Star تعیین می کنیم که امتیاز لازم برای پاسخ دادن به نظر کاربر چقدر باشه. مثلا در تابع بالا من اومدم گفتم اگه امتیازی که کاربر به برنامه داده بود 4 یا 5 بود بیا به نظرش پاسخ بده و دیگه با نظرات پایین تر از 4 ستاره کاری نداشته باش!
به متغیر Email هم ایمیل خودتون رو بدین. طبق گفته بازار این ایمیل به کاربر نمایش داده میشه.
اینطوری هم از تابع استفاده میکنیم:
StartAutomaticallyReplyingToUserComments();
فقط ممکنه نظرات برنامه تون زیاد باشه و فرایند پاسخ دهی خودکار طول بکشه و همین باعث بشه به ارور Maximum execution time of 30 seconds exceeded برخورد کنین. برای حل این مشکل این کد رو اضافه کنین:
ini_set('max_execution_time', '0');
من در اینجا از PHP 8.1 استفاده کردم و بهتره شماهم از این نسخه استفاده کنین تا به مشکل برنخورین.
راستی حتی اگه هاست ندارین میتونین به راحتی این دستورات رو توی لوکال خودتون و با استفاده از XAMPP اجرا کنین!