# Подробное описание сложных методов Некоторые методы обладают сложной структурой и требуют более детального объяснения. В этом разделе вы найдете отдельные страницы, посвященные подробному описанию параметров и особенностей работы таких методов. # Операторы условий в методах В условиях можно использовать различные операторы: - **Сравнения**: =, <, >, <=, >=, <>, != - **Строковые**: like, not like - **Множества**: IN, NOT IN
ОператорОписаниеТип переменнойПример
=Равноstring, int\['id', '=', 100\]
<Меньшеint, float\['price', '<', 1000\]
>Большеint, float\['age', '>', 18\]
<=Меньше или равноint, float\['quantity', '<=', 50\]
>=Больше или равноint, float\['rating', '>=', 4.5\]
<> или !=Не равноstring, int\['status', '<>', 'closed'\]
likeСоответствует шаблонуstring\['name', 'like', '%John%'\]
not likeНе соответствует шаблонуstring\['email', 'not like', '%@spam.com'\]
ilikeСоответствует шаблону (без учета регистра)string\['title', 'ilike', '%book%'\]
INСодержится в спискеarray\['id', 'IN', \[1, 2, 3\]\]
NOT INНе содержится в спискеarray\['status', 'NOT IN', \['closed', 'deleted'\]\]
isРавно (для null)null\['manager\_id', 'is', null\]
is notНе равно (для null)null\['end\_date', 'is not', null\]
regexpСоответствует регулярному выражениюstring\['phone', 'regexp', '^\\\\+7'\]
not regexpНе соответствует регулярному выражениюstring\['username', 'not regexp', '\[0-9\]'\]

**Примечание!** Некоторые операторы могут быть недоступны или работать иначе.

Пример использования операторов: ```JavaScript let where = [ ['id', '>', 1000], ['name', 'like', '%Иван%'], ['channels.code', 'IN', ['telegram', 'whatsapp']] ] ``` # where для bot.findLeads() ### Базовая структура Каждое условие внутри массива **where** имеет следующую структуру: - **Простое условие**: \['поле', 'значение'\] — проверяет, равно ли поле заданному значению; - **Условие с оператором**: \['поле', 'оператор', 'значение'\] — проверяет поле с использованием указанного оператора. ```JavaScript let where = [ ['поле', 'значение'], ['поле', 'оператор', 'значение'] ] bot.findLeads([], where, []) ``` ### Доступные категории полей - Поля лидов; - Каналы (channels); - Статусы лидов (leadstatuses); - Атрибуты лидов (lead\_attributes). #### Поля лидов Это основные поля, доступные для каждого лида.
ПолеОписание
idID лида
nameИмя лида
identificationID в мессенджере (например, Telegram ID)
person\_idID персоны
manager\_idID менеджера
bot\_idID бота
channel\_idID канала
lang\_codeКод языка
status\_idID статуса
is\_muteВключен ли бот для лида (0 или 1)
is\_forwardedПередан ли оператору (0 или 1)
last\_activityДата последней активности
last\_responseTimestamp последнего ответа
messengerID мессенджера
bot\_debug\_levelУровень отладки бота (0 - обычный, 11 - админ)
created\_atДата создания
updated\_atДата обновления
dialog\_idID диалога
unread\_countКоличество непрочитанных сообщений
forwarded\_atДата передачи оператору
Пример использования: ```JavaScript where = [ ['id', 145492], ['name', 'like', '%Иван%'], ['created_at', '>=', '2023-01-01'] ] ``` #### Каналы (channels) Для поиска по каналам используются поля **channels.code** и **channels.id**.
КодIDОписание
unknown0Неизвестный канал
avito1Avito
facebook2Facebook
instagram3Instagram
livechatWidget4LiveChat Widget
skype5Skype
telegram6Telegram
twitter7Twitter
viber8Viber
vk9VKontakte
whatsapp10WhatsApp
youla11Youla
wechat12WeChat
metabotWidget13MetaBot Widget
webim14Webim
jivoWidget15Jivo Widget
odnoklassniki16Odnoklassniki
apple\_business\_chat17Apple Business Chat
Канал текущего лида можно получить с помощью метода **lead.getMessengerCode()**. Пример использования: ```JavaScript // Ищет только telegram let where = [ ['channels.code', 'telegram'] ] // Ищет telegram и whatsapp let where = [ ['channels.id', 'IN', [6, 10]] ] ``` #### Статусы лидов (leadstatuses) Для поиска по статусам используются поля **leadstatuses.name** и **leadstatuses.id**. Пример использования: ```JavaScript let where = [ ['leadstatuses.name', 'Новый'], ['leadstatuses.id', 1] ] ```

