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

    BEN ZION

    @BEN ZION

    69
    מוניטין
    68
    צפיות בפרופיל
    524
    פוסטים
    1
    עוקבים
    2
    עוקב אחרי
    תאריך הצטרפות
    נראה לאחרונה
    מיקום נוף הגליל

    BEN ZION הפסקת מעקב מעקב

    הפוסטים הטובים ביותר שנוצרו על ידי BEN ZION

    • 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

    פוסטים אחרונים שנוצרו על ידי BEN ZION

    • טלזכור במודל צינתוקים

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

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

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

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

      @Ppgishonim מודול תור ללא יחידות
      מודל ניתוביה

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

      @Ppgishonim אתה יכול להשתמש במודל תור החדש או במודל ניתוביה להפנות למספר מחוץ לימות ללא עלות יחידות

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

      @יעקב-יצחק יש לך יכולת ניוד באתר

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

      @קו-הווארט-היומי שלחתי מייל

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

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

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

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

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

      @קו-הווארט-היומי אתה מבין קצת בהגדרות?

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

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

      cope.html
      

      תפתח את הקובץ ותפעל לפי ההוראות

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