Передаем оплаченные сделки из SberCRM в googleSheets


В данной статье рассмотрим, как передать сделку из SberCRM при переходе ее на этап Счет оплачен в googleSheets

Задача

При переходе сделки на этап Счет оплачен в SberCRM — передаем данные сделки, контакта или других связанных сущностей в googleSheets

Создание процесса в MoreKIT

Первым делом — создадим процесс, который будет принимать данные из SberCRM, когда сделка будет переходить на нужный этап

После создания процесса — настроим отправку данных из SberCRM на процесс MoreKIT

Создание исходящей интеграции

Следующим шагом — создадим настройки для исходящих из SberCRM данных

Необходимо перейти в Настройки —> Настройка интеграции —> Исходящие интеграции

Нажимаем на кнопку Новая исходящая интеграция

Здесь присваиваем название, системное имя и описание, что будет делать интеграция.

Далее выбираем основной интеграционный триггер-объект. В нашем случае — это будут сделки

Теперь необходимо выбрать поля, которые нам должны будут приходить. Здесь лучше выбрать все поля, так как чем больше данных — тем лучше

Также отмечаем связанные сущности со сделкой по своему усмотрению. В данном кейсе это будут: организация, ответственный и контакт сделки

Подключение к процессу MoreKIT

На следующем шаге создания интеграции нам потребуется ссылка на наш созданный процесс в MoreKIT. Необходимо перейти в схему и скопировать ссылку из первоначального блока

Вставляем ссылку в Параметры интеграции

Нажимаем Завершить. Интеграция создана

Настройка автоматизации

Следующим шагом нам нужно настроить событие-триггер, которое будет отправлять данные на наш процесс. Настроить его можно в разделе Инструменты —> Автоматизации

Создаем новую автоматизацию

Здесь производим следующие настройки:

  • Объект: сделки
  • Событие: Стадия сделки изменена
  • Тип действия: Исходящая интеграция
  • Действие: MoreKIT (название нашей созданной интеграции)
  • Название — на свое усмотрение

Тестирование отправки

Далее — перейдем в сделку и передвинем ее на этап Счет оплачен

Проверим события в процессе MoreKIT, нам должно прийти событие после смены этапа

Здесь необходимо найти параметр state, данный параметр содержит название статуса, на который перешла сделка. В нашем случае — этап Счет оплачен равен значению billPaid

Чтобы не получать события на данный процесс со всех статусов — пропишем фильтр в первоначальном блоке. Данный фильтр будет отсеивать запросы из SberCRM, у которых параметр state не будет равен billPaid. Данное действие позволит уменьшить количество событий на процесс MoreKIT

Если вам нужно обрабатывать несколько статусов, вы можете прописать фильтр вида:
{{state}} один из <перечислить несколько статусов через enter>

Вынесем блок HTTP запроса и сохраним схему, пока оставим его пустым

Настройка google таблицы

Создадим google таблицу, в первой строчке сделаем заголовки, какие данные нам нужно передать

В таблице будут следующие столбцы:

  • ID сделки
  • Название сделки
  • Описание
  • Бюджет сделки
  • Контактное лицо
  • email пользователя
  • телефон пользователя
  • Дата смены статуса

Настройка скрипта-обработчика

Теперь необходимо повесить на таблицу скрипт-обработчик. Для этого нам необходимо перейти в меню AppScript

Переходим в Расширения —> App Script

После перехода на страницу appscript мы попадем в окно с пустой функцией, стираем ее полностью и вставляем скрипт-обработчик данных

function doPost(request) {
Logger.log(JSON.parse(request.postData.contents));
var data = JSON.parse(request.postData.contents),
sheetName = data.sheetName,

sheet = SpreadsheetApp.getActive().getSheetByName(sheetName),
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'}));
}
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': 'Неизвестный формат данных'}));
}
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 "Проверьте параметр search_by";

    var row = get_row_id_by_lead_id(data[search_by], column_id + 1, sheet);
    var rowData = object_to_list(data, table_headers);

    for (var i = 0; i < rowData.length; i++) {
        if (rowData[i] !== '' && rowData[i] !== undefined) {
            var cell = sheet.getRange(row, i + 1);
            if (cell.getFormula()) {
                
                cell.setValue('').setFormula(cell.getFormula());
            } else {
                
                cell.setValue(rowData[i]);
            }
        }
    }

}

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 (i in table_headers){
result.push(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();
Logger.log("data " + data);
for (i in data){

  if (data[i] && data[i][0] == lead_id) 
  return parseInt(i) + 2;
  else if (data[i] && data[i] == "")
  return parseInt(i) + 2;
} 

}
return parseInt(last_row) + 1;
}

Разворачиваем скрипт

После вставки — скрипт необходимо развернуть, чтобы он начал работать на таблицу. Нажимаем Начать развертывание справа сверху —> Новое развертывание

Тип развертывания: веб-приложение

Доступ: Все

Подтверждаем, что мы доверяем действиям скрипта

Выдаем права скрипту на использование таблицы

После выполненного развертывания — нам необходимо скопировать ссылку на наше веб-приложение, на нее MoreKIT будет отправлять запрос с данными

Настройка процесса в MoreKIT

Следующим шагом — необходимо выстроить схему передачи данных в нашу google таблицу

Здесь потребуется 2 блока:

  • Дата и время — сконвертирует дату из SberCRM в человекочитаемый вид
  • Webhook — отправит запрос с данными в таблицу

Схема будет выглядеть следующим образом:

Чтобы легко прописать {{маски}} к данным, вы можете открыть входящие данные полученного события и кликать мышкой по нужным данным, MoreKIT скопирует нужный путь, который нужно вставить в маску

Описание блоков схемы

#4 Дата и время — данный блок переведет дату Из формата 2026-04-29T15:13:02.503677Z в формат 2026-04-29 15:13:02 (или свой формат). Подробнее про форматы даты можно почитать здесь. После настройки блока к нему можно обратиться маской {{#4.Дата}}

#5 Webhook — Отправит запрос с нужными вам данными в таблицу

Основные параметры блока:

  • URL: ссылка на наше развертывание
  • Метод запроса: POST
  • Формат: JSON
  • Игнорировать ошибку тайм-аута: по умолчанию MoreKit ожидает 1 секунду, чтобы получить ответ от сервиса, на который отправляется webhook. При использовании данной настройки ошибки тайм-аута будут игнорироваться
  • GET-параметр search_by: здесь указываем название заголовка, по которому будет производиться поиск уже существующей в таблице строки для ее обновления
  • POST-параметр: здесь указываются параметры в формате ключ: значение. Ключ — ваше название заголовка. Значение — то, что должно передаваться из входящих данных от SberCRM.
    Обязательно добавьте параметр SheetName — это название листа в таблице, иначе отправки не произойдет

Тестирование процесса

Осталось проверить наш процесс. Для этого — можем либо передвинуть сделку на этап Счет оплачен снова, либо повторить уже полученное событие в MoreKIT, оно перезапустится на текущую схему

Повторяем событие

Перезапускаем событие и проверяем таблицу

Как видим — данные успешно заполнились, в MoreKIT видим успешно выполненное событие

Успешно выполненное событие

Итог

В данной статье рассмотрели, как передать сделку из SberCRM при переходе ее на этап Счет оплачен в googleSheets. Была настроена отправка данных со стороны SberCRM, настроена схема передачи данных в MoreKIT и по итогу таблица успешно заполнилась