Используйте вместо **leadstatuses.id** — **status\_id**, а вместо **channels.id** — **channel\_id**. Если вы выполняете большие операции это сократит время вычисления.

#### Атрибуты лидов (lead\_attributes) Для поиска по атрибутам используются следующие поля:
ПолеОписание
lead\_attributes.attribute\_typeТип атрибута (tag, variable, system, json, context)
lead\_attributes.attribute\_keyКлюч атрибута
lead\_attributes.attribute\_valueЗначение атрибута. Если type = tag, то можно не использовать
Пример использования: ```JavaScript let where = [ ['lead_attributes.attribute_type', 'variable'], ['lead_attributes.attribute_key', 'is_pay'], ['lead_attributes.attribute_value', '1'] ] ``` ### Полный пример использования ```JavaScript let where = [ ['name', 'like', '%Иван%'], ['channels.code', 'telegram'], ['leadstatuses.name', 'Новый'], ['lead_attributes.attribute_type', 'tag'], ['lead_attributes.attribute_key', 'важный_клиент'] ] let leads = bot.findLeads([], where, []) debug(leads) ``` # orderBy для bot.findLeads() ### Базовая структура: Параметр **orderBy** используется для сортировки результатов поиска лидов по заданным полям. Он представляет собой массив условий, где каждое условие задаёт поле для сортировки и порядок сортировки (по возрастанию или по убыванию). Каждое условие внутри массива **orderBy** имеет следующую структуру: ```JavaScript let orderBy = [ ['поле', 'порядок'] ] bot.findLeads([], [], orderBy) ``` - **Поле** — название поля, по которому будет производиться сортировка (например, created\_at, updated\_at, id); - **Порядок** — определяет, как будет сортироваться поле. Возможны два значения: - **ASC** — по возрастанию; - **DESC** — по убыванию. Доступные категории полей: - [Поля лидов;](https://docs.metabot24.ru/link/744#bkmrk-1.-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%BB%D0%B8%D0%B4%D0%BE%D0%B2) - [Статусы лидов (leadstatuses).](https://docs.metabot24.ru/link/744#bkmrk-3.-%D0%A1%D1%82%D0%B0%D1%82%D1%83%D1%81%D1%8B-%D0%BB%D0%B8%D0%B4%D0%BE%D0%B2-%28le) ### Примеры использования #### Сортировка по одному полю ```JavaScript let orderBy = [ ['created_at', 'ASC'] ] let leads = bot.findLeads([], [], orderBy) ``` Этот пример сортирует лидов по дате создания в порядке возрастания (от самого раннего к самому позднему). #### Сортировка по нескольким полям ```JavaScript let orderBy = [ ['updated_at', 'DESC'], ['id', 'ASC'] ] let leads = bot.findLeads([], [], orderBy) ``` Этот пример сначала сортирует лидов по дате обновления в порядке убывания (от самого последнего к самому раннему), а затем — по **id** в порядке возрастания. ### Пример с where и orderBy ```JavaScript let where = [   ['name', 'like', '%Иван%'],   ['channels.code', 'telegram'] ] let orderBy = [   ['created_at', 'DESC'] ] let leads = bot.findLeads([], where, orderBy) ```