KWIGA Yardım Merkezi Hizmetler, entegrasyonlar, API, Ayarlar Hizmetler Google Sheets'e veri dışa aktarma

Google Sheets'e veri dışa aktarma

Makaleler:

Kwiga'dan Google Sheets'e otomatik veri dışa aktarmayı nasıl ayarlayacağınızı göstereceğiz.


Otomasyonu kullanarak çeşitli etkinlikler için veri aktarımını ayarlayabilirsiniz (etkinlik olarak kişi eklendi, etiket eklendi, başarılı veya başarısız satın alma vb. belirtebilirsiniz; etkinliklerin tam listesi mevcuttur makalede).

Ayrıca, widget'ları kullanırken webhook gönderme seçeneğini de kullanabilirsiniz; iş akışı aynı kalır.

Ana adımlar:

  1. Bir dosya oluşturun ve komut dosyasını ekleyin

  2. Bir web uygulaması oluşturun ve webhook gönderme bağlantısını alın

  3. Kwiga'da otomasyonu veya widget'ta form gönderimini kullanarak webhook gönderimini ayarlayın.

Tüm süreç videoda gösterilmiştir ve gerektirmez programlama bilgisi gerektirmez. Yalnızca verilen adımları izleyin; bir şey çalışmazsa destek ekibiyle iletişime geçin.

 

1. Adım: Kwiga'dan verilerin gönderileceği bir dosya oluşturun

Açın Google Sheets ve yeni bir dosya oluşturun, ardından komut dosyası düzenleyicisini açın.

Yeni bir pencere açılacak ve komut dosyasını buradaki düzenleyiciye yapıştırmanız gerekecek. Komut dosyasını indirebilirsiniz bağlantı aracılığıyla (veya makalenin altındaki metni kopyalayın). Düzenleyicide bulunan tüm metni silmeniz gerekir.

Sonuç:

2. Adım: Bir web uygulaması oluşturun ve webhook gönderme bağlantısını alın

Aynı komut dosyası düzenleyicisinde Deploy düğmesini bulun ve New deployment seçeneğini belirleyin

Tür olarak Web app'i seçin ve Who has access açılır menüsünde Everyone seçeneğini ayarlayın, ardından Deploy'a tıklayın.

Sonuç olarak, daha sonra Kwiga'ya eklemeniz gereken Web App URL'yi alacaksınız.

 

3. Adım: Kwiga'da veri gönderimini ayarlayın

Üst menüdeki All solutions düğmesine tıklayın ve Automation'ı seçin. Yeni bir tetikleyici oluşturun ve otomasyonu başlatacak etkinliği seçin. Bu, kişi eklendi, etiket eklendi, ödeme veya başka herhangi bir etkinlik olabilir.

Ardından aşağı kaydırın ve eylemler bölümünde Webhook - Send data seçeneğini belirleyin. Bağlantı alanında Web App URL'yi, istek türü olarak POST'u belirtin ve tabloya aktarılması gereken alanları seçin.

Kaydedin; tüm adımlar tamamlandı.

 

