שיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
-
@חסיד-פשוט
וזה ישחרר לכולם או רק לי ?@שקיעות-בלימוד רק לך.
-
function tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) console.log(response) return response.candidates[0].content.parts[0].inlineData.data } function test(){ const text = "בדיקת tts gemini"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const blob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(blob); }ואז הורדת הקובץ מהדרייב והמרה בעזרת ffmpeg
ffmpeg -f s16le -ar 24000 -ac 1 -i test.pcm test.wavצריך למצוא דרך להמיר את זה בגוגל סקריפט.
עריכה:
הצלחתיfunction tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) return response.candidates[0].content.parts[0].inlineData.data } function createWavFromPcm(pcmBytes, sampleRate, numChannels, bitsPerSample) { const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmBytes.length; const fileSize = 44 - 8 + dataSize; const header = []; function pushString(s) { for (let i = 0; i < s.length; i++) header.push(s.charCodeAt(i)); } function pushUint32LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF, (val >> 16) & 0xFF, (val >> 24) & 0xFF); } function pushUint16LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF); } pushString("RIFF"); pushUint32LE(fileSize); pushString("WAVE"); pushString("fmt "); pushUint32LE(16); pushUint16LE(1); pushUint16LE(numChannels); pushUint32LE(sampleRate); pushUint32LE(byteRate); pushUint16LE(blockAlign); pushUint16LE(bitsPerSample); pushString("data"); pushUint32LE(dataSize); const headerBytes = new Uint8Array(header); const out = new Uint8Array(headerBytes.length + pcmBytes.length); out.set(headerBytes, 0); out.set(pcmBytes, headerBytes.length); return out; } function test(){ const text = "נשלחה אליך הודעת מייל חדשה בתאריך א כסליו תשפו"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const pcmBlob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(pcmBlob); const sampleRate = 24000; const channels = 1; const bits = 16; const wavBytes = createWavFromPcm(pcmBytes, sampleRate, channels, bits); const wavBlob = Utilities.newBlob(wavBytes, 'audio/wav', 'test.wav'); DriveApp.createFile(wavBlob); }אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
@האדם-החושב כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
זה מה שעשיתי לפני מספר שנים
לא רציתי לפרסם את זה כי לא הייתי בטוח שזה יהיה פשוט לכולם -
function tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) console.log(response) return response.candidates[0].content.parts[0].inlineData.data } function test(){ const text = "בדיקת tts gemini"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const blob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(blob); }ואז הורדת הקובץ מהדרייב והמרה בעזרת ffmpeg
ffmpeg -f s16le -ar 24000 -ac 1 -i test.pcm test.wavצריך למצוא דרך להמיר את זה בגוגל סקריפט.
עריכה:
הצלחתיfunction tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) return response.candidates[0].content.parts[0].inlineData.data } function createWavFromPcm(pcmBytes, sampleRate, numChannels, bitsPerSample) { const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmBytes.length; const fileSize = 44 - 8 + dataSize; const header = []; function pushString(s) { for (let i = 0; i < s.length; i++) header.push(s.charCodeAt(i)); } function pushUint32LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF, (val >> 16) & 0xFF, (val >> 24) & 0xFF); } function pushUint16LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF); } pushString("RIFF"); pushUint32LE(fileSize); pushString("WAVE"); pushString("fmt "); pushUint32LE(16); pushUint16LE(1); pushUint16LE(numChannels); pushUint32LE(sampleRate); pushUint32LE(byteRate); pushUint16LE(blockAlign); pushUint16LE(bitsPerSample); pushString("data"); pushUint32LE(dataSize); const headerBytes = new Uint8Array(header); const out = new Uint8Array(headerBytes.length + pcmBytes.length); out.set(headerBytes, 0); out.set(pcmBytes, headerBytes.length); return out; } function test(){ const text = "נשלחה אליך הודעת מייל חדשה בתאריך א כסליו תשפו"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const pcmBlob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(pcmBlob); const sampleRate = 24000; const channels = 1; const bits = 16; const wavBytes = createWavFromPcm(pcmBytes, sampleRate, channels, bits); const wavBlob = Utilities.newBlob(wavBytes, 'audio/wav', 'test.wav'); DriveApp.createFile(wavBlob); }אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
@האדם-החושב כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
ככה עשיתי בהתחלה, אבל זה כבר מסבך את המשתמש הפשוט לפרוס ולהכניס את הקישור, מה גם שיש משתמשים שחסום להם גוגל סקריפט, לכן עברתי לשיטה הזו
ואגב, לא הצלחתי לעשות שלוחת API שתעבוד טוב, כי משום מה אם יש @ בשליחה הוא נדפק
ואגב, זה לוקח לו כחצי שניה לבדוק שאין מייל חדש...
לגבי הTTS אבדוק בעז"ה
עריכה: בדקתי ועובד מצוין!
היום אין לי זמן, אולי במוצ"ש אעשה גירסא חדשה
כמדומה שכדאי שברירת מחדל זה יעבוד עם גוגל קלאוד (זה מהיר פי 10), ורק אם זה נכשל, כמו אם המפתח אינו של גוגל קלאוד זה יעבוד ככה, אשמח לחוות דעתך.
בנתיים יש מעלות לזה ולזה, למשל: בג'מיני אפשר לעשות קולות שונים לכותרות, אבל בגוגל קלאוד אפשר לשלוט על מהירות ההקראה. -
@האדם-החושב כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
ככה עשיתי בהתחלה, אבל זה כבר מסבך את המשתמש הפשוט לפרוס ולהכניס את הקישור, מה גם שיש משתמשים שחסום להם גוגל סקריפט, לכן עברתי לשיטה הזו
ואגב, לא הצלחתי לעשות שלוחת API שתעבוד טוב, כי משום מה אם יש @ בשליחה הוא נדפק
ואגב, זה לוקח לו כחצי שניה לבדוק שאין מייל חדש...
לגבי הTTS אבדוק בעז"ה
עריכה: בדקתי ועובד מצוין!
היום אין לי זמן, אולי במוצ"ש אעשה גירסא חדשה
כמדומה שכדאי שברירת מחדל זה יעבוד עם גוגל קלאוד (זה מהיר פי 10), ורק אם זה נכשל, כמו אם המפתח אינו של גוגל קלאוד זה יעבוד ככה, אשמח לחוות דעתך.
בנתיים יש מעלות לזה ולזה, למשל: בג'מיני אפשר לעשות קולות שונים לכותרות, אבל בגוגל קלאוד אפשר לשלוט על מהירות ההקראה.@פלמנמוני כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
בנתיים יש מעלות לזה ולזה, למשל: בג'מיני אפשר לעשות קולות שונים לכותרות, אבל בגוגל קלאוד אפשר לשלוט על מהירות ההקראה.
גם בgemini אפשר עם פרומפט, אם כי זה לא מדע מדוייק.
-
תודה על הסקריפט!
ניסיתי כמה פעמים, אבל הצלחתי להגיע רק להגדרה להכנסת מפתח של גוגל קלאוד [שהכנסתי]
אבל לא להכנסת מפתח של API של ג'מיני
כעת אני מקבל מיילים, אבל המיילים לא נשלחים ואולי זאת הבעיה?@מוח-קודח כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
ניסיתי כמה פעמים, אבל הצלחתי להגיע רק להגדרה להכנסת מפתח של גוגל קלאוד [שהכנסתי]
אבל לא להכנסת מפתח של API של ג'מיניעקרונית מפתח של גוגל קלאוד חועיל גם לג'מיני
אם יש לך דישה לגוגל סקריפט תריץ ידנית את הפונקציה (אחרי ששלחת מייל כמובן) ותבדוק את השגיאה בלוגים -
@מוח-קודח כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
ניסיתי כמה פעמים, אבל הצלחתי להגיע רק להגדרה להכנסת מפתח של גוגל קלאוד [שהכנסתי]
אבל לא להכנסת מפתח של API של ג'מיניעקרונית מפתח של גוגל קלאוד חועיל גם לג'מיני
אם יש לך דישה לגוגל סקריפט תריץ ידנית את הפונקציה (אחרי ששלחת מייל כמובן) ותבדוק את השגיאה בלוגים -
@פלמנמוני איזו פונקציה בדיוק?
רק הפונקציה הזו מציגה לי את השגיאה:
שגיאה
TypeError: Cannot read properties of undefined (reading 'getDate')
sendToYemot @ mailToPhone.gs:89

