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

    יעקב יצחק

    @יעקב יצחק

    58
    מוניטין
    106
    צפיות בפרופיל
    389
    פוסטים
    2
    עוקבים
    7
    עוקב אחרי
    תאריך הצטרפות
    נראה לאחרונה

    יעקב יצחק הפסקת מעקב מעקב

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

    • RE: מודל פרסומות

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

      הוא מקיש משהו ואז אתה מקבל דקות

      ולכן זה יצטרך להיות בתשלום, כדי שלא יחלק דקות לכל 😉השטיבל😉

      פורסם בבקשות לפיתוח
      י
      יעקב יצחק
    • אינדקס קבצי html שפורסמו בפורום

      נראה לי שאין כזה דבר עדיין, אז אני מתחיל:

      ממשק להגדרת "מספר אישי" (Routing Yemot) בקליק אחד
      העלאת קבצי שמע פלוס כותרת
      ממשק לצפייה בדו"חות
      ממשק לאקסס פילטר
      מציג לוגים מתקדם
      ממשק ליצירת שלוחות API
      קובץ להגדרת שלוחת קבלת נתונים
      העלאת קובץ tts בAPI
      קובץ ליצירת מהירה של תשובת API
      פורום ימות המשיח
      קריינות VoiceMaster
      פאנל ניהול מותאם אישית
      העלאת שמע למקום מסויים
      אינדקס המודלים

      פורסם בטיפים עצות והדגמות מהמשתמשים
      י
      יעקב יצחק
    • RE: האם זה "מוזר" לכתוב כל כך טוב?

      @מוזר
      מוזר

      פורסם בעל הפורום
      י
      יעקב יצחק
    • RE: נגמר התוקף ליחידות

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

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

      נוצר ע"י @הדיבל-המעופף (נוסף כעורך)
      ההגדרה בשלוחה:

      type=api
      api_link=https://listener-management.a775529301.workers.dev
      api_add_0=token=טוקן
      api_url_post=yes
      

      שימו לב שמספר המאזין שיש להקיש כדי לנתב הוא מספר סידורי ולא מספר טלפון

      פורסם בהסברים מסודרים ממשתמשים
      י
      יעקב יצחק
    • RE: דחוף!!! מאזינים נחסמים מרשי"ת אוטומאטי!! ⛔🚫

      @עידו
      רבנו אמר אין ייאוש בעולם כלל

      פורסם בעזרה הדדית למשתמשים מתקדמים
      י
      יעקב יצחק
    • קבוצת גוגל צ'אט למפתחי API

      בס"ד נפתחה קבוצה בגוגל צ'אט בנושא ימות המשיח, API ומה שביניהם.
      הקבוצה כוללת הדרכות מקצועיות (לא אני כותב) בעיקר בנושאים הבאים: תקשורת של API ויצירת קוד לימות המשיח באמצעות בינה.
      להצטרפות ניתן לפנות במייל.
      כרגע הקבוצה פתוחה בנטפרי, נקווה שכך יהיה גם בהמשך.

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

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

      /**
       * ==========================================
       * הגדרות קבועות
       * ==========================================
       */
      const YEMOT_TOKEN_FALLBACK = 'טוקן'; // הכנס כאן את הטוקן שלך
      const YEMOT_PATH = 'ivr2:נתיב';        // הכנס כאן את הנתיב לשלוחה (למשל: ivr2:1 או ivr2:1/2)
      const MINUTES_TO_KEEP = 4320;        // מספר הדקות לשמירה (4320 דקות = 3 ימים)
      
      function getYemotToken() {
        const fromProps = PropertiesService.getScriptProperties().getProperty('YEMOT_TOKEN');
        return fromProps || YEMOT_TOKEN_FALLBACK;
      }
      
      /**
       * ==========================================
       * הפונקציה הראשית - בודקת את השלוחה ומוחקת קבצים ישנים
       * ==========================================
       */
      function deleteOldFiles() {
        const token = getYemotToken();
        var urlGet = 'https://www.call2all.co.il/ym/api/GetIVR2Dir?token=' + encodeURIComponent(token) + '&path=' + encodeURIComponent(YEMOT_PATH);
      
        var stats = { checked: 0, deleted: 0, skippedSystem: 0, skippedFolder: 0, failed: 0 };
      
        try {
          var response = UrlFetchApp.fetch(urlGet, { muteHttpExceptions: true });
          var data = JSON.parse(response.getContentText());
      
          if (data.responseStatus !== 'OK' || !data.files) {
            Logger.log('שגיאה בקבלת נתוני השלוחה (בדוק טוקן ונתיב): ' + JSON.stringify(data));
            return;
          }
      
          var now = new Date();
          // חישוב זמן התפוגה לפי MINUTES_TO_KEEP (המרת דקות למילישניות)
          var expirationDate = new Date(now.getTime() - (MINUTES_TO_KEEP * 60 * 1000));
      
          for (var i = 0; i < data.files.length; i++) {
            var file = data.files[i];
            var fileName = file.name;
            var fileType = file.fileType;
            stats.checked++;
      
            // 0. דילוג על תיקיות
            if (fileType === 'FOLDER' || fileType === 'DIR' || file.isFolder === true) {
              stats.skippedFolder++;
              continue;
            }
      
            // 1. דילוג על קבצי INI
            if (fileType === 'INI' || fileName.toLowerCase().endsWith('.ini')) {
              stats.skippedSystem++;
              continue;
            }
      
            // 2. דילוג על הודעות מערכת של המשתמש (כגון M1000.wav)
            if (/^[Mm]\d{4}\.(wav|mp3|ogg|wma)$/.test(fileName)) {
              stats.skippedSystem++;
              continue;
            }
      
            // 3. בדיקת תאריך הקובץ
            if (file.mtime) {
              var parts = file.mtime.split(/[- :]/);
              if (parts.length === 6) {
                var fileDate = new Date(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]);
      
                if (isNaN(fileDate.getTime())) {
                  Logger.log('תאריך לא תקין לקובץ ' + fileName + ': "' + file.mtime + '" - מדלג.');
                  continue;
                }
      
                if (fileDate < expirationDate) {
                  Logger.log('הקובץ ' + fileName + ' הועלה בתאריך ' + file.mtime + ' והתיישן. מתחיל מחיקה...');
                  var ok = deleteFileFromYemot(token, YEMOT_PATH + '/' + fileName);
                  if (ok) stats.deleted++; else stats.failed++;
                }
              }
            }
          }
      
          Logger.log('סיכום ריצה: נבדקו ' + stats.checked + ', נמחקו ' + stats.deleted +
            ', דולגו (מערכת) ' + stats.skippedSystem + ', דולגו (תיקיות) ' + stats.skippedFolder +
            ', כשלונות מחיקה ' + stats.failed);
      
        } catch (e) {
          Logger.log('שגיאה כללית בתהליך: ' + e.toString());
        }
      }
      
      /**
       * ==========================================
       * פונקציית עזר למחיקת הקובץ בפועל
       * ==========================================
       */
      function deleteFileFromYemot(token, filePath) {
        var urlDelete = 'https://www.call2all.co.il/ym/api/FileAction';
        var payload = {
          'token': token,
          'action': 'delete',
          'what': filePath
        };
      
        var options = {
          'method': 'post',
          'payload': payload,
          'muteHttpExceptions': true
        };
      
        try {
          var response = UrlFetchApp.fetch(urlDelete, options);
          var text = response.getContentText();
          var result;
          try {
            result = JSON.parse(text);
          } catch (parseErr) {
            Logger.log('תגובה לא תקינה (לא JSON) למחיקת ' + filePath + ' -> ' + text);
            return false;
          }
      
          if (result.responseStatus === 'OK') {
            Logger.log('נמחק בהצלחה: ' + filePath);
            return true;
          }
          Logger.log('מחיקה נכשלה עבור ' + filePath + ' -> ' + text);
          return false;
        } catch (e) {
          Logger.log('שגיאה במחיקת ' + filePath + ': ' + e.toString());
          return false;
        }
      }
      
      /**
       * ==========================================
       * הגדרת הטריגר (להרצה פעם אחת בלבד מהעורך)
       * ==========================================
       */
      function setupTrigger() {
        var triggers = ScriptApp.getProjectTriggers();
        for (var i = 0; i < triggers.length; i++) {
          if (triggers[i].getHandlerFunction() === 'deleteOldFiles') {
            ScriptApp.deleteTrigger(triggers[i]);
          }
        }
      
        ScriptApp.newTrigger('deleteOldFiles')
                 .timeBased()
                 .everyMinutes(1)
                 .create();
      
        Logger.log('הטריגר הוגדר בהצלחה! הפונקציה deleteOldFiles תרוץ כעת אוטומטית פעם בדקה.');
      }
      
      פורסם בטיפים עצות והדגמות מהמשתמשים
      י
      יעקב יצחק
    • RE: ממשק להגדרת "מספר אישי" (Routing Yemot) בקליק אחד! 🚀💎

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

      <!DOCTYPE html>
      <html lang="he" dir="rtl">
      <head>
          <meta charset="UTF-8">
          <title>הגדרת מספר אישי</title>
          <style>
              body {
                  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
                  background: linear-gradient(45deg, #0f2027, #203a43, #2c5364);
                  height: 100vh;
                  display: flex;
                  justify-content: center;
                  align-items: center;
                  margin: 0;
                  color: #fff;
              }
              .container {
                  background: rgba(255, 255, 255, 0.1);
                  backdrop-filter: blur(15px);
                  padding: 40px;
                  border-radius: 25px;
                  box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
                  width: 380px;
                  border: 1px solid rgba(255, 255, 255, 0.1);
                  text-align: center;
              }
              h2 { margin-bottom: 30px; font-weight: 300; letter-spacing: 1px; }
              label {
                  display: block;
                  text-align: right;
                  font-size: 13px;
                  opacity: 0.8;
                  margin: 10px 2px 2px;
              }
              input {
                  width: 100%;
                  padding: 14px;
                  margin: 4px 0;
                  border: none;
                  border-radius: 12px;
                  background: rgba(255, 255, 255, 0.05);
                  color: #fff;
                  font-size: 16px;
                  border: 1px solid rgba(255, 255, 255, 0.2);
                  transition: 0.3s;
                  box-sizing: border-box;
              }
              input:focus {
                  outline: none;
                  background: rgba(255, 255, 255, 0.15);
                  border-color: #00d2ff;
              }
              button {
                  width: 100%;
                  padding: 15px;
                  margin-top: 25px;
                  border: none;
                  border-radius: 12px;
                  background: linear-gradient(to right, #00d2ff, #3a7bd5);
                  color: white;
                  font-size: 18px;
                  font-weight: bold;
                  cursor: pointer;
                  transition: transform 0.2s, box-shadow 0.3s, opacity 0.2s;
              }
              button:hover:not(:disabled) {
                  transform: translateY(-2px);
                  box-shadow: 0 10px 20px rgba(0, 210, 255, 0.4);
              }
              button:disabled {
                  opacity: 0.6;
                  cursor: not-allowed;
                  transform: none;
                  box-shadow: none;
              }
              #status {
                  margin-top: 25px;
                  font-size: 14px;
                  font-weight: bold;
                  min-height: 20px;
              }
              .success { color: #00ffcc; }
              .error { color: #ff6666; }
          </style>
      </head>
      <body>
      
      <div class="container">
          <h2>הגדרת מספר אישי</h2>
      
          <label for="systemNum">מספר מערכת</label>
          <input type="text" id="systemNum" placeholder="מספר מערכת" inputmode="numeric" autocomplete="off">
      
          <label for="password">סיסמת ניהול</label>
          <input type="password" id="password" placeholder="סיסמת ניהול" autocomplete="current-password">
      
          <button id="submitBtn" onclick="setupRouting()">הגדר על שלוחה ראשית</button>
          <div id="status" role="status" aria-live="polite"></div>
      </div>
      
      <script>
          const numInput = document.getElementById('systemNum');
          const passInput = document.getElementById('password');
          const submitBtn = document.getElementById('submitBtn');
          const statusDiv = document.getElementById('status');
      
          // אפשר גם לשלוח עם Enter מתוך שדה הסיסמה, לא רק בלחיצה על הכפתור
          passInput.addEventListener('keydown', (e) => {
              if (e.key === 'Enter') setupRouting();
          });
      
          async function setupRouting() {
              const num = numInput.value.trim();
              const pass = passInput.value;
      
              if (!num || !pass) {
                  statusDiv.className = 'error';
                  statusDiv.innerText = 'אנא הזן מספר מערכת וסיסמה';
                  return;
              }
      
              submitBtn.disabled = true;
              statusDiv.className = '';
              statusDiv.innerText = 'מבצע הגדרה, נא להמתין...';
      
              // קידוד תקין של כל פרמטר בנפרד - מונע שבירת הכתובת אם הסיסמה/המספר
              // מכילים תווים מיוחדים כמו & # % + : וכד'.
              const params = new URLSearchParams({
                  token: `${num}:${pass}`,
                  path: 'ivr2:/',
                  type: 'routing_yemot',
                  routing_yemot_number: num
              });
              const url = `https://www.call2all.co.il/ym/api/UpdateExtension?${params.toString()}`;
      
              try {
                  const response = await fetch(url);
      
                  let data;
                  try {
                      data = await response.json();
                  } catch (parseErr) {
                      statusDiv.className = 'error';
                      statusDiv.innerText = 'התקבלה תשובה לא תקינה מהשרת';
                      return;
                  }
      
                  if (response.ok && data.responseStatus === 'OK') {
                      statusDiv.className = 'success';
                      statusDiv.innerText = `הוגדר בהצלחה מספר אישי למערכת ומספר המערכת: ${num}`;
                  } else {
                      statusDiv.className = 'error';
                      statusDiv.innerText = `לא ניתן להגדיר מספר אישי למערכת ${num}: סיסמה או מספר שגויים`;
                  }
              } catch (error) {
                  statusDiv.className = 'error';
                  statusDiv.innerText = 'שגיאת תקשורת: ודא שיש חיבור אינטרנט תקין';
              } finally {
                  submitBtn.disabled = false;
              }
          }
      </script>
      
      </body>
      </html>
      
      פורסם בטיפים עצות והדגמות מהמשתמשים
      י
      יעקב יצחק
    • RE: בקשת API נגן יוטיוב פעיל להטמעה בשלוחה

      @יעקב-לוי-0 כתב:

      אשמח מאוד אם מישהו יוכל לתת לי לינק (API) עובד שאפשר להטמיע ב-api_post

      אתה מתכוון למפתח API של יוטיוב??

      פורסם בפורום מפתחים API
      י
      יעקב יצחק

    פוסטים אחרונים שנוצרו על ידי יעקב יצחק

    • RE: תגובות למודול המונופול הטלפוני

      בלת"ק חלקי
      המשחק הזה נגמר בסוף?
      אני כבר כשעה בטלפון!⌚

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

      נוצר ע"י @הדיבל-המעופף (נוסף כעורך)
      ההגדרה בשלוחה:

      type=api
      api_link=https://listener-management.a775529301.workers.dev
      api_add_0=token=טוקן
      api_url_post=yes
      

      שימו לב שמספר המאזין שיש להקיש כדי לנתב הוא מספר סידורי ולא מספר טלפון

      פורסם בהסברים מסודרים ממשתמשים
      י
      יעקב יצחק
    • RE: מערכת קליקי

      @מוטי-מוטי-מוטי נראה לי שלזה הוא מתכוון

      פורסם בעזרה הדדית למשתמשים מתקדמים
      י
      יעקב יצחק
    • RE: יש אפשרות שמיעת מספרי המאזינים כעת דרך הטלפון?

      @הדיבל-המעופף יצר ופרסם את זה:

      type=api
      api_link=https://listener-management.a775529301.workers.dev
      api_add_0=token=טוקן
      api_url_post=yes
      
      פורסם בשאלות ועזרה הדדית
      י
      יעקב יצחק
    • RE: השמעת כמה הודעות בAPI עם אפשרות דילוג

      @דוד-5555 זה עוזר לך?

      פורסם בפורום מפתחים API
      י
      יעקב יצחק
    • RE: מה המספר הודעה של

      @פיתה כתב:

      ושל "הרישום בוצעה בהצלחה"

      M1888 הרישום התבצע בהצלחה
      לזה התכוונת?

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

      @מסובך-מאוד הוא שאל על הודעות שלא מופיעות כאן (או שהן לא קיימות)

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

      @איל-משולש בטוח שמבנה הקובץ נשאר תקין? נראה לי שלזה התכוון @הדיבל-המעופף

      פורסם בעזרה הדדית למשתמשים מתקדמים
      י
      יעקב יצחק
    • RE: הרשאת כניסה מול API

      @CUBASE כתב בפילטר הפניה API:

      במודול הזה א"א לנהל אינטרקציה עם המאזין אבל אם זה המטרה שלך אז פשוט תשתמש במודול API רגיל.

      קשור? או שיכול להיות שפרמטרים כן אפשר לשלוח?

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

      > @sh0548534047 כתב:

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

      בפרט שהורתו ולידתו של השרשור הזה בסוכות הקודם...

      פורסם בטיפים עצות והדגמות מהמשתמשים
      י
      יעקב יצחק