שליחת וובהוק על שינוי שורה בגוגל שיטס

איך זה עובד

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

שלב 1: הגדרת המשתנים

  1. פתחו את הגוגל שיטס שעליו תרצו לעבוד.
  2. בתפריט, לחצו על: Extensions → Apps Script.
  3. העתיקו את הסקריפט הבא והתאימו את המשתנים הבאים:
const sheetName  = "Sheet1";        // שם הגיליון שלכם
const webhookUrl = "https://...";   // כתובת הוובהוק אליה תרצו לקבל את המידע
const checkCol   = 3;               // מספר עמודת הבדיקה (A=1, B=2, C=3...)
const triggerWord   = "Yes";               // המילה שתופיע בעמודת הבדיקה ותפעיל את הטריגר

הסבר

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

הסבר על עמודת הבדיקה: הוובהוק יופעל רק כאשר בעמודה זו כתוב בדיוק מה שרשמתם במשתנה triggerWord, למשל "Yes" - כך אפשר לשלוט במדויק מתי ה-webhook יורה.

המלצה: לצורך הפישוט והנוחות הצגתי את הסקריפט בצורה הזאת. מומלץ יותר לשים את כל הגדרות המשתנים כמו שהן בקובץ סקריפט נפרד, ואת שאר הקוד לשים בקובץ הראשי.

שלב 2: הוספת הפונקציה

זו הפונקציה שתרוץ כל פעם שיהיה שינוי, היא תשתמש במשתנים שהגדרנו קודם בשלב 1. העתיקו אותה כפי שהיא בדיוק:

function editRow(e) {
    if (e.changeType == "EDIT" || e.changeType == "INSERT_ROW") {
        var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = spreadsheet.getSheetByName(sheetName);
        var row = sheet.getActiveRange().getRow();

        var valueToCheck = sheet.getRange(row, checkCol).getValue().toUpperCase(); // Get value and convert to uppercase

        if (valueToCheck == triggerWord) {
            // Get all values from the sheet
            var allValues = sheet.getDataRange().getValues();

            // Get non-empty column names from the header row
            var nonEmptyColumnNames = [];
            for (var i = 0; i < allValues[0].length; i++) {
                if (allValues[0][i] !== "") {
                    nonEmptyColumnNames.push(allValues[0][i]);
                }
            }

            // Get the edited row data
            var editedRow = allValues[row - 1]; // Remember arrays are zero-indexed

            // Get current time in Israel time
            var now = new Date().toLocaleString("he-IL", {
                day: '2-digit',
                month: '2-digit',
                year: 'numeric',
                hour: '2-digit',
                minute: '2-digit',
                timeZone: "Israel",
                hour12: false
            }).replace(',', '').replace('.', '/').replace('.', '/');

            var sheetName = sheet.getSheetName();
            var documentName = sheet.getParent().getName();
            var sheetId = spreadsheet.getId();

            // Create payload with non-empty column names as keys
            var payload = {
                "Date": now,
                "Document Name": documentName,
                "Spreadsheet ID": sheetId,
                "Sheet Name": sheetName,
                "Row Number": row
            };

            for (var i = 0; i < nonEmptyColumnNames.length; i++) {
                payload[nonEmptyColumnNames[i]] = editedRow[i];
            }

            var options = {
                'method': 'post',
                'contentType': 'application/json',
                'payload': JSON.stringify(payload)
            };
            UrlFetchApp.fetch(webhookUrl, options);
        }
    }
}

שלב 3 ואחרון: הגדרת Trigger

הגדרת Trigger

  1. עברו ל-מפעילים/Triggers.
  2. הוסיפו trigger חדש, במקור האירוע בחרו: מגיליון אלקטרוני.
  3. בסוג האירוע בחרו: בעת ביצוע שינוי.
  4. שמרו.

זהו, סיימתם את שלב ההתקנה! 🙂

דוגמא לוובהוק במייק


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


שאלות? צרו קשר ב-WhatsApp.

המאמר עזר? שתפו: שיתוף בווצאפ

תגובות

עדיין אין תגובות. היו הראשונים!

רוצים להגיב?

עוד מאמרים

שליחת וובהוק לאחר מילוי טופס גוגל היכרות עם Hookdeck קבלת וובהוק על משתתף שנוסף/הוסר מקבוצת ווצאפ