-
@מוח-קודח כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
איזו פונקציה בדיוק?
לא, או את הפונקציה הראשית mailToPhone או את processOutgoingMails
-
@מוח-קודח שים לב שבין הרצה להרצה אתה חייב להשאיר הודעה נוספת לשליחה כדי לבדוק את השגיאות
והשגיאה לא תגיע בשורה אדומה אלא כלוג רגיל, בדרך כלל -
תודה רבה לך על הסקריפט המושקע אני ועוד רבים ציפו לזה הרבה זמן...
מעריך את ההשקעה ואת הזמן שהקדשת עבור זה!
זכיתי שעשית לי אישור צפיה העתקתי את כל שלושת דפי הסקריפט לגיליון חדש
ואז לאחר לחיצה על "טיפול בהכל" עלה לי השגיאה זו
אשמח לתגובה מה הבעיה?
שוב תודה רבה ענקית!

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

-
גירסא 1.2
מה נוסף?
- אפשרות לקריינות ע"י ג'מיני (כלומר אין צורך במפתח של גוגל קלאוד, מי שרוצה יכול לשים מפתח של רגיל ג'מיני, קחו בחשבון שזה גורם האטה בפעולת הסקריפט).
@י.-י.-ל. כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
אשמח לתגובה מה הבעיה?
כמו שכתב לך @מוח-קודח
-