• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות
    1. דף הבית
    2. BEN ZION
    3. הגבוה ביותר
    B
    מחובר
    • פרופיל
    • עוקב אחרי 2
    • עוקבים 1
    • נושאים 76
    • פוסטים 524
    • קבוצות 0

    פוסטים

    פוסטים אחרונים הגבוה ביותר שנוי במחלוקת
    • RE: קריסה

      @אדם אתה מבין שאתה לא יכול לתת אמון במערכת שפתאום מתחילים לקרות כל מיני קריסות מוזרות ואין לך יכולת לגבות את המערכת
      ומי יודע מה יהיה עוד חודש?

      פורסם בבאגים במערכת
      B
      BEN ZION
    • RE: קריסה

      @אדם מה היה קורה אם הטלפון האישי שלך היה מפסיק לעבוד או שאתה מנהל שירות לקוחות של מאות אנשים ופתאום אין מענה ואין לך איך להבהיר להם מה הבעיה ובהתחשב בזה שלפני לא זוכר כמה זמן גם קרה משהו כזה זה מוגזם!!

      פורסם בבאגים במערכת
      B
      BEN ZION
    • RE: מייל פון

      @יוני2 אין צורך להגיב לנושא מלפני 4 שנים

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION
    • RE: הגדרת תנאי משתמש

      @לומד-עס תודה רבה

      פורסם בשאלות ועזרה הדדית
      B
      BEN ZION
    • RE: האם זה "מוזר" לכתוב כל כך טוב?

      @מוזר אני אוהב את הסגנון שאתה כותב לי אין סבלנות לעשות את זה אבל באמת אם כל אחד היה חושב לפני שהוא כותב, הרבה שאלות לא היו כי היה יותר קל למצוא תשובות מפוסטים שכבר נכתבו
      תודה על ההשקעה ועל ההערכה מערכים מאד👍 👑

      פורסם בעל הפורום
      B
      BEN ZION
    • קוד לספר טלפונים אם זיהוי דיבור

      קרדיט ל @איל-משולש חלק מהקוד ממנו והרעיון כולו שלו
      מצרף קוד לאלפון אם זיהוי דיבור הקוד מבוסס על תרגום גוגל קלוד הוא לוקח את השמות מרשימת תפוצה
      הקוד לשרת

      <?php
      ob_start();
      
      require __DIR__ . '/vendor/autoload.php';
      
      use Google\Cloud\Speech\V1\SpeechClient;
      use Google\Cloud\Speech\V1\RecognitionConfig;
      use Google\Cloud\Speech\V1\RecognitionConfig\AudioEncoding;
      use Google\Cloud\Speech\V1\RecognitionAudio;
      
      /* ---------------- 1. פונקציות עזר ---------------- */
      
      function normalizeText($text) {
          $text = mb_strtolower($text, 'UTF-8');
          $text = preg_replace('/[^\p{Hebrew}\p{Latin}\s]/u', '', $text);
          return trim(preg_replace('/\s+/', ' ', $text));
      }
      
      function smartNameMatchScore($transcript, $nameTemplate) {
          $wordsTranscript = explode(' ', normalizeText($transcript));
          $wordsTemplate   = explode(' ', normalizeText($nameTemplate));
      
          $scoreFamily = 0;   // משקל 55
          $bestNameMatch = 0; // השם הכי חזק יקבל 35
          $secondBestName = 0; // השם הבא בתור יקבל 10
      
          $familyWord = $wordsTemplate[0] ?? '';
          $givenNamesTemplate = [];
          if (isset($wordsTemplate[1])) $givenNamesTemplate[] = $wordsTemplate[1];
          if (isset($wordsTemplate[2])) $givenNamesTemplate[] = $wordsTemplate[2];
      
          foreach ($wordsTranscript as $wordUser) {
              // בדיקת שם משפחה
              similar_text($wordUser, $familyWord, $pFamily);
              if ($pFamily > $scoreFamily) $scoreFamily = $pFamily;
      
              // בדיקה דינמית מול השמות הפרטיים
              foreach ($givenNamesTemplate as $templateName) {
                  similar_text($wordUser, $templateName, $pName);
                  if ($pName > $bestNameMatch) {
                      $secondBestName = $bestNameMatch;
                      $bestNameMatch = $pName;
                  } elseif ($pName > $secondBestName) {
                      $secondBestName = $pName;
                  }
              }
          }
      
          $finalScore = ($scoreFamily * 0.55) + ($bestNameMatch * 0.35) + ($secondBestName * 0.10);
      
          // חסימה אם לא נאמר שם פרטי ברור (מונע זיהוי שגוי של משפחה בלבד)
          if ($bestNameMatch < 70) {
              $finalScore = min($finalScore, 68); 
          }
      
          return $finalScore;
      }
      
      /* ---------------- 2. ניהול תיקיות ---------------- */
      
      $callId = $_GET['ApiCallId'] ?? 'unknown';
      $cacheDir = __DIR__ . '/people_cache';
      $logDir = __DIR__ . '/logs';
      
      if (!is_dir($cacheDir)) @mkdir($cacheDir, 0775, true);
      if (!is_dir($logDir)) @mkdir($logDir, 0775, true);
      
      $sessionFile = $cacheDir . '/session_' . $callId . '.json';
      $token = $_GET['token'] ?? '';
      $call = $_GET['call'] ?? '';
      $exit = $_GET['exit'] ?? '';
      
      /* ---------------- 3. טיפול בהקשות (MySelection) ---------------- */
      
      if (isset($_GET['MySelection'])) {
          $choice = trim($_GET['MySelection']);
          $sessionData = file_exists($sessionFile) ? json_decode(file_get_contents($sessionFile), true) : [];
          
          ob_end_clean();
          header('Content-Type: text/plain; charset=utf-8');
      
          if ($choice == '1') {
              $txt = $sessionData['full_text'] ?? "אין נתונים לשמיעה חוזרת";
              die("read=t-$txt=MySelection,no,1,1,7,no,no,no,,1.2.3.4,,,,,no");
          } elseif ($choice == '2') {
              $phone = $sessionData['phone'] ?? '';
              if ($phone && $token) {
                  $updateUrl = "https://www.call2all.co.il/ym/api/UpdateExtension?token=" . urlencode($token) . "&path=ivr2:/15/NIT&type=nitoviya&nitoviya_dial_to=" . urlencode($phone);
                  @file_get_contents($updateUrl);
              }
              @unlink($sessionFile);
              die("go_to_folder=NIT");
          } elseif ($choice == '3') {
              @unlink($sessionFile); die($_GET['call'] ?? '');
          } elseif ($choice == '4') {
              @unlink($sessionFile); die($_GET['exit'] ?? '');
          }
          exit;
      }
      
      /* ---------------- 4. תמלול וחיפוש ---------------- */
      
      $rapi = $_GET['rapi'] ?? '';
      $templateId = $_GET['templateId'] ?? '';
      if (!$token || !$rapi) exit;
      
      $downloadUrl = "https://www.call2all.co.il/ym/api/DownloadFile?token=" . urlencode($token) . "&path=ivr2:" . urlencode($rapi);
      $audioData = @file_get_contents($downloadUrl);
      
      $transcriptText = '';
      if ($audioData) {
          try {
              $client = new SpeechClient(['credentials' => __DIR__ . '/key.json']);
              $audio = (new RecognitionAudio())->setContent($audioData);
              $config = (new RecognitionConfig())->setEncoding(AudioEncoding::LINEAR16)->setLanguageCode('he-IL');
              $response = $client->recognize($config, $audio);
              foreach ($response->getResults() as $result) {
                  $alt = $result->getAlternatives();
                  if (!empty($alt[0])) $transcriptText .= $alt[0]->getTranscript() . " ";
              }
          } catch (Exception $e) {
              ob_end_clean(); die('go_to_folder=/95');
          } finally {
              if (isset($client)) $client->close();
          }
      }
      
      $normalized = normalizeText($transcriptText);
      if (!$normalized) { ob_end_clean(); die('go_to_folder=/95'); }
      
      /* בדיקה ב-Cache */
      $transcriptKey = md5($normalized);
      $fastCacheFile = $cacheDir . '/fast_text_' . $transcriptKey . '.json';
      
      $matchedEntry = null;
      $bestScore = 0;
      $source = "Cache";
      
      if (file_exists($fastCacheFile)) {
          $matchedEntry = json_decode(file_get_contents($fastCacheFile), true);
          $bestScore = 100; 
      } else {
          $source = "New Search";
          $templateUrl = "https://www.call2all.co.il/ym/api/GetTemplateEntries?token=" . urlencode($token) . "&templateId=" . urlencode($templateId);
          $templateData = json_decode(@file_get_contents($templateUrl), true);
          
          if (isset($templateData['entries'])) {
              foreach ($templateData['entries'] as $entry) {
                  $score = smartNameMatchScore($normalized, $entry['name'] ?? '');
                  if ($score > $bestScore) {
                      $bestScore = $score;
                      $matchedEntry = $entry;
                  }
              }
          }
          if ($matchedEntry && $bestScore >= 75) {
              file_put_contents($fastCacheFile, json_encode($matchedEntry + ['transcript' => $transcriptText], JSON_UNESCAPED_UNICODE));
          }
      }
      
      /* ---------------- 5. שמירת לוג לבקרה מורחבת ---------------- */
      
      $logContent = "--- [" . date('Y-m-d H:i:s') . "] ---\n";
      $logContent .= "Call ID: $callId\n";
      $logContent .= "Audio Path (rapi): $rapi\n";
      $logContent .= "Transcript: $transcriptText\n";
      $logContent .= "Source: $source\n";
      if ($matchedEntry) {
          $logContent .= "Matched Name: " . ($matchedEntry['name'] ?? 'N/A') . " (" . round($bestScore, 2) . "%)\n";
          $logContent .= "Result: SUCCESS\n";
      } else {
          $logContent .= "Best Score Found: " . round($bestScore, 2) . "%\n";
          $logContent .= "Result: FAILED\n";
      }
      $logContent .= "---------------------------\n\n";
      
      file_put_contents($logDir . '/audit_log_' . date('Y-m') . '.txt', $logContent, FILE_APPEND);
      
      /* ---------------- 6. פלט סופי ---------------- */
      
      ob_end_clean();
      header('Content-Type: text/plain; charset=utf-8');
      
      if ($matchedEntry && $bestScore >= 75) {
          $name = $matchedEntry['name'] ?? '';
          $phone = $matchedEntry['phone'] ?? '';
          $info = $matchedEntry['moreinfo'] ?? 'אין מידע נוסף';
          
          $cleanInfo = str_replace([',', '=', '.', '"', "'"], ' ', $info);
          $fullSayText = "נמצאו פרטים עבור $name טלפון $phone כתובת $cleanInfo לשמיעה חוזרת הקישו 1, לחיוג הקישו 2, לחיפוש חדש הקישו 3, לביטול וחזרה הקש 4";
          
          file_put_contents($sessionFile, json_encode(['full_text' => $fullSayText, 'phone' => $phone], JSON_UNESCAPED_UNICODE));
          
          echo "read=t-$fullSayText=MySelection,no,1,1,7,no,no,no,,1.2.3.4,,,,,no";
      } else {
          echo 'go_to_folder=/95';
      }
      exit;
      

      הקוד עבר עדכון החיפוש יותר חכם
      אצלי מוגדר בשגיאה מעבר לשלוחה 95 שזה ניתוק
      ההגדרות בשלוחה

      type=api
      title=אלפון קהילה
      api_link=קישור לשרת
      api_add_0=token=טוקן אני השתמשתי בחדש
      api_add_1=templateId=מזהה רשימת תפוצה
      api_add_2=call=go_to_folder=/נתיב השלוחה לחיפוש חוזר
      api_add_3=exit=go_to_folder=/נתיב השלוחה לביטול וחזרה אצלי זה בתוך מערכת וואצפון זה מחזיר למערכת
      
      api_000=rapi,,record,/15/api,,no
      
      
      
      api_hangup_send=no
      api_phone_send=no
      api_did_send=no
      api_enter_id_send=no
      api_enter_id_name_send=no
      api_time_send=no
      api_call_id_send=yes
      

      הקוד שומר כל זיהוי טקסט שנמצא אם הטלפון והמידע הנוסף ככה בפעמים הבאות הוא לא צריך לחפש ברשימה אלא שולף מהזיכרון יש 4 אופציות שמיעה חוזרת, חיוג, חיפוש חדש, ביטול וחזרה
      אשמח לקבל הערות והארות

      אם מישהו יוכל להגדיר תמלול בגימיני ושישלחו מפתח גימני אני אולי אפרסם קישור פתוח לתועלת הציבור

      פורסם בהסברים מסודרים ממשתמשים
      B
      BEN ZION
    • RE: יש אפשרות לחסום כל משתמש מלהתקשר לקו תוכן חוץ ממספר אחד או שתים?

      @מי-יודע-0 יש לך פילטר לפי רשימה לבנה או לפי רשימת תפוצה

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION
    • RE: בקשת יחידות

      @מוטי-מוטי-מוטי אני יעביר לך 20 ותחזיר לי 19

      פורסם בשאלות ועזרה הדדית
      B
      BEN ZION
    • RE: ניתוב למשאיר ההודעה בחינם

      @איל-משולש עכשיו שמודל תור ללא פרסומות וללא עלות אתה יכול לעשות את אותו דבר על מודל תור

      פורסם בטיפים עצות והדגמות מהמשתמשים
      B
      BEN ZION
    • פורמט תאריך במודל הקשה

      כדאי מאד שבכל מוד הקשה יהיה אופציה להשמיע את הנתונים כתאריך DD/MM ברוב הפעמים השנה לא נפק"מ וזה סתם להקיש עוד 4 ספרות וכן גם בפורמט שנה אם אפשר שיהיה שנה בשתי ספרות DD/MM/YY
      @שמואל יש מצב כזה

      פורסם בבקשות לפיתוח
      B
      BEN ZION
    • RE: טלפון של yealink הגדרות

      @BEN-ZION בסייעתא דשמיא הבעייה הייתה שלא היה IP קבוע

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION
    • איך אפשר לפתוח מערכת עם מספר כשר

      איך אני יכול לפתוח מערכת IVR ממספר כשר אני פותח את המערכת ואז כדי שהיא תפעל צריך לחייג מהמספר של מישפתח את המערכת ואני לא יכול לחייג כי זה קו כשר
      איך ניתן לעקוף את זה?
      תודה

      פורסם בשאלות ועזרה הדדית
      B
      BEN ZION
    • RE: הוספת מספרים לוואטסאפפון

      @יעקב-יעקב-0 למה שלא תתן להם להוסיף את עצמם?

      פורסם בטיפים עצות והדגמות מהמשתמשים
      B
      BEN ZION
    • RE: שלוחת תפריט בתוך המערכת

      @פיתה אין לי מספיק דקות שיחה בכל קו וסגרו לי פעם את הקו ואז הייתי צריך לפתוח חדש אני רוצה ששתיהם יהיו באותה מערכת ככה יהיה מספיק דקות שיחה נכנסות

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION
    • RE: איך אפשר לפתוח מערכת עם מספר כשר

      @795069962 תודה רבה עזרת לי מאד

      פורסם בשאלות ועזרה הדדית
      B
      BEN ZION
    • RE: מתי ניתן לעקוף פרסומות?

      @פיתה צודק, אני פשוט לא שומע פרסומות

      פורסם בטיפים עצות והדגמות מהמשתמשים
      B
      BEN ZION
    • RE: שלוחת תפריט בתוך המערכת

      @פיתה לפני שנה יש לי גם עוד מערכת שלא פעילה ולא סגרו לי אותה אין לי מושג לפי מה הם סוגרים

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION
    • RE: צינתוק אחרי הקלטה

      @shz תודה רבה רבה עזרת לי מאד

      פורסם בשאלות ועזרה הדדית
      B
      BEN ZION
    • קוד php למודל שעון מעורר/תזכורות

      כתבתי קוד לשעון מעורר בסיוע בינה מלאכותית על בסיב קוד ש @איל-משולש העלה פה
      זה בנוי על שלוחת קבלת נתונים אם קוד PHP וגוגל סקריפט שמפעיל את השרת כל דקה
      קוד PHP

      <?php
      date_default_timezone_set('Asia/Jerusalem');
      
      // --- הגדרות ---
      $dbFile = 'reminders.sqlite';
      $logFile = 'debug.log';
      $SECRET_KEY = "MySecretKey123"; 
      
      function writeLog($message) {
          global $logFile;
          $timestamp = date('Y-m-d H:i:s');
          file_put_contents($logFile, "[$timestamp] $message" . PHP_EOL, FILE_APPEND);
      }
      
      try {
          $db = new PDO("sqlite:$dbFile");
          $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $db->exec("CREATE TABLE IF NOT EXISTS reminders (
              id INTEGER PRIMARY KEY AUTOINCREMENT,
              phone TEXT,
              start_type INTEGER,
              start_date TEXT,
              scheduled_time TEXT,
              repeat_count INTEGER,
              snooze_gap INTEGER,
              freq INTEGER,
              days_week_list TEXT,
              fixed_day_week INTEGER,
              fixed_day_month INTEGER,
              expiry_date TEXT,
              last_sent TEXT
          )");
      } catch (Exception $e) {
          writeLog("CRITICAL DATABASE ERROR: " . $e->getMessage());
          die("Database Error.");
      }
      
      $action = $_GET['action'] ?? 'none';
      
      // --- מצב א': שמירה ---
      if ($action === 'save') {
          $p = $_GET;
          $phone = preg_replace('/\D/', '', $p['Phone'] ?? '');
          $startType = (int)($p['P050'] ?? 0);
          
          writeLog("RECEIVE: New request from Phone: $phone, Type: $startType");
      
          if ($startType == 3) {
              $deleteAction = (int)($p['P059'] ?? 0);
              if ($deleteAction == 1) {
                  $stmt = $db->prepare("DELETE FROM reminders WHERE phone = ?");
                  $stmt->execute([$phone]);
              } elseif ($deleteAction == 2) {
                  $stmt = $db->prepare("DELETE FROM reminders WHERE id = (SELECT id FROM reminders WHERE phone = ? AND last_sent IS NOT NULL ORDER BY last_sent DESC LIMIT 1)");
                  $stmt->execute([$phone]);
              }
              echo "id_list_message=OK";
              exit;
          }
      
          $currentYear = date('Y');
          $rawDate = $p['P051'] ?? '';
          $startDate = (strlen($rawDate) === 4) ? "$currentYear-" . substr($rawDate, 2, 2) . "-" . substr($rawDate, 0, 2) : $rawDate;
          $rawTime = $p['P052'] ?? '';
          $timeStr = (strlen($rawTime) === 4) ? substr($rawTime, 0, 2) . ":" . substr($rawTime, 2, 2) : $rawTime;
          $rawExpiry = $p['P060'] ?? '';
          $expiryDate = (strlen($rawExpiry) === 4) ? "$currentYear-" . substr($rawExpiry, 2, 2) . "-" . substr($rawExpiry, 0, 2) : null;
      
          try {
              $sql = "INSERT INTO reminders (phone, start_type, start_date, scheduled_time, repeat_count, snooze_gap, freq, days_week_list, fixed_day_week, fixed_day_month, expiry_date) 
                      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
              $stmt = $db->prepare($sql);
              $stmt->execute([
                  $phone, $startType, $startDate, $timeStr,
                  (int)($p['P053'] ?? 1), (int)($p['P054'] ?? 0), (int)($p['P055'] ?? 1),
                  implode(',', str_split($p['P056'] ?? '')), (int)($p['P057'] ?? 0), (int)($p['P058'] ?? 0), $expiryDate
              ]);
              writeLog("SUCCESS: Reminder saved for $phone at $timeStr");
          } catch (Exception $e) {
              writeLog("SAVE ERROR: " . $e->getMessage());
          }
          echo "id_list_message=OK";
          exit;
      }
      
      // --- מצב ב': הרצה (Run) ---
      if ($action === 'run') {
          if (($_GET['secret'] ?? '') !== $SECRET_KEY) die("Unauthorized");
      
          $now = time();
          $today = date('Y-m-d');
          $currentDayOfWeek = date('N') + 1; 
          if ($currentDayOfWeek > 7) $currentDayOfWeek = 1;
      
          // --- חישוב יום עברי עם החלפת יום בשקיעה ---
          $lat = 31.77; // Latitude (ירושלים)
          $long = 35.23; // Longitude
          
          // בדיקת זמן שקיעה להיום
          $sun_info = date_sun_info($now, $lat, $long);
          $sunset_timestamp = $sun_info['sunset'];
      
          // אם עכשיו אחרי השקיעה, נחשב לפי התאריך של מחר
          if ($now > $sunset_timestamp) {
              $calc_timestamp = strtotime('+1 day', $now);
              writeLog("DEBUG: After sunset. Calculating for tomorrow.");
          } else {
              $calc_timestamp = $now;
          }
      
          // המרה לתאריך עברי
          $jd = gregoriantojd(date('m', $calc_timestamp), date('d', $calc_timestamp), date('Y', $calc_timestamp));
          $hebrewDateStr = jdtojewish($jd); // פורמט: month/day/year
          $hebrewParts = explode('/', $hebrewDateStr);
          $hebrewDay = (int)$hebrewParts[1]; // היום בחודש העברי
      
          writeLog("DEBUG: Hebrew Day is: $hebrewDay");
          // ------------------------------------------
      
          $stmt = $db->query("SELECT * FROM reminders");
          $reminders = $stmt->fetchAll(PDO::FETCH_ASSOC);
          $phonesToCall = [];
          $idsToUpdate = [];
      
          foreach ($reminders as $r) {
              if ($r['expiry_date'] && $today > $r['expiry_date']) continue;
              if ($r['last_sent'] && date('Y-m-d H:i', strtotime($r['last_sent'])) === date('Y-m-d H:i', $now)) continue;
              
              // בתזכורת חודשית עברית (4) לא בודקים תאריך התחלה לועזי בצורה רגילה, אלא אם זה תזכורת חד פעמית
              if ($r['start_date'] && $today < $r['start_date']) continue;
              if ($r['freq'] == 1 && $today !== $r['start_date']) continue;
      
              $isTimeMatch = false;
              $baseMinutes = (int)substr($r['scheduled_time'], 0, 2) * 60 + (int)substr($r['scheduled_time'], 3, 2);
              $currentMinutes = (int)date('H') * 60 + (int)date('i');
      
              for ($i = 0; $i < $r['repeat_count']; $i++) {
                  if ($currentMinutes === ($baseMinutes + ($i * $r['snooze_gap']))) {
                      $isTimeMatch = true;
                      break;
                  }
              }
              if (!$isTimeMatch) continue;
      
              $shouldTrigger = false;
              if ($r['freq'] == 1) $shouldTrigger = true;
              elseif ($r['freq'] == 2) {
                  $allowed = array_map('trim', explode(',', $r['days_week_list']));
                  if (empty($r['days_week_list']) || in_array((string)$currentDayOfWeek, $allowed)) $shouldTrigger = true;
              }
              elseif ($r['freq'] == 3 && $r['fixed_day_week'] == $currentDayOfWeek) $shouldTrigger = true;
              // כאן הבדיקה לתאריך עברי:
              elseif ($r['freq'] == 4 && $r['fixed_day_month'] == $hebrewDay) $shouldTrigger = true;
      
              if ($shouldTrigger) {
                  $phonesToCall[] = $r['phone'];
                  $idsToUpdate[] = $r['id'];
              }
          }
      
          if (!empty($phonesToCall)) {
              writeLog("CALLING: " . count($phonesToCall) . " numbers.");
              
              $token = "YOUR_TOKEN"; 
              $callerId = "YOUR_CALLER_ID";
              $finalUrl = "https://www.call2all.co.il/ym/api/RunTzintuk?token={TOKEN}&callerId={CALLERID&phones=tzl:" . implode(',', $phonesToCall);
              
              // שליחה עם Timeout קצר כדי לא לתקוע את הסקריפט
              $ctx = stream_context_create(['http'=> ['timeout' => 5]]);
              $res = @file_get_contents($finalUrl, false, $ctx);
              
              $nowTs = date('Y-m-d H:i:s');
              $updateStmt = $db->prepare("UPDATE reminders SET last_sent = ? WHERE id = ?");
              foreach ($idsToUpdate as $id) {
                  $updateStmt->execute([$nowTs, $id]);
              }
          }
      }
      

      קוד לגוגל סקריפט

      function triggerPhpServer1() {
        const SERVER_URL = "קישור לקוד PHP"; 
        const SECRET_KEY = "MySecretKey123";
        
        try {
          const response = UrlFetchApp.fetch(SERVER_URL + "?action=run&secret=" + SECRET_KEY);
          console.log(response.getContentText());
        } catch (e) {
          console.error("Server is down: " + e.message);
        }
      }
      

      הגדרות בשלוחה

      type=recording_and_entering_data
      title=תזכורות
      add_phone_dial_to_list_all_information=yes
      start_first=data
      050-option=1-1-5-TTS--123-CheckGoTo
      051-option=4-4-5-Digits---CheckGoTo
      052-option=4-4-5-Time---CheckGoTo
      053-option=1-1-5-Digits---CheckGoTo
      054-option=2-1-3-Number---CheckGoTo
      055-option=1-1-5-TTS--1234-CheckGoTo
      056-option=6-1-5-TTS---CheckGoTo
      057-option=1-1-5-TTS--123456-CheckGoTo
      058-option=2-1-5-TTS---CheckGoTo
      059-option=1-1-5-TTS---CheckGoTo
      060-option=4-4-4-Digits---CheckGoTo
      
      say_approval_number=say_approval_no_number
      recording_and_entering_data_ok_sand_api=yes
      recording_and_entering_data_ok_sand_api_link=קישור לקוד PHP
      

      אלו הנתונים בשאלות על פי הם הקוד עובד

      050 – בחירת מועד התזכורת
      
      היום → הקש 1
      
      תאריך אחר → הקש 2
      
      לביטול הקש 3
      051 – הזנת תאריך
      הזן את התאריך ב־4 ספרות (יום וחודש).
      לדוגמה: 04/08 → 0408
      
      052 – הזנת שעה
      הזן את השעה ב־4 ספרות (שעות ודקות).
      לדוגמה: 08:30 → 0830
      
      053 – מספר חזרות
      הגדר כמה פעמים המערכת תתקשר (נודניק).
      
      054 – מרווח בין צלצולים
      הזן את משך הזמן בין צלצול לצלצול.
      
      055 – סוג התזכורת
      
      חד־פעמית → 1
      
      יומית → 2
      
      שבועית → 3
      
      חודשית → 4
      
      056 – בחירת ימים לתזכורת יומית
      בחר את הימים בשבוע: 1 = ראשון, 2 = שני, 3 = שלישי, 4 = רביעי, 5 = חמישי, 6 = שישי.
      לדוגמה: ראשון ורביעי → 1,4
      
      057 – יום בשבוע לתזכורת שבועית
      בחר יום אחד בשבוע (1–6).
      
      058 – יום בחודש לתזכורת חודשית
      בחר יום בחודש (1–31) 11 = י"א 15= ט"ו וכו'.
      
      059 – מחיקת תזכורות
      
      כל התזכורות → 1
      
      התזכורת האחרונה → 2
      
      ביטול → 3
      
      060 – תאריך סיום
      הזן את התאריך האחרון לקבלת התזכורת.
      

      ההגדרות בקובץ RecordingAndEnteringDataCheckGoTo

      050-1=052
      050-2=051
      050-3=059
      053-1=055
      055-1=End-/95
      055-2=056
      055-3=057
      055-4=058
      056=060
      057=060
      058=060
      059=End-/95
      060=End-/95
      

      שלוחה 95 זה ניתוק לא הצלחתי להגדיר העברה לניתוק בסיום
      שעון מעורר אם אופציה של נודניק תזכורת יומית שבועית וחודשית לפי התאריך העברי בחודש כולל חישוב מהשקיעה אני מאמין שניתן להתאים לגוגל סקריפט
      אני הגדרתי על כל בחירה בקובץ TTS שיקריא את הנבחר לדגומא בתזכורת חודשית אם לחץ 11 זה מקריא י"א לחודש וכו' מי שרוצה עוד פרטים אשמח לשתף צריך להירשם לצינתוקים איישים חינם כמו פה
      קבצי השאלות יצירה על ידי בינה

      פורסם בהסברים מסודרים ממשתמשים
      B
      BEN ZION
    • RE: עזרה בינתוב למשכיר ההודעה

      @haiims
      בשלוחת NIT

      type=nitoviya
      nitoviya_dial_to=
      

      בשלוחת השמעת קבצים

      control_play_moreA0=send_api
      api_link=https://nituv-u1oq.onrender.com//api/process
      api_add_0=A=טוקן מערכת
      

      יש לך פה זה המקור

      פורסם בעזרה הדדית למשתמשים מתקדמים
      B
      BEN ZION