Bitrix24 доступ к сделкам при помощи кода

Столкнулся с задачей - нужно проверять наличие в СРМ Битрикс сделки, созданной в сторонней системе. При открытии одной из страниц в Битрикс я забираю список идентификаторов сделок созданных сегодня из сторонней системы при помощи js (ajax). В ответ получаю список ID и далее по каждому id нужно в Битриксе проверить - создана ли сделка. Далее нужно создать отсутствующие.

Не могу найти информацию как корректно внутри Битрикса получить список сделок, список полей в сделке и как создать сделку при помощи кода

Подскажите, какими способами можно в Битриксе кодом получить сделки и данные по ним и как можно создать новую сделку?


Ответы (1 шт):

Автор решения: Ivakov

Это можно делать с помощью обращения к Rest API битрикс24.

Оставлю ссылку на документацию Rest API, методы которые вас интересуют: crm.deal.add, crm.deal.fields, crm.deal.get.

Можете протестировать, что будете получать в результате, с помощью Postman.

Пример вызова метода crm.deal.add с помощью JavaScript:

var current = new Date();
var nextMonth = new Date();
nextMonth.setMonth(current.getMonth() + 1);
var date2str = function(d) 
{
    return d.getFullYear() + '-' + paddatepart(1 + 
           d.getMonth()) + '-' + paddatepart(d.getDate()) + 'T' +
           paddatepart(d.getHours()) + ':' + paddatepart(d.getMinutes()) + 
           ':' + paddatepart(d.getSeconds()) + '+03:00';
};
var paddatepart = function(part)
{
    return part >= 10 ? part.toString() : '0' + part.toString();
};
    
BX24.callMethod(
    "crm.deal.add",
    {
        fields:
        {
            "TITLE": "Плановая продажа",
            "TYPE_ID": "GOODS", 
            "STAGE_ID": "NEW",
            "COMPANY_ID": 3,
            "CONTACT_ID": 3,
            "OPENED": "Y", 
            "ASSIGNED_BY_ID": 1, 
            "PROBABILITY": 30,
            "CURRENCY_ID": "USD", 
            "OPPORTUNITY": 5000,
            "CATEGORY_ID": 5,
            "BEGINDATE": date2str(current),
            "CLOSEDATE": date2str(nextMonth)                    
        },
        params: { "REGISTER_SONET_EVENT": "Y" } 
    }, 
    function(result) 
    {
        if(result.error())
            console.error(result.error());
        else
            console.info("Создана сделка с ID " + result.data());
    }
);

Пример кода с помощью PHP cURL:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://your.domain/rest/id_user/web-hook/lists.get?IBLOCK_TYPE_ID=lists',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;?>

Для этого надо будет зарегистрировать свой веб-хук в битрикс24.

Однако помните, что при работе с коробочной версией битрикса нужно использовать для JavaScript другую библиотеку, иначе будет ошибка вида: BX24 is not defined.

В этом случае используем другой код, используя просто BX:

BX.ready(function() {
    var params = {
        'IBLOCK_TYPE_ID': 'lists',
        'IBLOCK_CODE': '...',
        'FILTER': {
            //...
        }
    };
    BX.rest.callMethod(
        'lists.element.get',
        params,
        function(result) {
            if (result.error()) {
                alert("Error: " + result.error());
            } else {
                console.log(result.data()); 
                }
    });
→ Ссылка