В процессе интеграции 1С с облачной телефонией Битрикс24 часто возникает задача получения статистики совершенных вызовов. Это необходимо для построения управленческих отчетов, оценки эффективности работы менеджеров или просто для фиксации активности в базе 1С. Однако при использовании стандартного метода REST API voximplant.statistic.get разработчики часто сталкиваются с неочевидными ограничениями: некорректной работой фильтров по датам и лимитом на количество возвращаемых записей. В этой статье мы подробно разберем, как правильно сформировать запрос из 1С, настроить фильтрацию и получить полные данные, включая общее количество звонков.
Самый простой способ взаимодействия между 1С и Битрикс24 — это использование входящего вебхука. Рассмотрим ситуацию, когда нам нужно отправить запрос к методу voximplant.statistic.get. Для этого в Битрикс24 создается вебхук, которому назначаются права доступа на работу с телефонией. URL запроса будет выглядеть примерно так: https://адрес_портала/rest/ID_пользователя/код_вебхука/voximplant.statistic.get.json.
Проанализируем типичную проблему: при обращении к этому методу без параметров Битрикс24 возвращает данные, начиная с самых старых записей (например, с 2020 года), и ограничивает выборку. По умолчанию REST API выдает не более 50 записей за один раз. Чтобы получить актуальные данные, нам необходимо научиться управлять фильтрами.
Одной из главных сложностей является передача параметров фильтрации в строке GET-запроса. Часто использование стандартного оператора «больше или равно» (>=) приводит к тому, что фильтр игнорируется. Выясним причину: это происходит из-за особенностей обработки спецсимволов в URL. Символ > и тем более комбинация >= должны быть правильно закодированы (URL-encoded).
Как показывает практика, стабильнее всего работает оператор «строго больше» (>). Если нам нужны данные с начала 2024 года, структура фильтра в URL будет выглядеть следующим образом:
?filter[>CALL_START_DATE]=2024-01-01
Обратите внимание, что формат даты также имеет значение. Рекомендуется использовать стандарт ISO 8601 (YYYY-MM-DD или YYYY-MM-DDThh:mm:ss+TZ). Проанализируем пример формирования такого запроса в коде 1С.
Для отправки запроса в 1С мы используем объекты HTTPСоединение и HTTPЗапрос. Рассмотрим пример кода, который формирует запрос с фильтром по дате:
// Параметры подключения
Сервер = "mycompany.bitrix24.ru";
ПутьКМетоду = "/rest/355/xxxxxxxxxxxxx/voximplant.statistic.get.json";
ПараметрыЗапроса = "?filter[>CALL_START_DATE]=2024-01-01";
// Создаем соединение (используем защищенное соединение OpenSSL)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, 443,,,,, ЗащищенноеСоединение);
// Формируем запрос
Запрос = Новый HTTPЗапрос(ПутьКМетоду + ПараметрыЗапроса);
// Получаем ответ
Ответ = Соединение.Получить(Запрос);
РезультатСтрокой = Ответ.ПолучитьТелоКакСтроку();
Если вы выполните код выше, вы заметите, что Битрикс24 вернул массив данных, но их количество ограничено. Это связано с механизмом пагинации. Рассмотрим, как получить все данные или хотя бы узнать их общее количество.
total содержит общее количество записей, которые удовлетворяют условиям вашего фильтра. Если ваша задача — просто получить число звонков, вам не нужно выкачивать все записи, достаточно прочитать это поле из первого же ответа.start, кратный 50 (например, &start=50, &start=100).next. Если оно есть, это идентификатор для получения следующей порции данных.Проанализируем, как разобрать JSON и получить заветное число звонков:
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(РезультатСтрокой);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Получаем общее количество звонков из поля total
ОбщееКоличество = 0;
Если ДанныеОтвета.Свойство("total") Тогда
ОбщееКоличество = ДанныеОтвета.total;
Сообщить("Всего найдено звонков: " + ОбщееКоличество);
КонецЕсли;
Важно затронуть вопрос безопасности, который часто поднимается при обсуждении вебхуков. Вебхук содержит секретный токен прямо в строке запроса. Если этот URL попадет в логи сервера или будет перехвачен, злоумышленник получит доступ к данным телефонии.
Для корпоративных систем высокого уровня безопасности мы рекомендуем использовать «Локальное приложение» в Битрикс24. В этом случае 1С будет авторизовываться по протоколу OAuth 2.0, используя client_id и client_secret, получая временные токены (access_token), которые живут всего один час. Это значительно снижает риск утечки данных.
Для более точного подсчета (например, если нужно количество звонков по конкретному номеру телефона или определенного типа) мы можем расширить структуру фильтра. Разберем наиболее полезные поля:
PHONE_NUMBER — номер телефона клиента.PORTAL_NUMBER — номер вашей линии в Битриксе, на которую пришел вызов.CALL_TYPE — позволяет отсеять типы вызовов (1 — исходящий, 2 — входящий, 3 — входящий с перенаправлением, 4 — обратный звонок).Например, чтобы получить только входящие звонки на конкретный номер, строка фильтра примет вид: ?filter[>CALL_START_DATE]=2024-01-01&filter[CALL_TYPE]=2&filter[PORTAL_NUMBER]=74951234567.
Подводя итог, проанализируем основные шаги для успешного получения статистики звонков:
voximplant.statistic.get с обязательной фильтрацией по дате, чтобы не перегружать сервер и не получать устаревшие данные.>= не срабатывает, используйте > или убедитесь в корректном URL-кодировании.total из JSON-ответа.start.Таким образом, комбинируя возможности встроенного языка 1С и гибкость REST API Битрикс24, мы можем построить надежную систему мониторинга звонков и интеграции телефонии в бизнес-процессы компании.