Alternatif olarak, widget'tan webhook gönderimini ayarlayabilirsiniz; bu, Form öğesini kullanırken kullanılabilir. Additionally send to a third-party service seçeneğini işaretleyin, ardından açılan formda bağlantıyı ekleyin, istek türü olarak POST'u belirtin ve gönderilecek parametreleri seçin. Bu listede yalnızca formda (bu widget'ta) bulunan parametreler kullanılabilir olacaktır.

 

Webhook'lar için Google Sheets betiği nasıl çalışır

  • İlk webhook çağrısında, gelen verilerin anahtarlarına göre tablo başlıkları otomatik olarak oluşturulur
  • Tabloda zaten başlıklar varsa ve yeni veri alanlarını almaya başlamanız gerekiyorsa, bu başlıkları tabloya manuel olarak ekleyin
  • Başlıkların tablodaki sırası değiştirilebilir - betik konumlarını otomatik olarak belirler
  • Varsayılan olarak betik, her webhook alındığında yeni kayıtlar ekler
  • keyColumns içinde alanlar belirtirseniz, betik mevcut kayıtları günceller veya eşleşme bulunamazsa yeni kayıtlar ekler
  • ⚠️ Önemli: Betiği değiştirdikten sonra Google Apps Script'te yeniden dağıtmanız ve webhook bağlantısını güncellemeniz gerekir

Sayfa seçimi:

  • Varsayılan olarak etkin sayfa kullanılır
  • Webhook parametreleriyle değiştirilebilir:
  • "sheet_name": "Sayfa Adı" - ada göre sayfa seçmek için
  • "sheet_index": 2 - numaraya göre sayfa seçmek için (1'den başlayarak)
// ============================================================
// BETİK AYARLARI
// ============================================================

// Yinelenen kayıt kontrolü - mevcut kayıtları aramak için alanları belirtin
// Kullanım örnekleri:
// var keyColumns = ["email"];           - e-postaya göre kontrol et
// var keyColumns = ["order_id"];        - sipariş kimliğine göre kontrol et
// var keyColumns = ["email", "order_id"];  - birden çok alana göre kontrol et
var keyColumns = []; // Yinelenen kayıt kontrolü devre dışı

// ============================================================

// Yanıt göndermek için fonksiyon
function sendResponse(success, message) {
    var response = {
        "status": success ? "success" : "error",
        "message": message
    };
    return ContentService.createTextOutput(JSON.stringify(response))
        .setMimeType(ContentService.MimeType.JSON);
}

// Veri yazmak için hedef sayfa alınıyor
function getTargetSheet(hook_data) {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

    // Sayfa adının belirtilip belirtilmediği kontrol ediliyor
    if (hook_data && hook_data.sheet_name) {
        try {
            var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
            if (sheet) {
                return sheet;
            }
        } catch (error) {
            // Sayfa bulunamadı
        }
    }

    // Sayfa numarasının belirtilip belirtilmediği kontrol ediliyor
    if (hook_data && hook_data.sheet_index && !isNaN(hook_data.sheet_index)) {
        try {
            var sheets = spreadsheet.getSheets();
            var index = parseInt(hook_data.sheet_index) - 1; // 0'dan başlayan dizine dönüştürülüyor
            if (index >= 0 && index < sheets.length) {
                return sheets[index];
            }
        } catch (error) {
            // Geçersiz sayfa dizini
        }
    }

    // Varsayılan olarak etkin sayfayı kullan
    return SpreadsheetApp.getActiveSheet();
}

// Sağlanan verilere göre tabloda başlıklar oluşturur
function populateHeaders(hook_data, sheet) {
    if (!hook_data || typeof hook_data !== 'object') {
        return false;
    }

    if (!sheet) {
        sheet = getTargetSheet(hook_data);
    }
    var last_row = Math.max(sheet.getLastRow(), 1);
    sheet.insertRowAfter(last_row);

    var headers_row = ['timestamp'];
    var hook_data_keys = Object.keys(hook_data);

    for (var i = 0; i < hook_data_keys.length; i++) {
        headers_row.push(hook_data_keys[i]);
    }

    sheet.appendRow(headers_row);
    SpreadsheetApp.flush();
    return true;
}

// Gelen webhook işleniyor
function doPost(e) {
    var hook_load = null;

    // POST verileri kontrol ediliyor
    if (!e || !e.postData || !e.postData.contents) {
        return sendResponse(false, "İşlenecek veri yok");
    }

    // JSON verileri ayrıştırılıyor
    try {
        hook_load = JSON.parse(e.postData.contents);
    } catch (error) {
        return sendResponse(false, "JSON verileri ayrıştırma hatası");
    }

    // Alınan veriler doğrulanıyor
    if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
        return sendResponse(false, "Hatalı veya boş veri alındı");
    }

    try {
        // Hedef sayfa alınıyor
        var sheet = getTargetSheet(hook_load);
        if (!sheet) {
            return sendResponse(false, "Belirtilen sayfa bulunamadı");
        }

        // Tablo boşsa başlıklar oluşturuluyor
        if (sheet.getLastColumn() === 0) {
            populateHeaders(hook_load, sheet);
        }

        var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];

        if (headers.length === 0 || headers[0] === "") {
            populateHeaders(hook_load, sheet);
            headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
        }

        // Yinelenen kayıt kontrolü
        var data = [];
        var targetRow = -1;
        var numRows = sheet.getLastRow() - 1;

        if (keyColumns.length > 0 && numRows > 0) {
            data = sheet.getRange(2, 1, numRows, sheet.getLastColumn()).getValues();

            for (var r = 0; r < data.length; r++) {
                var row = data[r];
                var match = true;

                for (var k = 0; k < keyColumns.length; k++) {
                    var key = keyColumns[k];
                    var idx = headers.indexOf(key);
                    if (idx === -1 || row[idx] != hook_load[key]) {
                        match = false;
                        break;
                    }
                }

                if (match) {
                    targetRow = r + 2; // başlık işleme
                    break;
                }
            }
        }

        // Veriler giriş için hazırlanıyor
        var new_sheet_row = new Array(headers.length).fill('');
        for (var h = 0; h < headers.length; h++) {
            var key = headers[h];
            if (key === 'timestamp') {
                new_sheet_row[h] = new Date();
            } else if (hook_load.hasOwnProperty(key)) {
                new_sheet_row[h] = hook_load[key];
            }
        }

        // Veriler tabloya kaydediliyor
        if (targetRow > -1) {
            sheet.getRange(targetRow, 1, 1, new_sheet_row.length).setValues([new_sheet_row]);
        } else {
            sheet.appendRow(new_sheet_row);
        }

        SpreadsheetApp.flush();

        return sendResponse(true, "Veriler başarıyla kaydedildi");

    } catch (error) {
        return sendResponse(false, "Veriler kaydedilirken hata oluştu: " + error.message);
    }
}