Скрипт для МЗ
Открываете нужную таблицу в google Скрипт для МЗ , там в меню
Туда вставляете этот текст ниже (текущий стандартный шаблон скрипта стираете и полностью эти текстом заменяете):
В этом тексте еще заменить api_address, user_name, api_key на ваши (в ЛК в настройки->интеграция->там их показывает) + еще там же в user_names по аналогии задать имена пользователей, чтобы они в списке звонков подставились вместо почты (будет из без этого работать, просто имен сотрудников не будет видно)
После вставки нажмите там сохранить в редакторе скриптов, потом в меню
Звонки должны загрузиться в таблицу. Если сработало, то потом можно автоматом выполнять раз в час или другой интервал времени.
Готовый код:
var url_template = 'https://_DOMAIN_/api/v1/?user_name=_USER_NAME_&api_key=_API_KEY_&action=calls.list&supervised=1&from_date=_FROM_DATE_&from_offset=_FROM_OFFSET_&app_name=googlesheets'; var api_addess = 'corporatefranch5.moizvonki.ru' var user_name = '[email protected]'; var api_key = '12uuw6jqrn65whyecqra36gcbl7je4sk'; var from_date = new Date('2023-11-01T00:00:00+03:00') / 1000; //Настройка даты начала выгрузки var user_names = {'[email protected]': 'Иван иванов', '[email protected]': 'Вася Петров'}; function requestCallsPage(from_id, from_offset) { var url = url_template.replace('_DOMAIN_', api_addess).replace('_USER_NAME_', user_name).replace('_API_KEY_', api_key).replace('_FROM_DATE_', from_date).replace('_FROM_OFFSET_', from_offset); Logger.log(url); var response = UrlFetchApp.fetch(url); var data = JSON.parse(response.getContentText()); var sheet = SpreadsheetApp.getActiveSheet(); var max_id = 0; for (var i = 0; i < data.results_count; i++) { var call = data.results[i]; if (call.db_call_id > max_id) max_id = call.db_call_id; var ring_duration = call.answered ? call.answer_time - call.start_time : call.end_time - call.start_time; if (call.direction == 1) ring_duration = ring_duration > 2 ? ring_duration - 2 : 0; sheet.appendRow([new Date(call.start_time * 1000), call.user_account in user_names ? user_names[call.user_account] : call.user_account, "'" + call.client_number, "'" + call.client_name, call.direction == 0 ? 'Входящий' : 'Исходящий', call.answered ? 'Да' : 'Нет', call.duration, ring_duration, "'" + call.src_number ]); } if (max_id > 0) PropertiesService.getScriptProperties().setProperty('from_id', max_id + 1); return data.results_next_offset; } function loadCalls() { var from_id = parseInt(PropertiesService.getScriptProperties().getProperty('from_id') || 0); var from_offset = 0; do { from_offset = requestCallsPage(from_id, from_offset); } while (from_offset > 0 && from_offset < 2000); }
Один запуск загружает максимум 2000 звонков за раз, потом при последующем запуске следующие 2000 загрузит.
В url_tempalate есть поле from_id=_FROM_ID_ - его можно заменить на два параметра from_date и to_date - тогда будет загружать только за определенную дату.
Здесь аналогично добавить подстановку новых параметров, автоматически они не заменятся сами:
var url = url_template.replace('_DOMAIN_', api_addess).replace('_USER_NAME_', user_name).replace('_API_KEY_', api_key).replace('_FROM_ID_', from_id).replace('_FROM_OFFSET_', from_offset);
Далее можно настроить вызов скрипта по расписанию (каждые несколько минут) Там же в редакторе скриптом нажмите иконку часов, там настраивается выполнение по расписанию автоматически (укажите там нужное Вам время обновления данных).
Дата должна быть в формате unix timestamp с помощью функции Date:
var from_date = new Date('2018-09-19T18:28:05+03:00') / 1000);