חיבור לידים ל-Google Sheets (חיבור ישיר)

גרמו לכל ליד חדש או שינוי סטטוס ב-TASKEY להיכתב אוטומטית ובזמן אמת לגיליון Google Sheets - בחיבור ישיר דרך Google Apps Script, בלי כלי חיצוני (בלי Make, בלי Zapier).

המדריך הזה מסביר איך לגרום לכל ליד חדש (או כל שינוי סטטוס) ב-TASKEY להיכתב אוטומטית ובזמן אמת לגיליון Google Sheets - בחיבור ישיר, בלי כלי חיצוני (בלי Make, בלי Zapier).

העיקרון: TASKEY שולח Webhook (הודעת HTTP) בכל אירוע, ואנחנו מחברים אותו ל-Google Apps Script קטן שיושב על הגיליון ומוסיף שורה חדשה בכל פעם. חינמי לגמרי, רץ בתוך חשבון Google שלכם.

מתי לבחור בשיטה הזו? כשרוצים חיבור פשוט וישיר ל-Sheets בלבד, בלי תלות ומנוי ל-Make / Zapier. אם צריך גם לחבר למערכות רבות אחרות (Mailchimp, Slack וכו') - ראו את המדריך "חיבור Make.com".

1. יצירת הגיליון והסקריפט

  1. פתחו גיליון Google Sheets חדש (או קיים) בכתובת sheets.new.
  2. בתפריט: Extensions → Apps Script (בעברית: הרחבות → Apps Script).
  3. מחקו את הקוד לדוגמה שמופיע, והדביקו את כל הקוד מהקטע למטה (או הורידו את הקובץ המצורף).
  4. לחצו על סמל שמירה.

הורדת קובץ הסקריפט (taskey_google_sheets.gs)

הקוד להדבקה

// שם הטאב בגיליון (ייווצר אוטומטית אם לא קיים)
var SHEET_NAME = 'Leads';

function doPost(e) {
  try {
    var data = {};
    if (e && e.postData && e.postData.contents) {
      data = JSON.parse(e.postData.contents);
    } else if (e && e.parameter) {
      data = e.parameter;
    }
    appendRowFromObject(data);
    return jsonOut({ ok: true });
  } catch (err) {
    return jsonOut({ ok: false, error: String(err) });
  }
}

function doGet() {
  return jsonOut({ ok: true, message: 'TASKEY endpoint active' });
}

function appendRowFromObject(data) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(SHEET_NAME) || ss.insertSheet(SHEET_NAME);
  var flat = flattenObject(data);
  flat['_received_at'] = new Date();

  var lock = LockService.getScriptLock();
  lock.waitLock(30000);
  try {
    var lastCol = sheet.getLastColumn();
    var headers = lastCol > 0 ? sheet.getRange(1, 1, 1, lastCol).getValues()[0] : [];
    var updatedHeaders = headers.slice();
    Object.keys(flat).forEach(function (k) {
      if (updatedHeaders.indexOf(k) === -1) updatedHeaders.push(k);
    });
    if (headers.length === 0 || updatedHeaders.length !== headers.length) {
      sheet.getRange(1, 1, 1, updatedHeaders.length).setValues([updatedHeaders]);
      sheet.getRange(1, 1, 1, updatedHeaders.length).setFontWeight('bold');
      sheet.setFrozenRows(1);
      headers = updatedHeaders;
    }
    var row = headers.map(function (h) {
      var v = flat[h];
      return (v === undefined || v === null) ? '' : v;
    });
    sheet.appendRow(row);
  } finally {
    lock.releaseLock();
  }
}

function flattenObject(obj, prefix) {
  prefix = prefix || '';
  var out = {};
  if (obj === null || typeof obj !== 'object') { out[prefix || 'value'] = obj; return out; }
  for (var key in obj) {
    if (!obj.hasOwnProperty(key)) continue;
    var val = obj[key];
    var name = prefix ? prefix + '.' + key : key;
    if (Array.isArray(val)) { out[name] = JSON.stringify(val); }
    else if (val && typeof val === 'object') {
      var nested = flattenObject(val, name);
      for (var nk in nested) out[nk] = nested[nk];
    } else { out[name] = val; }
  }
  return out;
}

function jsonOut(obj) {
  return ContentService.createTextOutput(JSON.stringify(obj))
    .setMimeType(ContentService.MimeType.JSON);
}

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

2. פרסום הסקריפט כ-Web App

  1. ב-Apps Script לחצו על Deploy → New deployment (פריסה → פריסה חדשה).
  2. ליד Select type בחרו Web app.
  3. Execute as: Me (החשבון שלכם).
  4. Who has access: Anyone - חובה! אחרת TASKEY לא יורשה לכתוב.
  5. לחצו Deploy. בפעם הראשונה תתבקשו לאשר הרשאות - אשרו (Allow).
  6. העתיקו את ה-Web app URL - כתובת שמסתיימת ב-/exec.

