Автоматизируем выгрузку данных из amoCRM в Google Sheets с помощью MoreKIT.
Содержание
Задача
Передаем данные из CRM в таблицу по событию в CRM.
В данном примере: выгрузка в таблицу ID сделки, фамилии и имени основного контакта в сделке и ответственного при создании новой сделки в выбранной воронке продаж и этапе.
Подготовка таблицы
Создаем таблицу и добавляем скрипт по инструкции.
Код скрипта:
function doPost(request) { var data = JSON.parse(request.postData.contents), sheet = SpreadsheetApp.getActive().getActiveSheet(), table_headers = get_table_headers(sheet), search_by = request.parameter.search_by; if (table_headers.length == 0) { table_headers = Object.keys(data); fill_headers(sheet, table_headers); } if (!search_by) { return ContentService.createTextOutput(JSON.stringify({ 'error': 'search_by not found' })); } if (is_object(data)) { var fill_func = fill_object; if (is_array(data)) fill_func = fill_array; fill_func(data, table_headers, sheet, search_by); } else { return ContentService.createTextOutput(JSON.stringify({ 'error': 'Unknown data format' })); } return ContentService.createTextOutput(JSON.stringify({ 'result': 'ok' })); } function is_array(data) { return typeof(data) === 'object' && data.length; } function is_object(data) { return typeof(data) === 'object'; } function fill_array(data, table_headers, sheet, search_by) { data.forEach((v) => { fill_object(v, table_headers, sheet, search_by) }); } function fill_object(data, table_headers, sheet, search_by) { var column_id = table_headers.indexOf(search_by); if (column_id < 0) return; var row = get_row_id_by_lead_id(data[search_by], column_id + 1, sheet), data = object_to_list(data, table_headers); sheet.getRange(row, 1, 1, data.length).setValues([data]); } function fill_headers(sheet, headers) { sheet.getRange(1, 1, 1, headers.length).setValues([headers]); } function get_table_headers(sheet) { var cols = sheet.getLastColumn(); if (cols > 0) return sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; else return []; } function object_to_list(data, table_headers){ var result = []; for (var i in table_headers){ var is_null = data[table_headers[i]] === undefined || data[table_headers[i]] === null; result.push(is_null ? '' : data[table_headers[i]]); } return result; } function get_row_id_by_lead_id(lead_id, column, sheet) { var last_row = sheet.getLastRow(); if (last_row > 1) { var data = sheet.getRange(2, column, last_row, 1).getValues(); for (i in data) { if (data[i] && data[i][0] == lead_id) return parseInt(i) + 2; } } return parseInt(last_row) + 1; }
Создаем процесс
При создании процесса есть выбор его типа.
AmoCRM DP — позволяет собирать данные из выбранной воронки и этапа продаж. Ссылку в этом случае добавляем в Digital Pipeline.
AmoCRM вебхук — позволяет собирать данные из всей CRM. Ссылку в этом случае добавляем в Web Hooks в амоМаркет (справа вверху) и выбираем событие срабатывания.
Блок-схема процесса
Выстраиваем блок-схему, как на рисунке выше. Нужные блоки вытаскиваем из левого выпадающего меню.
Первый блок базовый и создается автоматически при создании нового процесса.
Блоки #1 и #2 из раздела подключенной CRM. Если в проекте более одной CRM? то вы будете видеть их все, поэтому выбирайте внимательно, из нужного раздела.
Блоки #3 и #4 из общих функций.
Настройка процесса
Стартовый блок
Cсылка создается автоматически. Её необходимо добавить в созданный хук на стороне CRM. При необходимости добавляем дополнительные проверки по полям, если нужны не все сделки.
Блок #1
Выбрать
-"самый старый"
— это стандартное поле, для определения выбора сделок при наличии дублей. В данном процессе оно не важно, так как работаем с одиночными сделками.
По входящему событию (создание новой сделки) ищем ID сделки.
Так же можно собирать любые поля из полученных данных.
Блок #2
По найденной сделке ищем основной контакт.
Блок #3
Используя данные найденной сделки получаем данные об ответственном за неё пользователе CRM.
Блок #4
Складываем данные в WebHook, с указанием необходимых собранных полей (ID сделки, название основного контакта, имя ответственного).
WebHook передает только ID клиента и ответственного, поэтому здесь мы уточняем их имя и фамилию (выбираем нужные поля).
Далее MoreKIT самостоятельно собирает из CRM данные по факту создания сделки и заполняет нужные поля в Google Sheets, согласно скрипту.
URL — адрес скрипта в Google.
GET-параметр — search_by
параметр скрипта, который не даст создать дубли. Если сделка уже была добавлена то скрипт найдёт ID сделки в таблице и обновит данные по клиенту и ответственному. А при отсутствии, запишет значения в новую сроку.
В POST-параметрах указываем значения тех полей, которые нужно записать в таблицу. Скрипт сам создаст названия столбцов = название поля.
Результат
В результате получаем таблицу с автоматическим заполнением данных из CRM по определенным событиям.
К примеру:
- список успешно завершенных сделок с ответственными и бюджетом сделок;
- список закрытых неуспешно сделок с причинами отказов и ответственными;
- список сделок с подписанными договорами;
- успешные сделки с источниками ЛИДа, проданным продуктом, тегами и пр.