העלאת קובץ מגוגל דרייב למערכת דרך api
-
כתבתי קוד כזה בגוגל סקריפט:
function UploadFile_to_yemot(){ let file_link = SpreadsheetApp.getActiveSheet().getRange('VoiceMail!B6').getValue(); let fileid = file_link.split(/\/file\/d\/([^\/]+)/)[1]; console.log (fileid) let file = DriveApp.getFileById(fileid); let blob = file.getBlob(); let headers = {'Content-type': 'multipart/form-data'}; let data_3 = { 'token': token,'path': "ivr2:/0/M1012.wav", 'convertAudio': 1, autoNumbering: false, tts:0,'upload': blob }; let options_3 = { 'method': 'post','headers': headers, 'payload': data_3}; let request_3 = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}UploadFile`, options_3)) console.log(request_3) }הטוקן עובד לי בפונקציות אחרות מצויין, אבל משום מה כאן אני מקבל את המענה הבא:
{ yemotAPIVersion: 6,
responseStatus: 'EXCEPTION',
message: 'IllegalStateException(session token is required)' }
בתודה מראש -
איפה אתה מצהיר על המשתנה
token? -
@amp-Software-0 בפונקצייה נפרדת, כפי שאמרתי, הטוקן תקין לגמרי
-
@האדם-החושב
באותו תחום?
השגיאה מראה שחסר לך את הטוקן, אז תלך על הכיוון הזה
מה מודפס לך ב logger.log(token) ? -
@amp-Software-0 הטוקן עובד לי בהעלאת קבצי טקסט, שליחת צינתוקים, עריכת קמפיינים ועוד
ב logger.log(token) מודפס לי הטוקן -
@האדם-החושב יכול להיות שאתה שולח את הטוקן בget בעוד הבקשה היא בפוסט?
-
@אביי-ורבא אני לא כ"כ מבין בזה, אבל הטוקן נמצא בdata_3
let data_3 = { 'token': token,'path': "ivr2:/0/M1012.wav", 'convertAudio': 1, autoNumbering: false, tts:0,'upload': blob }שנשלח בפוסט למיטב הבנתי
let options_3 = { 'method': 'post','headers': headers, 'payload': data_3}; -
@האדם-החושב
תנסה לצרף את הטוקן url עצמו כ GET כדי לבודד את הבעיה:let request_3 = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}UploadFile?token=` + token, options_3)) -
@amp-Software-0 כתב בהעלאת קובץ מגוגל דרייב למערכת דרך api:
- token
עזר לטוקן, אבל עכשיו אני נתקל בשגיאה של הנתיב:
{ responseStatus: 'ERROR',
message: 'path is required',
messageCode: 109,
yemotAPIVersion: 6,
success: false } -
@האדם-החושב
אוקי, אז הצלחנו לבודד את הבעיה
הדרך שבה אתה שולח את הנתונים אינה תקינה ולכן הפרמטרים לא נשלחו,
אתה יכול כמובן לשלוח את הכל דרך ה GET אבל הקובץ עצמו חייב להישלח ב bodyתנסה את זה:
function UploadFile_to_yemot(){ let file_link = SpreadsheetApp.getActiveSheet().getRange('VoiceMail!B6').getValue(); let fileid = file_link.split(/\/file\/d\/([^\/]+)/)[1]; console.log (fileid) let file = DriveApp.getFileById(fileid); let blob = file.getBlob(); let headers = {'Content-type': 'multipart/form-data'}; var formData = new FormData(); formData.append('token', token); formData.append('path', "ivr2:/0/M1012.wav"); formData.append('convertAudio', 1); formData.append('autoNumbering', false); formData.append('tts', 0); formData.append('upload', blob); let options_3 = { 'method': 'post','headers': headers, 'payload': formData}; let request_3 = JSON.parse(UrlFetchApp.fetch(`${url_yemot_api}UploadFile`, options_3)) console.log(request_3) } -
@amp-Software-0
ReferenceError: FormData is not defined -
@האדם-החושב
נכון, זה לא קיים בגוגל סקריפט..
תנסה אולי לשלוח את כל הפרמטרים ב GET ותשלח את הקובץ ישירות ב payload -
@האדם-החושב נסה להשתמש עם זה:
(ההדפסות ללוג מכוונות)
function sendToYemot(file, path) { let convert = '1'; let autoNumbering = 'false'; Logger.log(`yemot: path=ivr2:/${path}, convertAudio=${convert}, autoNumbering=${autoNumbering}`) let data = { 'token': token_yemot, 'path': `ivr2:/${path}`, 'convertAudio': convert, 'autoNumbering': autoNumbering, 'contents': file }; let options = { 'method': 'post', 'payload': data }; let request = UrlFetchApp.fetch(`${url_yemot_api}UploadFile`, options); let yemotJson = JSON.parse(request.getContentText()); Logger.log("סטטוס התגובה: " + request.getResponseCode() + "\nוטקסט התגובה הוא: " + request.getContentText()) if (request.getResponseCode() == 200 && yemotJson.responseStatus == 'OK') { return true; } else { errorMessages.push(`שגיאה: העלאת הקובץ ${file.getName()} לנתיב ivr2:/${path} עם הפרמטרים convertAudio=${convert}, autoNumbering=${autoNumbering} נכשלה. להלן טקסט התגובה: ${request.getResponseCode()}, ${request.getContentText()}`); return false; } }
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות