В процессе разработки интеграций Joomla с CRM Битрикс24 столкнулся с тем, что официальная документация по REST API для Битрикс24 неполная и не отражает всех возможных инструментов работы с CRM, к тому же разные версии документации содержат разные примеры, а порой и артефакты устаревшего синтаксиса. Поэтому немало способов решения задач находится эмпирически.
Для связи с Битрикс24 используем их PHP библиотеку CRest, предварительно настроенную.
- Задача:
- Проверить есть ли у контакта e-mail или номер телефона.
$find_doubles = [
'find_doubles_by_phone' => [ //Поиск дублей по телефону
'method' => 'crm.duplicate.findbycomm',
'params' => [
"type" => "PHONE",
"values" => [+79000000000] //Это массив вида [0] - '+79000000000'
],
],
'find_doubles_by_email' => [ //Поиск дублей по email
'method' => 'crm.duplicate.findbycomm',
'params' => [
"type" => "EMAIL",
"values" => [info @123.ru] //Это массив вида [0] - 'info @123.ru'
]
]
];
$find_doublesBitrix24 = CRest::callBatch($find_doubles); //Пакетный вызов
На выходе получаем массив следующего вида:
Array
(
[result] => Array
(
[result] => Array
(
[find_doubles_by_phone] => Array
( // Пустой массив означает, что совпадений нет
)
[find_doubles_by_email] => Array
(
[LEAD] => Array //Список id лидов с этим email
(
[0] => 1
[1] => 5
[2] => 7
[3] => 9
[4] => 11
[5] => 13
[6] => 15
[7] => 17
[8] => 19
[9] => 21
[10] => 23
[11] => 27
[12] => 29
[13] => 31
[14] => 33
)
[CONTACT] => Array //Список id контактов с этим email
(
[0] => 15
)
)
)
[result_error] => Array
(
)
[result_total] => Array
(
)
[result_next] => Array
(
)
[result_time] => Array
(
[find_doubles_by_phone] => Array
(
[start] => 1588045394.5629
[finish] => 1588045394.5661
[duration] => 0.003209114074707
[processing] => 0.0031490325927734
[date_start] => 2020-04-28T06:43:14+03:00
[date_finish] => 2020-04-28T06:43:14+03:00
)
[find_doubles_by_email] => Array
(
[start] => 1588045394.5661
[finish] => 1588045394.5676
[duration] => 0.0015058517456055
[processing] => 0.0014550685882568
[date_start] => 2020-04-28T06:43:14+03:00
[date_finish] => 2020-04-28T06:43:14+03:00
)
)
)
[time] => Array
(
[start] => 1588045394.5317
[finish] => 1588045394.5677
[duration] => 0.035916090011597
[processing] => 0.0048708915710449
[date_start] => 2020-04-28T06:43:14+03:00
[date_finish] => 2020-04-28T06:43:14+03:00
)
)
Метод crm.duplicate.findbycomm
позволяет ограничить область поиска, если указать параметр entity_type.
- Задача №2
- Добавить к контакту новый email или телефон.
$b24contact_id = $find_doublesBitrix24["result"]["result"]["find_doubles_by_phone"]["CONTACT"][0]
$req_crm_contact_fields = CRest::call(
"crm.contact.update",[
'ID' => $b24contact_id,
'fields'=>[
'PHONE' => [
'n0' => [
'VALUE' => $new_phone, //В этой переменной находится собственно номер телефона, строка
'TYPE' => 'WORK'
]
]
]
]
);
Параметр ID
(контакта) должен быть указан за пределами "fields".
Обратите внимание на строку 6: при редактировании лида таким образом не нужно вычислять порядковый номер телефона или почты n0, n1, n2. Достаточно просто передать массив с контактными данными так же, как при создании лида. В документации Битрикс24 для изменения данных контакта обязательно требовалось указывать внутренний ID изменяемого поля, для получения которого создавался дополнительный запрос. В нашем случае этого поля еще нет, поэтому его ID получить невозможно. А значит и нет необходимости указывать порядковый номер телефона или почты.