написал: Вообщем не знаю как в php, но если писать через js, то передавать нужно прям сам input! только так у меня заработало... очень странный подход конечно...
можете пример на JS показать? а то не очень понятно что значит "сам input".
Столкнулся с тем что метод REST API bizproc.workflow.start очень долгий, такое ощущение что он не просто запускает БП, а ждет ещё и его завершения. В результате чего запуск БП по списку сделок из 600-700 шт. затягивается на долгие 30-40 минут (с учетом контроля всех ограничений по использованию метода). Подскажите, кому куда написать что бы дали хоть какие то пояснения, а может и взяли в доработку этот метод.
P.S. CRM Битрикс24 Облако БП без параметров
P.S. 2 Так же есть подозрение что запуск БП по сделке очень сильно тормозит и другие методы, так как если в роботе на стадии сделки есть запуск БП, то перенос сделок пачками в эту стадию средствами интерфейса битрикса подвисает и переносит максимум по 20-30 сделок из пачки в 50 сделок за 5 минут. Если активити запуска БП убрать, то все 50 сделок меняют стадию сделки меньше чем за минуту.
После result добавьте пробел что бы тег [/URL] не откидывался. Пробел перекодируется в %20 и ссылка будет рабочей Пример: '$result[get_lead][TITLE]' . ' [/URL]'
Такая ситуация возможна когда на одни и те же сущности накладываются наследуемые права, у наследуемых прав приоритет ниже. К примеру в правах менеджера стоит запрет на доступ к стадии "новая" в направлении "Продажи", а в правах начальника стоит разрешение на доступ к направлению "Продажи" и все стадии наследуют это разрешение, но приоритет у него будет ниже чем запрет так как оно наследуемое и из за этого начальник не будет иметь доступ к стадии "новая".
Главное что работает. Посмотрите БП со статусами, в них можно кусок БП вынести в отдельный статус что бы проще было обслуживать (редактировать) может Вас это натолкнет на новые идеи. БП со статусами
<?php
require_once 'crest.php';
function getBigData(string $method = 'crm.company.list'){
/***********************************************/
$params = [
'order' => [
'ID' => 'ASC'
],
'filter' => [
'>UF_CRM_1594794891' => 0 // Внутренний номер магазина боьше нуля
],
'select' => [
'ID', // ID магазина
'UF_CRM_1594794891' // Внутренний номер магазина
],
'start' => 0
];
$result = CRest::call($method, $params); // Делаем запрос что бы понять сколько записей нам надо будет вытянуть
$total = $result['total']; // Всего записей в выборке
$calls = ceil($total / 50); // Сколько запросов надо сделать
$current_call = 0; // Номер текущего запроса
$call_count = 0; // Счетчик вызовов для соблюдения условия не больше 2-х запросов в секунду
sleep(1); // Делаем паузу перед основной работай
$arData = array(); // Массив для вызова callBatch
$result = array(); // Массив для результатов вызова callBatch
$totalResult = array(); // Массив с финальными данными
/***********Цыкл формирования пакета запросов и выполнение их *********/
do {
$current_call++;
$temp = [ // Собираем запрос
'method' => $method,
'params' => [
'order' => [
'ID' => 'ASC'
],
'filter' => [
'>UF_CRM_1594794891' => 0 // Внутренний номер магазина боьше нуля
],
'select' => [
'ID', // ID магазина
'UF_CRM_1594794891' // Внутренний номер магазина
],
'start' => ($current_call - 1) * 50
]
];
array_push($arData, $temp); // Сохраняем собранный запрос в массив параметров arData для передачи его в callBatch
if ((count($arData) == 50) || ($current_call == $calls)) { // Если в массиве параметров arData 50 запросов или это последний запрос
$call_count++; // При каждом вызове увеличиваем счетчик
if ($call_count == 2) { // Проверяем счетчик вызовов call_count
sleep(1); // Если да то делаем паузу 1 сек
$call_count = 0; // Сбрасываем счетчик
}
$result = CRest::callBatch($arData); // Вызываем callBatch
$resultTemp = $result['result']['result']; // Убираем лишнее вложение в массиве
foreach ($resultTemp as $company){ // Перебираем массив что бы
foreach ($company as $value) { // удобно было с ним работать в дальнейшем
array_push($totalResult, $value); // и сохраняем каждый елемент в totalResult
}
}
$arData = []; // Очишаем массив параметров arData для callBatch
}
} while ($current_call < $calls); // Проверяем условие что текущих вызовов меньще чем надо сделать всего
return $totalResult;
}
?>
Перед запуском скрипта не забудьте настроить crest.php Для этого в файле crest.php раскоментируйте строку C_REST_WEB_HOOK_URL = 'https://rest-api.bitrix24.com/rest/1/doutwqkjxgc3mgc1/' //url on creat Webhook и подставьте туда свой вебхук
Данный пример выгружает список компаний по фильтру, если Вам надо лиды то замените метод crm.company.list на crm.lead.list и настройте фильтр и список выгружаемых полей как вам надо.
У нас настроена отправка сообщений через телеграмм в открытую линию к которой привязан клиент. Для настройки надо создать телеграмм бота и получить его токен. настроить открытую линию телеграмм в битриксе при настройке этой линии понадобиться токен телеграмм бота настроить БП на отправку сообщения клиенту через открытую линию
Как это работает: клиент переходит по ссылке открытой линии, автоматически создается лид, менеджер обслуживающий очередь открытой линии привязывает лид к контакту или сделке, как только он это сделал активити в БП начинает слать сообщения в открытую линию клиента
Вся сложность только в том что бы клиент перешел по ссылке и его лид привязали к контакту в битриксе
Можно пойти на хитрость. Сделать скрытые пользовательские поля текстовые и в них сохранять значение из списка и в шаблон документа вставлять не список, а именно эти пользовательские поля.
У этого способа есть свои недостатки, но что бы не мучатся с рестом и не писать приложение пойдет, все сделать можно за 30-60 минут в зависимости от количества полей