חשוב: אם Who has access אינו Anyone, השרת של TASKEY יקבל שגיאת הרשאה והשורות לא ייכתבו. אם עדכנתם את הקוד בהמשך - צריך לעשות Deploy → Manage deployments → Edit → New version כדי שהשינוי ייכנס לתוקף.

3. חיבור הטריגר ב-TASKEY

  1. ב-TASKEY: הגדרות → טריגרים (ניהול אוטומציות).
  2. צרו טריגר חדש - לדוגמה "ליד חדש" (על יצירת ליד) או "שינוי סטטוס".
  3. הוסיפו פעולה → Webhook.
  4. הדביקו ב-URL את כתובת ה-Web app שהעתקתם (המסתיימת ב-/exec).
  5. שיטת שליחה: POST (JSON).
  6. שמרו. זהו - מעכשיו כל ליד / שינוי שתואם לטריגר ייכתב לגיליון בזמן אמת.

בחירת השדות שנשלחים (אופציונלי)

כברירת מחדל TASKEY שולח מבנה נתונים סטנדרטי (שם, טלפון, אימייל, סטטוס ועוד). אם רוצים לשלוט בדיוק אילו שדות ייכתבו לעמודות - בחרו בפעולת ה-Webhook תבנית Payload מותאמת (Custom) והשתמשו במשתנים מהפלטה. דוגמה לתבנית JSON:

{
  "name": "{{full_name}}",
  "phone": "{{phone}}",
  "email": "{{email}}",
  "status": "{{status_name}}",
  "source": "{{source}}",
  "campaign": "{{ad}}",
  "lead_id": "{{lead_id}}"
}

כל מפתח בתבנית יהפוך לעמודה בגיליון, בדיוק בסדר הזה.

4. בדיקה

  1. צרו ליד חדש ב-TASKEY (או שנו סטטוס - לפי הטריגר שהגדרתם).
  2. עברו לגיליון - אמורה להופיע שורה חדשה תוך שניות.
  3. בפעם הראשונה נוצרת שורת כותרות ואחריה שורת הנתונים.

בדיקה מהירה: פתיחת ה-Web app URL בדפדפן (GET) אמורה להחזיר {"ok":true,"message":"TASKEY endpoint active"} - סימן שהסקריפט חי ופרוס נכון.

5. פתרון בעיות

תופעהסיבה / פתרון
לא נכתבות שורותודאו ש-Who has access = Anyone, ושה-URL שהודבק ב-TASKEY מסתיים ב-/exec (ולא ב-/dev).
שגיאת הרשאות ב-Googleבפריסה הראשונה יש לאשר הרשאות (Allow). אם דילגתם - עשו Deploy מחדש ואשרו.
עדכנתי את הקוד וזה לא השתנהיש לפרסם גרסה חדשה: Manage deployments → Edit → New version → Deploy.
עמודות לא בסדר שרציתיהשתמשו בתבנית Payload מותאמת (Custom) בטריגר כדי לקבוע את סדר ושמות השדות.
שורות כפולותודאו שהטריגר לא מוגדר להישלח פעמיים (למשל גם על "יצירה" וגם על "שינוי").

שאלות נפוצות

ש: זה עולה כסף? ת: לא. Google Apps Script חינמי לחלוטין ורץ בתוך חשבון Google שלכם. אין צורך במנוי ל-Make / Zapier.

ש: אפשר גם רכישות / פגישות ולא רק לידים? ת: כן. פשוט צרו טריגר על הטבלה הרצויה (רכישות / פגישות) עם אותה פעולת Webhook. אפשר גם טאב נפרד לכל סוג - שנו את SHEET_NAME בסקריפט (או צרו סקריפט / גיליון נפרד).

ש: הנתונים מאובטחים? ת: הגיליון פרטי בחשבון Google שלכם. ה-Web app מקבל כתיבה בלבד ולא חושף את תוכן הגיליון. מומלץ לא לפרסם את כתובת ה-/exec.

ש: מה ההבדל בין השיטה הזו לבין Make.com? ת: החיבור הישיר (המדריך הזה) מיועד לחיבור פשוט ל-Sheets בלבד, בזמן אמת, בלי מנוי. Make.com מתאים כשצריך לחבר את TASKEY למאות מערכות נוספות או לבנות אוטומציות מורכבות - ראו את המדריך "חיבור Make.com".

לתמיכה בוואטסאפ ותיאום הדרכה: 053-9472201

תפריט נגישות