Для получения информации о всех звонках, связанных с компанией и привязанным к ней контактам, необходимо сделать три REST-запроса. Сначала получаем номера телефонов самой компании с помощью метода crm.company.get. В параметры запроса передаем ID компании и прописываем JSONPath вида: $..PHONE[*].VALUE
Вторым запросом получаем номера телефонов, связанных с компанией контактов. Для этого нужно использовать метод crm.contact.list, в запрос передаем параметры:
"FILTER": {"COMPANY_ID": "1", "HAS_PHONE": "Y"}, где "COMPANY_ID": "1"– фильтрует результат по привязке к ID компании, для которой ищем связанные звонки, "HAS_PHONE": "Y" – отфильтрует в результаты запроса только контакты с заполненным полем "номер телефона".
"SELECT": ["PHONE"] – в результаты попадет только значения поля PHONE, то есть номера телефонов контактов.
Прописываем в JSONPath:$..VALUE и получаем номера телефонов в связанных с компанией контактах.
Следующим запросом по методу voximplant.statistic.get получаем информацию о звонках для полученных выше телефонов. В параметры запроса передаем:
"FILTER":{ "%PHONE_NUMBER": [‘массив значений номеров’]} – отфильтровываем результаты по содержанию значений номеров, полученных ранее, в поле PHONE_NUMBER.
Таким образом мы получили все звонки по компании с ID=1 и по связанным с ней контактам. Используя в этом запросе JSONPath, мы можем получить в результаты значения только определенных параметров звонков.
Поскольку параметр запроса "FILTER":{ "%PHONE_NUMBER": [‘массив значений номеров’]} также выдает результаты с частичным совпадением значений, для получения корректных результатов требуется, чтобы номера телефонов были указаны в международном формате. В противном случае для получения всех звонков по компании можно применить еще один способ:
- получить не номера телефонов, а значения ID, связанных с компанией контактов, по методу crm.contact.list
- с помощью метода voximplant.statistic.get с прописанным параметром запроса "FILTER":{"CRM_ENTITY_TYPE": "COMPANY","CRM_ENTITY_ID": "1"} получить звонки, связанные с компанией.
- использовать тот же метод voximplant.statistic.get с параметром запроса "FILTER":{"CRM_ENTITY_TYPE": "CONTACT","CRM_ENTITY_ID": ‘ID контакта'} для отдельных запросов по каждому связанному с компанией контакту.
Этот способ с большим числом запросов и соответственно с высокой нагрузкой на сервер, поэтому не рекомендуется к использованию.
Получение id звонков, связанных с компанией и привязанным к ней контактам:
CModule::IncludeModule("crm");
$compId = 6; //id компании
//получаем id звонков связанных с компанией
$filter = array("PROVIDER_TYPE_ID" => "CALL", "OWNER_TYPE_ID" => "4", "OWNER_ID" => $compId); //фильтр по компании
$entityResult = \CCrmActivity::getList(false, $filter, false, false, false);
while ($actual = $entityResult->Fetch())
{
$callIds = ($callIds . $actual[ID] . ',');//id звонков добавляем в переменную
}
//получаем id связанных с компанией контактов
$filter = array("COMPANY_ID" => $compId); //фильтр по id компании
$entityResult = \CCrmContact::GetListEx(
false,
$filter,
false,
false,
false,
false);
while ($actual = ($entityResult->fetch()))
{
$contactIds = ($contactIds . $actual[ID] . ',');
}
$contactIds = explode(",", substr($contactIds, 0, -1)); //получили массив со значениями id связанных контактов
//получаем id связанных звонков для каждого контакта через цикл
while (count($contactIds) > 0)
{
$actual = array_shift($contactIds);
$filter = array("PROVIDER_TYPE_ID" => "CALL", "OWNER_TYPE_ID" => "3", "OWNER_ID" => $actual);
$entityResult = \CCrmActivity::getList(false, $filter, false, false, false);
while ($actual = $entityResult->Fetch())
{
$callIds = ($callIds . $actual[ID] . ',');
}
}
$callIds = explode(",", substr($callIds, 0, -1));
print_r($callIds);//выводим все результаты по звонкам
На какие вопросы отвечает эта статья:
1. Как получить информацию о всех звонках, связанных с компанией и привязанным к ней контактам?
2. Как получить id звонков, связанных с компанией и привязанными к ней контактами?
3. По каким rest-запросам можно получить все звонки "Компании"?