В качестве внешней системы в данном примере будет использоваться amoCRM .
Содержание
Подготовка таблицы
Создадим таблицу на Google Drive и заполним заголовки.

Добавим скрипт, который будет заполнять таблицу (Расширения → Apps Script):

Настройка Apps Script
Заполним содержимое простым скриптом приёма данных и дадим скрипту название (полезно, если таких скриптов несколько, при наличии сбоев можно будет определить источник).
Код для вставки:
function doPost(request) { let data = JSON.parse(request.postData.contents); let keys = Object.keys(data); let active_sheet = SpreadsheetApp.getActiveSheet(); let last_row = active_sheet.getLastRow(); let new_row = []; keys.sort(); keys.forEach((value) => {new_row.push(typeof(data[value]) == "object" && data[value] ? data[value].join(',') : data[value])}); if (!new_row || !new_row.length) return; active_sheet.getRange(last_row + 1, 1, 1, new_row.length).setValues([new_row]); return ContentService.createTextOutput('ok'); }
Итог:

После чего нажимаем “Начать развертывание” → “Новое развёртывание”.
Выбираем тип “Веб-приложение”:

Заполняем форму:
- Описание — что угодно для удобства вашей работы;
- Запуск от имени — от моего имени;
- У кого есть доступ — все (не стоит бояться этой опции, т.к. в нашем скрипте мы только принимаем данные и никакого содержимого таблицы не показываем);
После развертывания приложения копируем ссылку на него:

ВНИМАНИЕ: скрипты могут дорабатываться практически без ограничений, убедитесь что вы доверяете его создателю, т.к. при запуске скрипт получает полный доступ к вашему диску, а не только к файлу, к которому он приложен.
Создание процесса MoreKIT
Создадим процесс с источником “amoCRM → Вебхук”.
Добавим блоки:
- Дата и время
- Найти сделки
- Найти контакты
- WebHook
Подробнее по блокам — ниже, а сейчас — что должно получиться в итоге:

Непосредственно к заполнению таблицы относится только последняя функция, все предыдущие блоки только собирают для неё данные.
Старт
Проверяем что нам пришла сделка через равенство {{сущность}} = Сделка
Дата и время
Создаём дату с текущим временем, чтобы отметить в таблице
Для этого:
- отмечаем “Сейчас”
- в поле “В формат” выбираем:
тип — “в формат”
формат —%Y.%m.%d %H:%M
Подробнее форматы описаны на странице Дата и время.
Найти сделки
Находим сделку по id, заполнив поля “Поиск по”:
значение — {{ID}}
(из входящих данных хука)
поле — ID
Как видно — мы не обрабатываем действия, если сделка не найдена, т.к. считаем что в таком случае она не нужна нам в таблице.
Найти контакты
Находим контакт из сделки:
- выбрать — “Самый старый”
- из сделки/компании —
{{#5}}
Аналогично сделке, если контакт не найден — мы не обрабатываем логику и заканчиваем работу события.
WebHook
Отправляем WebHook на скопированный ранее адрес и заполняем его параметры:
- Игнорировать ошибку таймаута — обработка сервисов гугл иногда может занимать несколько секунд, эта опция отключит повторные отправки чтобы не дублировались данные в таблице;
- POST-параметр:
ключ — 1
значение —{{#4.дата}}
- POST-параметр:
ключ — 2
значение —{{#2.Название}}
- POST-параметр:
ключ — 3
значение —{{#5.Бюджет}}
- POST-параметр:
ключ — 4
значение —{{#5.Исполнитель}}
Ключи можно указывать в любом порядке, скрипт, который мы ранее создали в таблице, отсортирует их по возрастанию. Таким образом, если какое-то поле не будет заполнено — соответствующая ячейка также будет пропущена.
Итог
После создания сделки с контактом в интерфейсе amoCRM у нас создаётся событие в логе:

И добавляется строка в таблицу от имени того, кто размещал скрипт на стороне Google:
