יש לי קוד שמעלה לשלוחה את זמני התפילות לפי המבנה הזה
זה הנתונים בגוגל שיטס
18/01/2026
יום ראשון
בא
שחרית
בשעה 6:15, בהיכל גדול. בשעה 6:55, בהיכל קטן. בשעה 8:10, בהיכל גדול.
מנחה
בשעה 12:45, בהיכל קטן. בשעה 13:00, בהיכל גדול. בשעה 16:50, בהיכל גדול.
מעריב
בשעה 17:30, בהיכל גדול. בשעה 19:00, בהיכל קטן. בשעה 21:00, בהיכל גדול. בשעה 22:15, בהיכל גדול.
זה הסקריפט
function uploadTtsBySmartLogic() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const targetSheet = ss.getSheetByName("מעובד");
const configSheet = ss.getSheetByName("זמני התפילות");
// יצירת גיליון לוג אם לא קיים
let logSheet = ss.getSheetByName("לוג העלאה");
if (!logSheet) {
logSheet = ss.insertSheet("לוג העלאה");
logSheet.appendRow(["זמן הרצה", "שלוחה", "תאריך יעד", "סטטוס"]);
}
if (!targetSheet) return;
const token = configSheet ? configSheet.getRange("J2").getValue() : "";
const baseUrl = "https://www.call2all.co.il/ym/api/UploadFile";
if (!token) return;
const today = new Date();
const dayOfWeek = today.getDay(); // 0=ראשון... 6=שבת
const dateRow = targetSheet.getRange(1, 1, 1, 100).getValues()[0];
function getColumnDataByOffset(daysToAdd) {
let targetDate = new Date(today);
targetDate.setDate(today.getDate() + daysToAdd);
let targetStr = Utilities.formatDate(targetDate, "GMT+2", "dd/MM/yyyy");
for (let i = 0; i < dateRow.length; i++) {
let cellValue = dateRow[i];
let cellStr = "";
if (cellValue instanceof Date) {
cellStr = Utilities.formatDate(cellValue, "GMT+2", "dd/MM/yyyy");
} else if (cellValue) {
cellStr = cellValue.toString();
}
if (cellStr == targetStr) {
return {
data: targetSheet.getRange(1, i + 1, 15, 1).getValues(),
dateText: targetStr
};
}
}
return null;
}
function getNextOccurrenceOffset(targetDay) {
let diff = (targetDay - dayOfWeek + 7) % 7;
return diff === 0 ? 7 : diff;
}
const logicMap = [
{ folder: "18/1/1", offset: 0 },
{ folder: "18/1/2", offset: 1 },
{ folder: "18/1/3", offset: getNextOccurrenceOffset(5) },
{ folder: "18/1/4", offset: getNextOccurrenceOffset(6) },
{ folder: "18/1/5", offset: getNextOccurrenceOffset(0) },
{ folder: "18/1/6", offset: getNextOccurrenceOffset(1) },
{ folder: "18/1/7", offset: getNextOccurrenceOffset(2) },
{ folder: "18/1/8", offset: getNextOccurrenceOffset(3) },
{ folder: "18/1/9", offset: getNextOccurrenceOffset(4) }
];
logSheet.appendRow([new Date(), "--- תחילת הרצה ---", "", ""]);
logicMap.forEach(item => {
let result = getColumnDataByOffset(item.offset);
if (!result) {
logSheet.appendRow([new Date(), item.folder, "לא נמצא תאריך מתאים", "שגיאה"]);
return;
}
let columnData = result.data;
let shacharit = columnData[5][0] ? "שחרית. " + columnData[5][0] : "";
let mincha = columnData[8][0] ? "מנחה. " + columnData[8][0] : "";
let arvit = columnData[11][0] ? "מעריב. " + columnData[11][0] : "";
let all = [shacharit, mincha, arvit].filter(t => t.length > 0).join(" ");
let files = [
{ name: "001.tts", content: shacharit },
{ name: "002.tts", content: mincha },
{ name: "003.tts", content: arvit },
{ name: "004.tts", content: all }
];
files.forEach(file => {
if (file.content && file.content.length > 5) {
uploadSingleFile(baseUrl, token, item.folder, file.name, file.content);
}
});
// כתיבה ללוג
logSheet.appendRow([new Date(), item.folder, result.dateText, "עודכן בהצלחה"]);
});
}
function uploadSingleFile(baseUrl, token, folder, fileName, content) {
let path = 'ivr2:' + folder + '/' + fileName;
try {
UrlFetchApp.fetch(baseUrl, {
'method': 'post',
'payload': {
'token': token,
'path': path,
'file': Utilities.newBlob(content, 'text/plain', fileName)
},
'muteHttpExceptions': true
});
} catch (e) {
console.error("שגיאה בהעלאה: " + e.message);
}
}
שלוחת תפריט בתוכה 9 שלוחות מצורף תמונה של מבנה השלוחות [image: 1773698731428-38791181-32e6-4c3e-8a9c-c6b35f89cb3f-image.png]
הקבצים עולים 001,002,003,004 הגדרות השלוחות הם השמעת קבצים אם תפריט לבחירה התפריט הוא
לתפילת שחרית הקש 1 לתפילת מנחה 2 לתפילת ערבית 3 לכל התפילות 4
ניתן לשנות את הקוד כמובן לצרכים שלכם הוא מוגבל בסריקת העמודות והשורות לחיסכון במשאבים