Как получить в ответ от веб хука результат работы бизнес процесса — текстовую строку?
Правильный ли алгоритм создания сделки через REST в Bitrix24?
Я так понимаю, что это лиды - это пользователи и делается через
Правильно ли я понимаю, что надо перед тем как создавать сделку, надо сделать поиск лида (crm.lead.get) из списка всех лидов (/crm.lead.list)?
$queryData = [
'fields' => [
"TITLE" => "lid 1",
"NAME" => "name name",
'PHONE' => [
[
"VALUE" => "654654",
"VALUE_TYPE" => "WORK"
]
]
],
'params' => ["REGISTER_SONET_EVENT" => "Y"]
];
echo sendToBitrix('crm.lead.add', $queryData);
function sendToBitrix( $method, $data )
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://**********/'.$method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>json_encode($data),
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
// Выключаем кеширование, запоминая предыдущее значение
$oldCacheTime = \CCalendar::CacheTime();
\CCalendar::CacheTime(0);
// ... Делаем необходимые действия
// Возвращаем все как было
\CCalendar::CacheTime($oldCacheTime);
unset($oldCacheTime);
use \Bitrix\Main,
\Bitrix\Tasks
;
/**
* Оборачиваем наш код в try-catch потому что мы не хотим
* чтобы упавшее действие подвесело нам ход бизнес-процесса.
*
* Обращаю внимание: в catch блоке ловим именно Throwable, а не Exception.
*/
try
{
/**
* Подключаем модуль Задачи (tasks) через requireModule
* он в случае отсутствия модуля выкинет нам Exception
*/
Main\Loader::requireModule('tasks');
/**
* Лучше избегать магических подстановок в c использованием фигурных скобок
* Если там по какой-то причине будет экранирующий символ это больно ударит по системе
*
* Для этого используем 2 хака:
* 1. Используем ParseValue метод, который из подобного синтаксиса достанет значение
* 2. Чтобы мы сами не попали в автозамену регулярок разделим выражение так, чтобы мы
* не прошли по маске
*
* Ну и само-собой выражения на русском не парсятся, поэтому придется использовать
* старые выражения из технических полей.
*/
$actionUserId = (int) mb_substr(
$this->ParseValue("{"."=Document:AssigneById}"),
5
);
if ( empty($actionUserId) )
{
throw new \Exception("Employee identifier is empty!");
}
$taskId = (int) $this->ParseValue("{"."=Template:TaskId}");
if ( empty($taskId) )
{
throw new \Exception("Task identifier is empty!");
}
/**
* Воспользуемся недокументированной функцией по обновлению задачи
* В целом она дает то же самое - т.е. меняет статус, но дополнительно
* метод вызывает необходимые push-уведомления, записи в логи, очистки
* кешей и т.п.
*/
$updateData = Tasks\Manager\Task::update(
$actionUserId,
$taskId,
[
'STATUS' => \CTasks::STATE_PENDING
]
);
if ( $updateData['ERRORS']->checkHasErrors() )
{
throw new \Exception( $updateData['ERRORS']->getMessages() );
}
/* Сигнализируем что все ок */
$this->WriteToTrackingService(
"Task renewed",
0,
\CBPTrackingType::Custom
);
}
catch( \Throwable $e )
{
/* Если что-то поймали - запишем в лог */
$this->WriteToTrackingService(
sprintf(
"Error '%s' in file %s on line %i",
$e->getMessage(),
$e->getFile(),
$e->getLine(),
),
0,
\CBPTrackingType::Error
);
}
Из интернет магазина заказыв летят в битрикс24.
use \Bitrix\Main,
\Bitrix\Crm;
Main\Loader::requireModule('crm');
$entityRequisite = Crm\EntityRequisite::getSingleInstance();
$requisiteList = $entityRequisite->getList([
'select' => ['*', 'UF_*'],
'filter' => [
'=CREATED_BY_ID' => 1,
'><DATE_CREATE' => [
Main\Type\DateTime::createFromTimestamp( strtotime("28.09.2022 00:00:00") ),
Main\Type\DateTime::createFromTimestamp( strtotime("01.10.2022 00:00:00") )
]
],
]);
foreach ($requisiteList as $requisite)
{
var_dump($requisite);
}
Если что, коробок Битрикс.
{"error":"NO_AUTH_FOUND","error_description":"Wrong authorization data"}