שגיאה בהעלת קובץ למערכת בAPI
-
שלום וברכה
אני מנסה לעלות קובץ למערכת דרך גוגל סקריפט אני משתמש בקוד הבאlet url_yemot_api = `https://www.call2all.co.il/ym/api/`; function test_token() { let token_yemot = SpreadsheetApp.getActiveSheet().getRange('settings!B6').getValue(); try { let req = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}GetSession?token=${token_yemot}`)); Logger.log("test_token.req=" + req.responseStatus); if (req.responseStatus === 'OK') { Logger.log("it's ok"); } else { Logger.log("Token is not valid, attempting to login again."); login_token(); // קורא שוב לפונקציה login_token לקבלת טוקן חדש } } catch (e) { Logger.log("Exception: " + e.message); login_token(); // אם קרה שגיאה בביצוע הבקשה, ננסה להתחבר מחדש } } function login_token() { let user = SpreadsheetApp.getActiveSheet().getRange('settings!B2').getValue(); let password = SpreadsheetApp.getActiveSheet().getRange('settings!B3').getValue(); let req; let counter = 0; while (req === undefined || req.responseStatus !== "OK") { req = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}Login?username=${user}&password=${password}`)); Logger.log(req.responseStatus); counter++; if (counter >= 5) { break; } } if (counter >= 5) { let recipient = Session.getActiveUser().getEmail(); let fileName = SpreadsheetApp.getActiveSheet().getParent().getName(); let fileUrl = SpreadsheetApp.getActiveSheet().getParent().getUrl(); let owner = SpreadsheetApp.getActiveSheet().getParent().getOwner().getEmail(); return; } Logger.log("req.token=" + req.token); SpreadsheetApp.getActiveSheet().getRange("settings!B6").setValue(req.token); } function uploadFileToServer() { // בדוק אם הטוקן תקף לפני שליחת הקובץ test_token(); let token_yemot = SpreadsheetApp.getActiveSheet().getRange('settings!B6').getValue(); // אם הטוקן לא תקף, הפונקציה test_token() צריכה להוציא טוקן חדש if (!token_yemot) { Logger.log("Token is not valid, cannot upload file."); return; } // פרטי הקובץ לשליחה const fileId = SpreadsheetApp.getActiveSheet().getRange('settings!B4').getValue(); // מזהה הקובץ בגוגל דרייב const uploadPath = SpreadsheetApp.getActiveSheet().getRange('settings!B5').getValue(); // נתיב ושם קובץ בשרת // אפשרות נוספת להוסיף פרמטרים נוספים במקרה הצורך const convertAudio = 1; // המרת אודיו לפורמט WAV const autoNumbering = true; // האם להפעיל מיספור אוטומטי (במקרה שה-API תומך בכך) const tts = 0; // הצהרה על קובץ tts try { // שליפת הקובץ מ-Google Drive const file = DriveApp.getFileById(fileId); const blob = file.getBlob(); // שליחת הקובץ לשרת עם הטוקן ופרמטרים נוספים const uploadUrl = `${url_yemot_api}UploadFile?token=${token_yemot}`; // שליחת הטוקן כ-parameter ב-URL const uploadPayload = { path: uploadPath, // נתיב היעד בשרת convertAudio: convertAudio, // המרת האודיו לפורמט WAV autoNumbering: autoNumbering, // הוספת מיספור אוטומטי (אם נדרש) File: blob // הקובץ עצמו }; const uploadOptions = { method: "post", headers: { "Authorization": `Bearer ${token_yemot}` // שליחת הטוקן כ-Bearer Token ב-header }, payload: uploadPayload, contentType: "multipart/form-data" }; const uploadResponse = UrlFetchApp.fetch(uploadUrl, uploadOptions); const uploadData = JSON.parse(uploadResponse.getContentText()); if (uploadData.responseStatus === "OK") { Logger.log("הקובץ הועלה בהצלחה! נתיב: " + uploadData.path); } else { Logger.log("שגיאה בהעלאת הקובץ: " + uploadData.message); } } catch (e) { Logger.log("שגיאה: " + e.message); } }
והתגובה שאני מקבל זה
path is requiredהבנתי שהבעייה זה בהגדרת הנתיב
אבל הנתיב מוגדר כמו שצריך
שיחקתי עם זה קצת ושום דבר לא עזר
אשמח לקבל את הכוונת חברי הפורום
תודה רבה -
@כוספים-למשיח כתב בשגיאה בהעלת קובץ למערכת בAPI:
אבל הנתיב מוגדר כמו שצריך
אנחנו לא רואים את הנתיב מהקוד שלך,
זה עונה על התיעוד?path | נתיב להעלאה | חובה |
עבור העלאת קבצים לתיקיות במערכת יש לציין בהתחלה ivr2: ולאחר מכן את הנתיב המלא. למשל לקובץ 000.wav בתיקייה 5 הנתיב יהיה ivr2:5/000.wav. שימו לב שבהעלאה רגילה חובה לציין את שם הקובץ הרצוי, בהעלאה עם מספור אוטומטי (ראה להלן) יש לציין את התיקייה בלבד -
@MGM-IVR כתב בשגיאה בהעלת קובץ למערכת בAPI:
@כוספים-למשיח כתב בשגיאה בהעלת קובץ למערכת בAPI:
אבל הנתיב מוגדר כמו שצריך
אנחנו לא רואים את הנתיב מהקוד שלך,
זה עונה על התיעוד?path | נתיב להעלאה | חובה |
עבור העלאת קבצים לתיקיות במערכת יש לציין בהתחלה ivr2: ולאחר מכן את הנתיב המלא. למשל לקובץ 000.wav בתיקייה 5 הנתיב יהיה ivr2:5/000.wav. שימו לב שבהעלאה רגילה חובה לציין את שם הקובץ הרצוי, בהעלאה עם מספור אוטומטי (ראה להלן) יש לציין את התיקייה בלבדזה נמצא בתא B5
וזה מה ששמתי שםivr2:/4/9/2
-
@כוספים-למשיח
תצרף את path ל url -
@לעזור-לכולם כתב בשגיאה בהעלת קובץ למערכת בAPI:
@כוספים-למשיח
תצרף את path ל urlתוכל לכוון אותי יותר מעשי איך בדיוק
-
@כוספים-למשיח
בשורה 72 תוסיף פרמטר path ואת המשתנה uploadPath -
@לעזור-לכולם כתב בשגיאה בהעלת קובץ למערכת בAPI:
@כוספים-למשיח
בשורה 72 תוסיף פרמטר path ואת המשתנה uploadPathכתבתי כך
const uploadUrl = `${url_yemot_api}UploadFile?token=${token_yemot}&path=${encodeURIComponent(uploadPath)}`; // שליחת token ו-path ב-URL
וקיבלתי את התגובה הבאה
path is invalid
-
@כוספים-למשיח
אוקיי
אז התקדמת, הוספת PATH אך הנתיב לא מוגדר נכון
תדפיס את uploadUrl ותבדוק מה הנתיב שהוא שולח -
@לעזור-לכולם כתב בשגיאה בהעלת קובץ למערכת בAPI:
uploadUrl
זה התגובה
ה-URL לשליחה הוא: https://www.call2all.co.il/ym/api/UploadFile?token=TOKEN&path=ivr2%3A%2F4%2F9%2F2 -
@כוספים-למשיח כתב בשגיאה בהעלת קובץ למערכת בAPI:
@לעזור-לכולם כתב בשגיאה בהעלת קובץ למערכת בAPI:
uploadUrl
זה התגובה
ה-URL לשליחה הוא: https://www.call2all.co.il/ym/api/UploadFile?token=TOKEN&path=ivr2%3A%2F4%2F9%2F2אני עדיין מקבל את השגיאה
path is invalid
למה זה קורה
ומה צריך לעשות כדי לתקן את זה? -
@כוספים-למשיח
תוריד את הURIENCODE -