Введение
При разработке на «коробочной» версии Битрикс24 часто возникает задача программного получения списка звонков из модуля Voximplant, а также получения ссылок на аудиозаписи разговоров. В этой статье мы разберём, как правильно работать с таблицей b_voximplant_statistic, фильтровать звонки по дате и получать локальные пути к файлам записей.
Область применения и ключевые сущности
Метод Bitrix\Voximplant\StatisticTable::getList() используется для получения статистики звонков в следующих контекстах:
- Получение звонков за период — выборка всех звонков за день, неделю, месяц с фильтрацией по дате
- Фильтрация по типу звонка — входящие, исходящие, пропущенные
- Фильтрация по пользователю — звонки конкретного менеджера
- Получение аудиозаписей — получение ссылок на файлы записей разговоров
- Интеграция с CRM — получение связанных сущностей (компаний, контактов, лидов)
- Аналитика — сбор статистики по длительности, количеству звонков и другим параметрам
Основные поля таблицы b_voximplant_statistic
| Поле | Описание |
|---|---|
ID
|
Уникальный идентификатор звонка |
PORTAL_USER_ID
|
ID пользователя, совершившего звонок |
PHONE_NUMBER
|
Номер телефона |
INCOMING
|
Направление: 1 — входящий, 2 — исходящий |
CALL_START_DATE
|
Дата и время начала звонка |
CALL_DURATION
|
Длительность звонка в секундах |
CALL_STATUS
|
Статус: 0 — пропущенный, 1 — состоявшийся |
CALL_WEBDAV_ID
|
ID файла в диске |
CALL_RECORD_ID
|
ID файла записи в b_file |
CALL_RECORD_URL
|
Прямая ссылка на файл (внешний ресурс) |
CRM_ENTITY_TYPE
|
Тип сущности CRM (COMPANY, CONTACT, LEAD) |
CRM_ENTITY_ID
|
ID сущности CRM |
CRM_ACTIVITY_ID
|
ID активности в CRM |
ORM-метод StatisticTable::getList
ORM-класс \Bitrix\Voximplant\StatisticTable предоставляет метод getList() для выборки звонков с гибкой фильтрацией и сортировкой.
Сигнатура метода
phppublic static function getList(array $parameters = array())
Параметр $parameters
Метод принимает ассоциативный массив со следующими ключами:
filter — фильтрация записей
Важно! Формат даты в фильтре: 'd.m.Y H:i:s' (например, '17.07.2026 00:00:00')
Основные поддерживаемые ключи для фильтрации:
-
=ID— идентификатор звонка -
=PORTAL_USER_ID— ID пользователя -
=PHONE_NUMBER— номер телефона -
=INCOMING— направление (1 — входящий, 2 — исходящий) -
=CALL_STATUS— статус (0 — пропущенный, 1 — состоявшийся) -
=CALL_WEBDAV_ID— ID файла в диске -
=CALL_RECORD_ID— ID файла записи -
=CRM_ACTIVITY_ID— ID активности в CRM -
=CRM_ENTITY_TYPE— тип сущности (COMPANY, CONTACT, LEAD) -
=CRM_ENTITY_ID— ID сущности -
>=CALL_START_DATE— дата начала (от) -
<=CALL_START_DATE— дата начала (до) -
>=CALL_DURATION— длительность (от) -
<=CALL_DURATION— длительность (до)
order — сортировка
php'order' => ['CALL_START_DATE' => 'DESC'] // сначала новые
select — выбираемые поля
По умолчанию возвращаются все поля. Для оптимизации можно указать конкретные:
php'select' => ['ID', 'PHONE_NUMBER', 'CALL_START_DATE', 'CALL_DURATION', 'CALL_RECORD_ID']
limit и offset — ограничения
Для постраничной навигации:
php'limit' => 50, 'offset' => 0
Практические примеры
Пример 1. Получение звонков за сегодня
php<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
use Bitrix\Main\Loader;
use Bitrix\Voximplant\StatisticTable;
Loader::includeModule('voximplant');
$today = date('d.m.Y');
$filter = [
'>=CALL_START_DATE' => $today . ' 00:00:00',
'<=CALL_START_DATE' => $today . ' 23:59:59',
];
$params = [
'order' => ['CALL_START_DATE' => 'DESC'],
'filter' => $filter,
];
$dbRes = StatisticTable::getList($params);
$calls = [];
while ($call = $dbRes->fetch()) {
$calls[] = $call;
}
echo 'Найдено звонков: ' . count($calls);
?>
Пример 2. Получение звонков за произвольную дату
php<?php
$date = '17.07.2026';
$filter = [
'>=CALL_START_DATE' => $date . ' 00:00:00',
'<=CALL_START_DATE' => $date . ' 23:59:59',
];
Пример 3. Получение звонков за период
php<?php
$dateFrom = '10.07.2026';
$dateTo = '17.07.2026';
$filter = [
'>=CALL_START_DATE' => $dateFrom . ' 00:00:00',
'<=CALL_START_DATE' => $dateTo . ' 23:59:59',
];
Пример 4. Получение звонков конкретного пользователя
php<?php
$userId = 60;
$today = date('d.m.Y');
$filter = [
'=PORTAL_USER_ID' => $userId,
'>=CALL_START_DATE' => $today . ' 00:00:00',
'<=CALL_START_DATE' => $today . ' 23:59:59',
];
Пример 5. Получение только состоявшихся звонков
php<?php
$filter = [
'=CALL_STATUS' => 1,
'>=CALL_START_DATE' => $today . ' 00:00:00',
'<=CALL_START_DATE' => $today . ' 23:59:59',
];
Пример 6. Получение звонков с аудиозаписью
php<?php
$filter = [
'!=CALL_RECORD_ID' => false,
'>=CALL_START_DATE' => $today . ' 00:00:00',
'<=CALL_START_DATE' => $today . ' 23:59:59',
];
Пример 7. Получение звонков по номеру телефона
php<?php
$filter = [
'=PHONE_NUMBER' => '79507883158',
'>=CALL_START_DATE' => $today . ' 00:00:00',
'<=CALL_START_DATE' => $today . ' 23:59:59',
];
Пример 8. Получение звонков по ID файла
php<?php
$webdavId = 807003;
$filter = [
'=CALL_WEBDAV_ID' => $webdavId,
];
$dbRes = StatisticTable::getList([
'filter' => $filter,
'limit' => 1
]);
$call = $dbRes->fetch();
Пример 9. Получение звонков по активности CRM
php<?php
$activityId = 1719881;
$filter = [
'=CRM_ACTIVITY_ID' => $activityId,
];
$dbRes = StatisticTable::getList([
'filter' => $filter,
'limit' => 1
]);
$call = $dbRes->fetch();
Получение локального пути к аудиозаписи
Для получения правильного файла записи используйте поле CALL_RECORD_ID:
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
use Bitrix\Main\Loader;
use Bitrix\Voximplant\StatisticTable;
use Bitrix\Main\FileTable;
Loader::includeModule('voximplant');
$webdavId = 807003;
$statistic = StatisticTable::getList([
'filter' => ['=CALL_WEBDAV_ID' => $webdavId],
'limit' => 1
])->fetch();
if (!$statistic) {
die('Звонок не найден');
}
$recordId = $statistic['CALL_RECORD_ID'];
if (empty($recordId)) {
die('У звонка нет аудиозаписи');
}
$file = FileTable::getList([
'select' => ['ID', 'SUBDIR', 'FILE_NAME', 'FILE_SIZE', 'CONTENT_TYPE'],
'filter' => ['=ID' => $recordId],
'limit' => 1
])->fetch();
if ($file) {
$localPath = '/upload/' . $file['SUBDIR'] . '/' . $file['FILE_NAME'];
$fullPath = $_SERVER['DOCUMENT_ROOT'] . $localPath;
echo 'ID файла: ' . $file['ID'] . "\n";
echo 'Локальный путь: ' . $localPath . "\n";
echo 'Полный путь: ' . $fullPath . "\n";
echo 'Файл существует: ' . (file_exists($fullPath) ? 'ДА' : 'НЕТ') . "\n";
}
?>
Особенности и рекомендации
1. Формат даты
При фильтрации по дате используйте формат 'd.m.Y H:i:s':
$filter = [
'>=CALL_START_DATE' => '17.07.2026 00:00:00',
'<=CALL_START_DATE' => '17.07.2026 23:59:59',
];
2. Получение правильного файла
Для получения аудиозаписи используйте поле CALL_RECORD_ID:
$recordId = $statistic['CALL_RECORD_ID'];
$file = FileTable::getList([
'filter' => ['=ID' => $recordId],
'limit' => 1
])->fetch();
3. Проверка наличия аудиозаписи
phpif (!empty($statistic['CALL_RECORD_ID'])) {
// У звонка есть аудиозапись
}
4. Производительность
При большом количестве звонков используйте limit и offset:
$params = [
'filter' => $filter,
'order' => ['CALL_START_DATE' => 'DESC'],
'limit' => 100,
'offset' => 0,
];
Заключение
\Bitrix\Voximplant\StatisticTable::getList() — это основной ORM-инструмент для программного доступа к статистике звонков в коробочной версии Битрикс24. Он обеспечивает гибкую фильтрацию и сортировку, позволяя получать звонки по датам, пользователям, статусам и другим параметрам.
Ключевые моменты:
-
Формат даты в фильтре:
'd.m.Y H:i:s' -
Для получения аудиозаписи используйте
CALL_RECORD_ID -
Всегда проверяйте наличие
CALL_RECORD_IDперед попыткой получить файл -
Используйте
limitиoffsetдля оптимизации производительности
Понимание этого метода необходимо каждому разработчику, работающему с телефонией в Битрикс24, особенно при реализации отчётов, аналитики и интеграций с внешними системами.
