Artigos:
- Data export to Google Sheets
- Conectando o Pixel do Facebook a um projeto no Kwiga
- Sending a webhook to transfer data to another service
- Integração e uso do Zoom — conceitos essenciais
- Gerando links de pagamento com dados pré-preenchidos
- Lidar com um clique de botão no widget
- Sending a webhook to KeyCRM with separation of the application and payment.
We will show you how to set up automatic data export from Kwiga to Google Sheets.
Você pode configurar a exportação de dados para vários eventos usando a automação (você pode especificar contato adicionado, tag adicionada, compra bem-sucedida ou malsucedida etc. como evento; a lista completa de eventos está disponível no artigo).
Além disso, você pode usar a opção de enviar um webhook ao usar widgets; o fluxo de trabalho permanece o mesmo.
Principais etapas:
-
Crie um arquivo e adicione o script a ele
-
Crie um aplicativo da web e obtenha o link para enviar o webhook
-
Configure o envio de webhook usando a automação no Kwiga ou o envio de formulário no widget.
Todo o processo é mostrado no vídeo e não requer conhecimento de programação. Basta seguir as etapas fornecidas e, se algo não funcionar, entre em contato com o suporte.
Etapa 1: Crie um arquivo para onde os dados do Kwiga serão enviados
Abra Google Sheets e crie um novo arquivo; em seguida, abra o editor de scripts.
Uma nova janela será aberta, e você precisará colar o script no editor. Você pode baixar o script pelo link (ou copiar o texto no final do artigo). Você precisa excluir todo o texto que já está no editor.
Resultado final:
Etapa 2: Crie um aplicativo da web e obtenha o link para enviar o webhook
No mesmo editor de scripts, encontre o botão Deploy e selecione New deployment
Selecione Web app como o tipo e, na lista suspensa Who has access, defina como Everyone e clique em Deploy.
Como resultado, você receberá a Web App URL, que depois deverá adicionar no Kwiga.
Etapa 3: Configure o envio de dados no Kwiga
Clique no botão All solutions no menu superior e selecione Automation. Crie um novo gatilho e escolha o evento que iniciará a automação. Pode ser contato adicionado, tag adicionada, pagamento ou qualquer outro evento.
Depois disso, role para baixo e selecione Webhook - Send data nas ações. No campo de link, especifique a Web App URL, o tipo de solicitação POST e selecione os campos que devem ser exportados para a tabela.
Salve, e todas as etapas estarão concluídas.
Como alternativa, você pode configurar o envio de webhook a partir do widget; isso está disponível ao usar o elemento Form. Marque a opção Additionally send to a third-party service e, em seguida, no formulário que abrir, adicione o link, o tipo de solicitação POST e selecione os parâmetros a serem enviados. Somente os parâmetros presentes no formulário (neste widget) estarão disponíveis nesta lista.
Como funciona o script do Google Sheets para webhooks
- Na primeira chamada do webhook, os cabeçalhos da tabela são criados automaticamente com base nas chaves dos dados recebidos
- Se a tabela já tiver cabeçalhos e for necessário começar a receber novos campos de dados, adicione esses cabeçalhos manualmente na tabela
- Os cabeçalhos podem ser rearranjados na tabela - o script identificará automaticamente suas posições
- Por padrão, o script adiciona novos registros a cada recebimento de webhook
- Se especificar campos em keyColumns, o script atualizará registros existentes ou adicionará novos se não encontrar correspondência
- ⚠️ Importante: Após modificar o script, é necessário fazer um novo deploy no Google Apps Script e atualizar o link do webhook
Seleção da folha da tabela:
- Por padrão, a folha ativa é usada
- Pode ser redefinido através dos parâmetros do webhook:
- "sheet_name": "Nome da folha" - para selecionar a folha pelo nome
- "sheet_index": 2 - para selecionar a folha pelo número (começando por 1)
// ============================================================
// CONFIGURAÇÕES DO SCRIPT
// ============================================================
// Verificação de duplicatas - especifique os campos para procurar registros existentes
// Exemplos de uso:
// var keyColumns = ["email"]; - verificação por email
// var keyColumns = ["order_id"]; - verificação por ID do pedido
// var keyColumns = ["email", "order_id"]; - verificação por vários campos
var keyColumns = []; // Verificação de duplicatas desativada
// ============================================================
// Função para enviar resposta
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Obtendo a página de destino para gravar dados
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Verificando se o nome da página está especificado
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Página não encontrada
}
}
// Verificando se o número da página está especificado
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; // Convertendo para índice a partir de 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Índice de página inválido
}
}
// Por padrão, usar a página ativa
return SpreadsheetApp.getActiveSheet();
}
// Cria cabeçalhos na tabela com base nos dados fornecidos
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;
}
// Processamento de webhook de entrada
function doPost(e) {
var hook_load = null;
// Verificando a presença de dados POST
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Sem dados para processar");
}
// Analisando dados JSON
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Erro ao analisar dados JSON");
}
// Validação dos dados recebidos
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Dados incorretos ou vazios recebidos");
}
try {
// Obtendo a página de destino
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Não foi possível encontrar a página especificada");
}
// Criar cabeçalhos se a tabela estiver vazia
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];
}
// Verificação de duplicatas
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; // gerenciamento de cabeçalhos
break;
}
}
}
// Preparação de dados para gravação
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];
}
}
// Salvando dados na tabela
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, "Dados salvos com sucesso");
} catch (error) {
return sendResponse(false, "Erro ao salvar dados: " + error.message);
}
}
Não encontrou a resposta? Entre em contato com o serviço de suporte via chat online ou Telegram