В процессе разработки интеграций 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 получить невозможно. А значит и нет необходимости указывать порядковый номер телефона или почты.