דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
א

אין

@אין
אודות
פוסטים
91
נושאים
17
שיתופים
0
קבוצות
0
עוקבים
1
עוקב אחרי
0

פוסטים

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

  • בירור | Google AI Pro בני משפחה שימוש בAI
    א אין

    @אלי-ויל https://one.google.com/u/3/settings?expand=family&hl=iw&g1_landing_page=1&utm_source=google-account&utm_medium=web
    צריך להפעיל את האופציה

    עזרה הדדית - בינה מלאכותית

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @פלמנמוני זה יעבוד?

    ||` רעיון מצוין. מכיוון שהקוד שלך כבר מוגדר לעבוד עם Gemini (יש לך GEMINI_API_KEY), הפתרון הכי אלגנטי וחכם הוא להשתמש ביכולות ה-Multimodal (רב-חושיות) של המודל.

    המודלים החדשים של ג'מיני (כמו gemini-1.5-flash או 2.0) יודעים "להסתכל" על קובץ PDF או תמונה, ולהוציא משם את הטקסט או לתאר מה רואים, וכל זה בעברית.

    להלן השינויים הנדרשים בקוד.

    שלב 1: הוספת פונקציה לניתוח קבצים
    הוסף את הפונקציה החדשה הזו לסוף הסקריפט שלך. הפונקציה הזו מקבלת קובץ, שולחת אותו לג'מיני ומבקשת סיכום קצר בעברית.
    שלב 2: עדכון הפונקציה sendToYemot
    עליך להחליף את הפונקציה sendToYemot הקיימת בקוד שלך בפונקציה המעודכנת הזו. מה השתנה? הוספתי לולאה שעוברת על הקבצים המצורפים, קוראת לפונקציה החדשה שיצרנו, ומוסיפה את התיאור שלהם לגוף ההודעה (ttsString).
    סבר טכני קצר
    מודל gemini-1.5-flash: בחרתי במודל זה כי הוא מהיר מאוד ("Flash") ויעיל כלכלית, ובעל יכולת ראייה (Vision) חזקה.

    הגבלת קבצים: בקוד החדש, הגדרתי שהמערכת תנתח רק את 2 הקבצים הראשונים (Math.min(Attachments.length, 2)). הסיבה היא שכל קובץ לוקח זמן עיבוד (2-4 שניות), ואם למייל יש 10 קבצים מצורפים, הסקריפט עלול לחרוג מזמן הריצה המותר של גוגל (Timeout).

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

    function analyzeFileWithGemini(fileBlob) {
      if (!GEMINI_API_KEY) return "";
      
      const mimeType = fileBlob.getContentType();
      // רשימת סוגי קבצים נתמכים (PDF ותמונות)
      const supportedTypes = ['application/pdf', 'image/jpeg', 'image/png', 'image/webp'];
      
      if (!supportedTypes.includes(mimeType)) {
        Logger.log(`סוג קובץ לא נתמך לניתוח: ${mimeType}`);
        return "";
      }
    
      // בדיקת גודל קובץ (מומלץ לא לשלוח קבצים ענקיים לסקריפט)
      if (fileBlob.getBytes().length > 4 * 1024 * 1024) { // מגבלה של 4MB למניעת עומס
         return " [קובץ מצורף גדול מדי לניתוח] ";
      }
    
      const base64Data = Utilities.base64Encode(fileBlob.getBytes());
      const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${GEMINI_API_KEY}`;
    
      const payload = {
        "contents": [{
          "parts": [
            {"text": "נתח את הקובץ המצורף. אם זה מסמך טקסט או PDF, סכם את התוכן העיקרי שלו בקיצור נמרץ בעברית (עד 3 משפטים). אם זו תמונה, תאר מה רואים בה בקיצור בעברית. אל תוסיף הקדמות, רק את התוכן."},
            {
              "inline_data": {
                "mime_type": mimeType,
                "data": base64Data
              }
            }
          ]
        }]
      };
    
      const options = {
        'method': 'post',
        'contentType': 'application/json',
        'payload': JSON.stringify(payload),
        'muteHttpExceptions': true
      };
    
      try {
        const response = UrlFetchApp.fetch(apiUrl, options);
        const json = JSON.parse(response.getContentText());
        
        if (json.candidates && json.candidates[0].content) {
          const summary = json.candidates[0].content.parts[0].text.trim();
          return `. תוכן הקובץ ${fileBlob.getName()}: ${summary}. `;
        }
      } catch (e) {
        Logger.log(`שגיאה בניתוח קובץ עם ג'מיני: ${e}`);
      }
      return "";
    }
    
    function sendToYemot(message) {
      const lMap = {'א':'אל"ף','ב':'בי"ת','ג':'גימ"ל','ד':'דל"ת','ה':'ה"א','ו':'ו"ו','ז':'זי"ן','ח':'חי"ת','ט':'טי"ת','י':'יו"ד','כ':'כ"ף','ל':'למ"ד','מ':'מ"ם','נ':'נו"ן','ס':'סמ"ך','ע':'עי"ן','פ':'פ"א','צ':'צדי"ק','ק':'קו"ף','ר':'רי"ש','ש':'שי"ן','ת':'ת"ו'};
      const MessageDate = message.getDate();
      const FormattedHebrewDate = new Intl.DateTimeFormat('he-IL-u-ca-hebrew').format(MessageDate);
      const HebrewDay = ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'];
      const DateParts = FormattedHebrewDate.split(" ");
      const NumericDay = gimatria(DateParts[0]).split('').map(c => lMap[c] || c).join(' ');
      const MonthAndYear = DateParts.slice(1, -1).join(" ");
      const NumericYear = gimatria(DateParts[DateParts.length - 1].slice(-3)).split('').map(c => lMap[c] || c).join(' ');
      
      let subjectTranslate, bodyTranslate;
      try {subjectTranslate = LanguageApp.translate(message.getSubject(), '', 'iw');
      } catch (err) {Logger.log(`Error translating subject: ${err}`); subjectTranslate = message.getSubject();}
      try {bodyTranslate = LanguageApp.translate(message.getPlainBody(), '', 'iw');
      } catch (err) {Logger.log(`Error translating body: ${err}`); bodyTranslate = message.getPlainBody();}
      
      // --- חלק חדש: טיפול בקבצים מצורפים ---
      const Attachments = message.getAttachments();
      const AttachmentNames = Attachments.map(file => file.getName());
      let attachmentsContentSummary = "";
      
      // לולאה לניתוח תוכן הקבצים (מוגבל ל-2 קבצים ראשונים למניעת עומס זמן ריצה)
      if (GEMINI_API_KEY && Attachments.length > 0) {
        for (let i = 0; i < Math.min(Attachments.length, 2); i++) {
           attachmentsContentSummary += analyzeFileWithGemini(Attachments[i]);
        }
      }
      // -------------------------------------
    
      const fullSender = message.getFrom();
      let senderName = fullSender;
      if (fullSender.includes('<')) {senderName = fullSender.split('<')[0].trim();
        if (senderName === "") {senderName = fullSender.split('<')[1].split('@')[0].trim();}
      } else if (fullSender.includes('@')) {senderName = fullSender.split('@')[0].trim();}
      
      const TtsStringTitle = `${TextSender}. ${senderName}. ${TextSubject}. ${subjectTranslate}. ${AttachmentNames.length ? `${TextAttachments}. ${AttachmentNames.join(', ')}` : `${TextNoAttachments}.`} ${TextHour} ${MessageDate.getHours()} ${TextAnd} ${MessageDate.getMinutes()} ${TextMinute}. ${TextDay} ${HebrewDay[MessageDate.getDay()]}. ${TextDate} ${NumericDay} ${MonthAndYear} ${NumericYear}.`;
      
      // הוספת סיכום הקבצים לגוף ההודעה
      let ttsString = `${TextBody}. ${bodyTranslate}. ${attachmentsContentSummary}`; 
      
      ReplacementPatterns.forEach(pattern => {const regex = new RegExp(pattern[0], 'g'); const replacement = pattern[1]; ttsString = ttsString.replace(regex, replacement);});
      
      // כאן הגדלתי מעט את החיתוך כי נוסף טקסט מהקבצים
      ttsString = ttsString.substring(0, 3500) + TextEnd; 
      
      Logger.log("מחרוזת כותרת להקראה:", { TtsStringTitle });
      Logger.log("מחרוזת גוף להקראה (כולל קבצים):", { ttsString });
      
      const MaxFileName = fetch('GetIVR2DirStats', { token, path: PathArchive });
      
      if (MaxFileName.responseStatus === 'OK') {const LastFileName = MaxFileName.maxFile?.name?.split('.')[0]; const NewFileNumber = (LastFileName !== undefined) ? Number(LastFileName) + 1 : 0; const NewFileName = NewFileNumber.toString().padStart(3, '0');
        if (GOOGLE_API_KEY) {Logger.log("נמצא מפתח API. משתמש ב-Google TTS ליצירת קבצי שמע.");
          try {const titleBlob = googleTts(TtsStringTitle, GOOGLE_API_KEY, GOOGLE_TTS_LANG, GOOGLE_TTS_VOICE);
            const bodyBlob = googleTts(ttsString, GOOGLE_API_KEY, GOOGLE_TTS_LANG, GOOGLE_TTS_VOICE);
            if (!titleBlob || !bodyBlob) {Logger.log("שגיאה ביצירת קבצי השמע מ-Google TTS. עובר למצב UploadTextFile."); throw new Error("TTS failed");}
            Logger.log(`מעלה קבצים לימות המשיח...`);
            const UploadResultTitle = uploadBlobToYemot(titleBlob, PathArchive, `${NewFileName}-Title.mp3`, token, true);
            const UploadResult = uploadBlobToYemot(bodyBlob, PathArchive, `${NewFileName}.mp3`, token, true);
            return UploadResult && UploadResultTitle;
          } catch (e) {Logger.log(`אירעה שגיאה כוללת בתהליך ה-TTS. ממשיך ל-UploadTextFile: ${e}`);}
        }
        Logger.log("חסר מפתח API או שה-TTS נכשל. משתמש במנגנון UploadTextFile.");
        try {const UploadResultTitle = fetch('UploadTextFile', {token, what: `${PathArchive}${NewFileName}-Title.tts`, contents: TtsStringTitle,});
            const UploadResult = fetch('UploadTextFile', {token, what: `${PathArchive}${NewFileName}.tts`, contents: ttsString});
            return UploadResult.responseStatus === 'OK' && UploadResultTitle.responseStatus === 'OK';
        } catch (e) {Logger.log(`אירעה שגיאה בשימוש ב-UploadTextFile: ${e}`); return false;}}return false;
    }||
    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @חזקיהו
    מוחקים גיליון אחד

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @חזקיהו לדעתי יש לך שתי גיליונות שיטס פעילות

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

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

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

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

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @פלמנמוני
    זה https://console.cloud.google.com/marketplace/product/google/generativelanguage.googleapis.com?q=search&referrer=search&project=vigilant-alloy-479312-r7 עובד עכשיו מצוין

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @פלמנמוני
    אני אנסה שוב להפעיל את האישורים בפרויקט חדש כי בנתיים ניסיתי את שתי האופציות ועבד לי רק עם Generative Language API והתמלול לא יצא טוב

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @פלמנמוני
    זה הלוג Gemini response error: {"error":{"code":403,"message":"Generative Language API has not been used in project 872992128670 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=872992128670 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.","status":"PERMISSION_DENIED","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"SERVICE_DISABLED","domain":"googleapis.com","metadata":{"activationUrl":"https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=872992128670","serviceTitle":"Generative Language API","service":"generativelanguage.googleapis.com","consumer":"projects/872992128670","containerInfo":"872992128670"}},{"@type":"type.googleapis.com/google.rpc.LocalizedMessage","locale":"en-US","message":"Generative Language API has not been used in project 872992128670 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=872992128670 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."},{"@type":"type.googleapis.com/google.rpc.Help","links":[{"description":"Google developers console API activation","url":"https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/overview?project=872992128670"}]}]}}

    האם להפעיל את Cloud Speech-to-Text API או את Generative Language API (Gemini)

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

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

    רשתות

  • שיתוף | 'פלאפון מייל' - כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
    א אין

    @פלמנמוני
    תודה רבה זה נפלא!
    משום מה בשליחת מייל זה נתקל בבעיה וכתוב"(התקבל קובץ קולי אך התמלול נכשל)
    "

    רשתות

  • בירור | שחזור מידע מכונן DVR
    א אין

    @מתכנת-חובב
    השאלה כמה יעלה?

    חומרה

  • בירור | שחזור מידע מכונן DVR
    א אין

    @משחזר-מידע @מתכנת-חובב
    במערכת מצלמות DVR שתוכנן מלכת' שישמור את התוכן 30 יום
    האם ניתן לשחזר תוכן מלפני ארבעים יום?

    חומרה

  • המלצה | גירסה כשרה לנגן M36 עם otg גירסא 2.00 (כולל חסימת אפשרויות מפתחים ולוגו של q6)
    א אין

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

    נגנים ותוכנותיהם

  • מדריך | מדריך להכשרת הנגן m36
    א אין

    @ezerphone
    בתכלס זה לא עובד

    נגנים ותוכנותיהם

  • מדריך | מדריך להכשרת הנגן m36
    א אין

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

    נגנים ותוכנותיהם

  • מדריך | מדריך להכשרת הנגן m36
    א אין

    @ezerphone
    מה שפתוח בנטפרי

    נגנים ותוכנותיהם

  • מדריך | מדריך להכשרת הנגן m36
    א אין

    @ezerphone
    כרום (108) בלי להיכנס לחשבון (זה מה שיש כרגע)

    נגנים ותוכנותיהם

  • מדריך | מדריך להכשרת הנגן m36
    א אין

    @ezerphone Screenshot_20250424-083104.png

    נגנים ותוכנותיהם
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר