
FUNNNEL PROGRESS
инструкция по использованию
Что делает этот плагин
VH Funnel Progress – это мощный инструмент для отслеживания вовлеченности в WordPress, который помогает вам мониторить как зарегистрированные пользователи взаимодействуют с вашим контентом. Плагин:
- Отслеживает время, которое пользователи проводят на определенных постах или страницах
- Отправляет данные о вовлеченности через вебхуки, когда пользователи достигают заданного порога времени
- Работает только с зарегистрированными пользователями, собирая информацию из их профилей
- Интегрируется с внешними сервисами, такими как Google Sheets, для хранения и анализа данных
- Помогает определить наиболее привлекательный контент и понять модели поведения пользователей
- Позволяет создавать целевые маркетинговые воронки на основе реальной вовлеченности пользователей
Этот инструмент идеально подходит для сайтов с платным членством, онлайн-курсов и контент-ориентированных платформ, где понимание вовлеченности пользователей имеет решающее значение.
Настройка плагина
Подключение к Google Sheets
- Создайте новую таблицу Google с следующими заголовками столбцов:
- NAME (Полное имя)
- eMAIL (Email пользователя)
- STEP 1 (название должно быть идентичным custom_post_id)
- STEP 2
- STEP 3
- Перейдите в Extensions > Apps Script в вашей таблице Google.
- Замените код по умолчанию следующим:
function doPost(e) {
try {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("All Clients");
var data = JSON.parse(e.postData.contents);
// Debugging: Log the incoming data and headers
Logger.log('Incoming data: ' + JSON.stringify(data));
// Get all headers and log them
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
Logger.log('Headers found: ' + JSON.stringify(headers));
// Find column indices
var nameColumnIndex = headers.indexOf('NAME');
var emailColumnIndex = headers.indexOf('eMAIL');
if (emailColumnIndex === -1) {
throw new Error('Email column not found. Headers are: ' + headers.join(', '));
}
// Find custom post ID column index
var customPostIdColumnIndex = headers.indexOf(data.custom_post_id);
if (customPostIdColumnIndex === -1) {
throw new Error('Column for custom_post_id not found: ' + data.custom_post_id);
}
// Get last row with data
var lastRow = sheet.getLastRow();
// If sheet is empty (only headers), create a new row with full data
if (lastRow <= 1) {
var newRow = new Array(headers.length).fill('');
// Set name if available
if (nameColumnIndex !== -1) {
newRow[nameColumnIndex] = data.full_name;
}
newRow[emailColumnIndex] = data.user_email;
newRow[customPostIdColumnIndex] = data.timestamp;
// Set TG ID if available
var tgIdColumnIndex = headers.indexOf('tg_id');
if (tgIdColumnIndex !== -1 && data.tg_id) {
newRow[tgIdColumnIndex] = data.tg_id;
}
sheet.appendRow(newRow);
return ContentService.createTextOutput(JSON.stringify({ "status": "success" }));
}
// If sheet is not empty, proceed with existing logic
var existingRows = sheet.getRange(2, emailColumnIndex + 1, lastRow - 1, 1).getValues();
var rowToUpdate = -1;
for (var i = 0; i < existingRows.length; i++) {
if (existingRows[i][0] === data.user_email) {
rowToUpdate = i + 2; // +2 because sheets are 1-indexed and we skip header
break;
}
}
// If no existing row, create a new one
if (rowToUpdate === -1) {
var newRow = new Array(headers.length).fill('');
// Set name if available
if (nameColumnIndex !== -1) {
newRow[nameColumnIndex] = data.full_name;
}
newRow[emailColumnIndex] = data.user_email;
newRow[customPostIdColumnIndex] = data.timestamp;
// Set TG ID if available
var tgIdColumnIndex = headers.indexOf('tg_id');
if (tgIdColumnIndex !== -1 && data.tg_id) {
newRow[tgIdColumnIndex] = data.tg_id;
}
sheet.appendRow(newRow);
rowToUpdate = sheet.getLastRow();
} else {
// Update the specific column with timestamp only if it's empty
var currentCustomPostId = sheet.getRange(rowToUpdate, customPostIdColumnIndex + 1).getValue();
if (!currentCustomPostId) {
sheet.getRange(rowToUpdate, customPostIdColumnIndex + 1).setValue(data.timestamp);
}
// Update name if it's empty
if (nameColumnIndex !== -1) {
var currentName = sheet.getRange(rowToUpdate, nameColumnIndex + 1).getValue();
if (!currentName && data.full_name) {
sheet.getRange(rowToUpdate, nameColumnIndex + 1).setValue(data.full_name);
}
}
// Optionally update other fields
var tgIdColumnIndex = headers.indexOf('tg_id');
if (tgIdColumnIndex !== -1 && data.tg_id) {
if (!sheet.getRange(rowToUpdate, tgIdColumnIndex + 1).getValue()) {
sheet.getRange(rowToUpdate, tgIdColumnIndex + 1).setValue(data.tg_id);
}
}
}
return ContentService.createTextOutput(JSON.stringify({ "status": "success" }));
} catch (error) {
Logger.log('Full Error: ' + error.toString());
return ContentService.createTextOutput(JSON.stringify({
"status": "error",
"message": error.toString()
}));
}
}
// Test function to see headers
function testHeaders() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
// Log sheet name
Logger.log('Active Sheet Name: ' + sheet.getName());
// Get headers
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
Logger.log('Headers: ' + JSON.stringify(headers));
// Check email column
var emailColumnIndex = headers.findIndex(header => header.toLowerCase() === 'email');
Logger.log('Email Column Index: ' + emailColumnIndex);
// If email column not found, log alternative possibilities
if (emailColumnIndex === -1) {
var possibleEmailColumns = headers.filter(header =>
header.toLowerCase().includes('email') ||
header.toLowerCase().includes('mail')
);
Logger.log('Possible Email Columns: ' + JSON.stringify(possibleEmailColumns));
}
}
- Сохраните скрипт и опубликуйте его как веб-приложение:
- Нажмите на Deploy > New deployment
- Выберите “Web app” как тип развертывания
- Установите “Execute as” на “Me”
- Установите “Who has access” на “Anyone”
- Нажмите “Deploy”
- Скопируйте URL веб-приложения, предоставленный после развертывания.
- В админке WordPress перейдите в Settings > Funnel Progress и вставьте URL в поле “Default Webhook URL”.
- Нажмите “Save Changes”.
Использование плагина
Настройка отслеживания для отдельных постов/страниц
- Отредактируйте любой пост или страницу, где вы хотите отслеживать вовлеченность пользователей.
- Найдите мета-блок “Funnel Progress Tracking” в боковой панели.
- Настройте следующие параметры:
- Отметьте “Enable engagement tracking”, чтобы активировать отслеживание для этого поста/страницы
- Введите URL вебхука (или оставьте пустым, чтобы использовать значение по умолчанию из настроек)
- Установите “Minutes before trigger” – это время, которое пользователь должен провести на странице, прежде чем сработает вебхук
- При желании введите “Post/Page ID” – пользовательский идентификатор, который вы можете использовать для отслеживания этого контента
- Сохраните или обновите пост/страницу.
Как работает отслеживание
- Когда авторизованный пользователь посещает пост или страницу с включенным отслеживанием, плагин начинает мониторить время на странице.
- Плагин отслеживает активное взаимодействие, а не просто открытые вкладки.
- Как только пользователь проводит указанное количество времени (например, 5 минут) на странице, плагин отправляет вебхук со следующей информацией:
- ID поста (внутренний ID WordPress)
- Пользовательский ID поста (если указан)
- Информация о пользователе (ID, email, имя)
- Контактные данные (ID в Telegram, номер телефона, если доступно)
- Точное время, проведенное на странице
- Текущая временная метка и URL страницы
- Эти данные затем записываются в вашу таблицу Google или другой конечный пункт вебхука. В случае с Google Таблицей в клетку столбца с названием идентичным ID поста (или страницы) будет вписана текущая временная метка – то есть будет отмечено, что пользователь провел, например, 5 минут на конкретной странице.
Анализ данных
Данные, собранные в вашей таблице Google, можно использовать для:
- Определения контента, который удерживает пользователей дольше всего
- Отслеживания индивидуальных путей пользователей через ваш контент
- Создания сегментов на основе уровней вовлеченности
- Запуска автоматизированных рабочих процессов на основе достижения этапов вовлеченности
- Оптимизации вашей контент-стратегии на основе реальных данных использования
Расширенное использование
- Несколько вебхуков: Вы можете установить разные URL-адреса вебхуков для разных постов, чтобы отправлять данные в различные конечные точки.
- Пользовательские ID постов: Используйте содержательные идентификаторы вместо ID постов WordPress для лучшей организации данных.
- Пороги времени: Варьируйте порог времени в зависимости от длины или важности контента.
- Интеграция с другими инструментами: Вебхук может подключаться к различным сервисам помимо Google Sheets, включая CRM-системы, платформы email-маркетинга или пользовательские приложения.
Устранение неполадок
- Убедитесь, что пользователи авторизованы – плагин отслеживает только зарегистрированных пользователей
- Проверьте, что профили пользователей содержат необходимую информацию (email, имя и т. д.)
- Проверьте URL-адреса вебхуков на опечатки или проблемы с подключением
- Просмотрите разрешения скрипта Google Apps, если данные не записываются
- Тестируйте с более короткими порогами времени во время начальной настройки, чтобы подтвердить функциональность
СТОИМОСТЬ ПЛАГИНА:
85€
По оплате по оплате и функциональности пишите в Телеграм: https://t.me/atmoravi