К списку статей

Кастомизация поиска

В начале звонка из телефонии на модуль интеграции поступает номер телефона. С этим номером модуль делает запрос в Битрикс24 для поиска сущности, к которой нужно прикрепить данный звонок. И далее работает с этой сущностью.

Начиная с версии 2.8.52 модуля появилась возможность сделать фильтр по этим сущностям, чтобы ограничить поиск.

Обычная схема поиска:

  1. Выполняем поиск сущностей по номеру.
  2. Получаем поля для трёх найденных сущностей (контакта, компании, лида) и берём первую валидную. Пример: по номеру нашли два лида с ID [123, 456]. При получении полей лида 123 произошла ошибка. Лид 456 получить удалось, поэтому используем его.

Кастомная схема поиска:

  1. Выполняем поиск дубликатов по номеру.
  2. Выполняем поиск сущности, используя фильтр по полям, полученный в кастомизаторе. ID, полученные на шаге [1] используем, если не указаны иные. Пример: нашли три лида с ID (123, 456, 789). Хотим использовать лиды только определённого статуса, например STATUS_ID = "Some_Status". Указываем эти параметры в кастомизаторе и выполняем поиск с использованием фильтра. В результате берём лид с подходящим статусом.

При поиске используется API метод crm.#entity#.list (например, для лидов). Данные в кастомизаторе подставляются в параметр filter.

Для изменения поиска нужно:

  1. Включить кастомизатор
  2. Поставить опцию "Кастомизировать параметры поиска" в конфиге. В файле /opt/bx24asterisk/custom/process_search_params.php кастомизатора нужно составить фильтр для поиска и передать вернуть его. Если папки /opt/bx24asterisk/custom нет, редактируем файла /opt/bx24asterisk/customizer.php, после строки case 'process_search_params':

Подробное описание входящих\выходящих параметров описано в статье

Вид параметров:

"filter": { 
    "company": {"ID":"123", "NAME":"noname"},// фильтр для поиска по компаниям
    "contact": {"LAST_NAME":"Ivanoff"},      // фильтр для поиска по контактам
    "lead": {"STATUS_ID": "bad"}             // фильтр для поиска по лидам
}

Если один из массивов пуст, то поиск по такому виду сущности не выполняется.

Описание полей, которые можно использовать:

  1. Поля лида
  2. Поля контакта
  3. Поля компании

Примеры:

Регистрируем звонки только на лиды, которые НЕ являются новыми

$filter = array(
    'lead' => array(
        '!STATUS_ID'=> 'NEW'
    )
);
$params["filter"] = $filter;

return array(
    'state' => 'success',
    'data' => $params
);

Эта кастомизация позволяет решить множество различных задач, например:

  1. Сами создаём сущность и заставляем работать с ней.
  2. Среди несконвертированных лидов с суммой больше нуля (Параметры).
  3. Поиск среди контактов с непустым именем/связанной компанией/сделкой и т.д.
  4. Поиск среди контактов определённого типа (клиент, кандидат на должность) (Параметры).

Все случаи, фильтры можно соединять, перемешивать. Лид менять на контакт и наоборот.