]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Исправления в отправке и сохранении
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 5 Mar 2025 11:01:08 +0000 (14:01 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 5 Mar 2025 11:01:08 +0000 (14:01 +0300)
erp24/helpers/DataHelper.php
erp24/jobs/SendWhatsappMessageJob.php
erp24/services/WhatsAppService.php

index 29499e6c3a59bc4c5b84cc99ee457808f667d663..e620cd657c1b2f01ffb6e42448e6e210b1758bf3 100644 (file)
@@ -50,6 +50,18 @@ class DataHelper
         return  strtolower($str);
     }
 
+
+    public static function uuid($prefix = '')
+    {
+        $chars = md5(uniqid(mt_rand(), true));
+        $uuid  = substr($chars,0,8) . '-';
+        $uuid .= substr($chars,8,4) . '-';
+        $uuid .= substr($chars,12,4) . '-';
+        $uuid .= substr($chars,16,4) . '-';
+        $uuid .= substr($chars,20,12);
+        return $prefix . $uuid;
+    }
+
     public static function isJson($string) {
         json_decode($string);
         return json_last_error() === JSON_ERROR_NONE;
index f25cfe071f148a1ce0d6350bbe03f8b1e91c7912..8b0faffa31b92c32dff4f3691f7ab4b65e82edda 100644 (file)
@@ -5,6 +5,7 @@ namespace app\jobs;
 use yii\base\BaseObject;
 use yii\queue\JobInterface;
 use Yii;
+use yii_app\helpers\DataHelper;
 use yii_app\services\WhatsAppMessageResponse;
 use yii_app\services\WhatsAppService;
 use yii_app\records\UsersMessageManagement;
@@ -50,34 +51,36 @@ class SendWhatsappMessageJob extends BaseObject implements JobInterface
         $apiKey    = Yii::$app->params['WHATSAPP_API_KEY'];
         $cascadeId = WhatsAppService::getCascadeIdByName('WABA') ?? 5686;
         $whatsappService = new WhatsAppService($apiKey, $cascadeId);
-        $requestId = uniqid();
+        $requestId = DataHelper::uuid();
         try {
-
-            $message  = $this->messageData['message'];
+            $isTest = $this->isTest;
+            $message  = ($this->messageData)['message'];
+            $kogortDate = ($this->messageData)['kogort_date'];
+            $targetDate = ($this->messageData)['target_date'];
             if ($this->isTest) {
-                $message   = "Здравствуйте\n
-                Узнать подробности вы можете на нашем сайте https://bazacvetov24.ru.";
+                $message   = "Здравствуйте\nУзнать подробности вы можете на нашем сайте https://bazacvetov24.ru.";
             }
-            $response = $whatsappService->sendMessage($requestId, $phone, $message, $this->isTest);
+            $response = $whatsappService->sendMessage($requestId, $phone, $message, $isTest);
 
 
             $status = 'sent';
-            if (!$status instanceof WhatsAppMessageResponse) {
+            if (!$response instanceof WhatsAppMessageResponse) {
                 $status = $response ?? 'error';
             }
             $record = new UsersWhatsappMessage();
             $record->request_id = $requestId;
             $record->phone      = $phone;
             $record->message    = $message;
-            $record->kogort_date = $this->messageData['kogort_date'];
-            $record->target_date = $this->messageData['target_date'];
+            $record->kogort_date = $kogortDate;
+            $record->target_date = $targetDate;
             $record->status     = $status;
             $record->created_at = date('Y-m-d H:i:s');
 
             if ($record->save()) {
-                Yii::warning("WhatsApp сообщение успешно отправлено и сохранено для телефона {$phone}. Request ID: " . $response->requestId, 'whatsapp');
+                Yii::warning("WhatsApp сообщение успешно отправлено и сохранено для телефона {$phone}. Request ID: " .
+                    $response->requestId, 'whatsapp');
             } else {
-                Yii::warning("WhatsApp сообщение отправлено, но не удалось сохранить запись для телефона {$phone}.", 'whatsapp');
+                Yii::warning("WhatsApp сообщение отправлено, но не удалось сохранить запись для телефона {$phone}." . json_encode($record->getErrors(), JSON_UNESCAPED_UNICODE), 'whatsapp');
             }
         } catch (\Exception $e) {
             Yii::error("Ошибка отправки WhatsApp сообщения для телефона {$phone}: " . $e->getMessage(), 'whatsapp');
index 7ad5f0a5718b354cc742967c66b652fe655ad582..fe9d024245cb26a2a3e465b4f4ae078144839046 100644 (file)
@@ -9,6 +9,7 @@ use Psr\Http\Message\ResponseInterface;
 use Yii;
 use yii\base\Arrayable;
 use yii\base\Exception;
+use yii_app\helpers\DataHelper;
 use yii_app\records\UsersMessageManagement;
 
 /**
@@ -131,7 +132,7 @@ class WhatsAppService
      *
 
      */
-    public function sendMessage($requestId, $phone, $message, $startTime = null, $ttl = null, $isTest = false)
+    public function sendMessage($requestId, $phone, $message, $isTest = false, $startTime = null, $ttl = null)
     {
 
         if (!$message) {
@@ -141,7 +142,7 @@ class WhatsAppService
         $channel = self::getChannelByName('WABA');
         $subjectId = $channel['subjectId'] ?? 11374;
 
-        $requestId = $requestId ?? uniqid();
+        $requestId = $requestId ?? DataHelper::uuid();
         // Формируем фильтр получателя по номеру телефона
         $subscriberFilter = [
             'address' => $phone,
@@ -201,6 +202,7 @@ class WhatsAppService
             $payload['ttl'] = $ttl;
         }
         $apiUrl = self::$apiBaseUrl . '/cascade/schedule';
+        Yii::warning(json_encode($payload, JSON_UNESCAPED_UNICODE));
         try {
             $response = $this->client->request('POST', $apiUrl, [
                 'headers' => [
@@ -221,11 +223,11 @@ class WhatsAppService
                 if (!$errorMessage) {
                     $errorMessage = "Ошибка: код " . $response->getStatusCode() . ". " . $errorDetail;
                 }
-                Yii::error($errorMessage);
+                Yii::error($errorMessage, 'response');
                 return $errorKey;
             }
         } catch (RequestException $e) {
-            Yii::error("Ошибка при выполнении запроса: " . $e->getMessage());
+            Yii::error("Ошибка при выполнении запроса: " . $e->getMessage(), 'request');
             return null;
         }
     }