REST-запросы для получения связанных звонков

Для получения информации о всех звонках, связанных с компанией и привязанным к ней контактам, необходимо сделать три 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-запросам можно получить все звонки "Компании"?







Теги: rest activity