November 17, 2023

Скрипт для МЗ

Открываете нужную таблицу в google Скрипт для МЗ , там в меню

Инструменты->Редактор скриптов.

Туда вставляете этот текст ниже (текущий стандартный шаблон скрипта стираете и полностью эти текстом заменяете):

В этом тексте еще заменить api_address, user_name, api_key на ваши (в ЛК в настройки->интеграция->там их показывает) + еще там же в user_names по аналогии задать имена пользователей, чтобы они в списке звонков подставились вместо почты (будет из без этого работать, просто имен сотрудников не будет видно)

После вставки нажмите там сохранить в редакторе скриптов, потом в меню

Выполнить->Запустить функцию->loadCalls

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

Готовый код:

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);

API - общие сведения