Выгрузка старых лидов из Facebook Leads в Google Таблицы
В предыдущей статье подробно описан алгоритм передачи данных из лид-форм Facebook в Google Таблицы на базе вебхуков и собственного приложения. В этом материале разберем дополнительные возможности такой реализации - передачу старых заявок из лид-формы Facebook.
До этого мы передавали только новые лиды в режиме реального времени, по мере их поступления в лид-форму Facebook. Но что, если вы настроили интеграцию только сейчас, а в какой-либо форме у вас уже есть лиды. Как передать все лиды из конкретной формы, включая старые/предыдущие?
Вы можете использовать этот код (оригинал):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
function doGet(request) { if (request.parameter['hub.verify_token'] == 'abcdefghijklmn0123456789') { return ContentService.createTextOutput(request.parameter['hub.challenge']); } // Pull in existing leads created before this webhook went live if (request.parameter['pull_all_leads'] == 'true') { var spreadsheet = SpreadsheetApp.openById("INSERT_YOUR_GOOGLE_SHEETS_ID"); var active_sheet = spreadsheet.getSheetByName("Sheet1"); var long_lived_page_access_token = 'INSERT_YOUR_LONG_LIVED_PAGE_ACCESS_TOKEN'; var lead_form_id = 'INSERT_YOUR_LEAD_FORM_ID'; var lead_data_endpoint = 'https://graph.facebook.com/' + lead_form_id + '/leads?access_token=' + long_lived_page_access_token; var lead_data_response = UrlFetchApp.fetch( lead_data_endpoint, {'method': 'get'} ); var lead_raw_data = JSON.parse(lead_data_response); var lead_data = lead_raw_data.data; var initial = true; var to_proceed = true; var subsequent_api_endpoint = ''; while( to_proceed ) { // Trigger another Graph API call to paginate to the next page if ( initial === false && subsequent_api_endpoint != '' ) { lead_data_response = UrlFetchApp.fetch( subsequent_api_endpoint, {'method': 'get'} ); lead_raw_data = JSON.parse(lead_data_response); lead_data = lead_raw_data.data; } // Process all of the leads in this page (one page contains 25 leads) for( var z = 0; z < lead_data.length; z++ ) { // Get current lead information var current_lead = lead_data[z]; var field_data = current_lead.field_data; var final_lead_information = {}; // Compile all data in an object for( var x = 0; x < field_data.length; x++ ) { final_lead_information[field_data[x].name] = field_data[x].values[0]; } // Get the date and time we received the lead var d = new Date( current_lead.created_time ); var submitted_at = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); final_lead_information['submitted_at'] = submitted_at; // Arrange them in the proper order var final_order = []; var format_order = ['full_name', 'phone_number', 'email', 'company_name', 'job_title', 'submitted_at']; for( var y = 0; y < format_order.length; y++ ) { final_order.push(final_lead_information[format_order[y]]); } // Record it in the Google Sheets active_sheet.appendRow(final_order); } subsequent_api_endpoint = lead_raw_data['paging']['next'] !== undefined ? lead_raw_data['paging']['next'] : ''; to_proceed = lead_raw_data['paging']['next'] !== undefined; initial = false; } return ContentService.createTextOutput('Done, please check your Google Sheets.'); } } function doPost(request) { var spreadsheet = SpreadsheetApp.openById("INSERT_YOUR_GOOGLE_SHEETS_ID"); var active_sheet = spreadsheet.getSheetByName("Sheet1"); var long_lived_page_access_token = 'INSERT_YOUR_LONG_LIVED_PAGE_ACCESS_TOKEN'; var returned_json = request.postData.getDataAsString(); var returned_data = JSON.parse(returned_json); var entries = returned_data.entry; for( var i = 0; i < entries.length; i++ ) { var entry = entries[i]; // Get the date and time we received the lead var submitted_epoch_timestamp = entry.time; var d = new Date( submitted_epoch_timestamp * 1000 ); var submitted_at = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); // Get lead identifier var lead_id = entry.changes[0].value. leadgen_id; // Get lead information var lead_info_endpoint = 'https://graph.facebook.com/' + lead_id + '?access_token=' + long_lived_page_access_token; var lead_info_response = UrlFetchApp.fetch(lead_info_endpoint, {'method': 'get'}); var lead_info = JSON.parse(lead_info_response); var field_data = lead_info.field_data; var final_lead_information = {}; // Compile all data in an object for( var x = 0; x < field_data.length; x++ ) { final_lead_information[field_data[x].name] = field_data[x].values[0]; } final_lead_information['submitted_at'] = submitted_at; // Arrange them in the proper order var final_order = []; var format_order = ['full_name', 'phone_number', 'email', 'company_name', 'job_title', 'submitted_at']; for( var y = 0; y < format_order.length; y++ ) { final_order.push(final_lead_information[format_order[y]]); } // Record it in the Google Sheets active_sheet.appendRow(final_order); } } |
- INSERT_YOUR_GOOGLE_SHEETS_ID - идентификатор Google Таблицы;
- Sheet1 (если у вас по-русски отображаются названия листов, то Лист1 или другой)
- INSERT_YOUR_LONG_LIVED_PAGE_ACCESS_TOKEN - ваш долгосрочный токен;
- INSERT_YOUR_LEAD_FORM_ID - идентификатор лид-формы, для которой вы хотите выгрузить лиды в Google Таблицы.
Чтобы найти идентификатор формы для лида, который необходимо вставить в код в поле INSERT_YOUR_LEAD_FORM_ID, перейдите на вашу страницу Facebook, в раздел Инструменты для публикации - Формы для рекламы для лидов - Библиотека форм. Наведите мышку на необходимую форму. После этого вы должны увидеть сведения о форме:
Скопируйте идентификатор формы и вставьте его в код проекта Google Apps Script, создав новый скрипт через Файл - Создать - Скрипт:
Еще, что вам нужно сделать - это задать конфигурацию тех полей, которую вы хотите выгружать. Например, у кого-то лид-форма может содержать имя, телефон, e-mail, а у кого-то только электронный адрес. В вышеописанном коде за это отвечает строка:
1 |
var format_order = ['full_name', 'phone_number', 'email', 'company_name', 'job_title', 'submitted_at']; |
Именно в ней и нужно будет задать то количество полей и их названия, которые необходимо передавать в Google Таблицы.
Чтобы узнать поля своей формы, просто выгрузите лиды в отдельный файл (.csv или .xls) и откройте файл локально. Первая строка - это и есть названия полей:
Я рекомендую оставить поле submitted_at, а далее уже выбрать свои. В моем примере - это имя и эл._адрес
1 |
var format_order = ['имя','эл._адрес', 'submitted_at']; |
В какой последовательности вы добавите поля в этой строке, в такой они и будут передаваться в Google Таблицы. Причем их названия нужно вводить строго как написано - в нижнем регистре, с подчеркиваниями, точками и т.д., как вы видите в файле выгрузки.
После этого вновь разверните приложение через Опубликовать - Развернуть как приложение.
Убедитесь, что вы:
- выполняете свой скрипт от имени Me (ваш e-mail);
- предоставляете любому, даже анонимному пользователю, доступ к вашему приложению (Anyone, even anonymous);
- используете новую версия проекта (Новое).
Нажмите кнопку Обновить.
После этого вы можете запустить скрипт и выгрузить все лиды из вашей лид-формы в Google Таблицы. Для этого в адресной строке браузера введите <YOUR_GOOGLE_SCRIPTS_WEB_APP_URL>?pull_all_leads=true, где <YOUR_GOOGLE_SCRIPTS_WEB_APP_URL> - ссылка web app URL, которую вы получили после развертывания приложения.
Пример:
1 |
https://script.google.com/macros/s/AKfycbwqyYBGraX9o0-VUeapU98uv-ueZ63ge7CAx6NcRke7kwwgLeI/exec?pull_all_leads=true |
Если скрипт отработает успешно, вы должны получить сообщение: Done, please check your Google Sheets.
После этого вы должны увидеть все выгруженные заявки из вашей лид-формы Facebook в Google Таблицы: