Как связать сделку с контактом при использовании метода crm.deal.contact.add?

Как правильно создать сделку и контакт в CRM, а затем связать их между собой с использованием метода crm.deal.contact.add? Можете ли вы предоставить пример самого простого способа сделать это без использования cRest, просто на PHP?
  • 31 марта 2024 г. 12:40
Ответы на вопрос 2
Для связывания сделки с контактом при использовании метода crm.deal.contact.add вам сначала нужно создать сделку и контакт в CRM, а затем воспользоваться указанным методом для установления связи между ними.

Пример самого простого способа создания сделки и контакта в CRM, а затем их связывания на PHP:

```php
<?php

// Подключение к CRM Битрикс24
$domain = 'Ваш_домен'; // Например, mycompany.bitrix24.ru
$auth = 'Ваш_ключ_аутентификации'; // Найдите в настройках вашего приложения CRM
$queryUrl = "https://$domain/rest/1/$auth/";
$queryData = http_build_query(array(
    'fields' => array(
        'TITLE' => 'Название сделки',
        'TYPE_ID' => 'SALE',
        'STAGE_ID' => 'NEW',
        'CONTACT_ID' => array('Созданный_контакт_ID')
    ),
));

// Создание сделки
$dealAdd = file_get_contents($queryUrl . 'crm.deal.add', false, stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'ignore_errors' => true,
        'content' => $queryData
    ),
)));

// Получение ID созданной сделки
$dealId = json_decode($dealAdd, true)['result'];

// Создание контакта
$queryData = http_build_query(array(
    'fields' => array(
        'NAME' => 'Имя контакта',
        'LAST_NAME' => 'Фамилия контакта',
        'PHONE' => array(
            array(
                'VALUE' => 'Телефон контакта',
                'VALUE_TYPE' => 'WORK'
            )
        ),
        'EMAIL' => array(
            array(
                'VALUE' => 'Email контакта',
                'VALUE_TYPE' => 'WORK'
            )
        )
    ),
));

$contactAdd = file_get_contents($queryUrl . 'crm.contact.add', false, stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'ignore_errors' => true,
        'content' => $queryData
    ),
)));

// Получение ID созданного контакта
$contactId = json_decode($contactAdd, true)['result'];

// Связывание сделки с контактом
$queryData = http_build_query(array(
    'ID' => $dealId,
    'fields' => array(
        'CONTACT_ID' => $contactId
    ),
));

$dealContactAdd = file_get_contents($queryUrl . 'crm.deal.contact.add', false, stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'ignore_errors' => true,
        'content' => $queryData
    ),
)));

// Результаты операций
var_dump($dealAdd, $contactAdd, $dealContactAdd);

?>
```

Этот пример демонстрирует создание сделки, создание контакта и последующее связывание их между собой. Не забудьте заменить значения 'Ваш_домен', 'Ваш_ключ_аутентификации', 'Название сделки', 'Телефон контакта', 'Email контакта', 'Имя контакта' и 'Фамилия контакта' на свои реальные данные.
batch-запрос это группировка запросов, когда в одном запросе вы можете использовать результаты предыдущего запроса. 
В вашем batch запросе указано 3 комманды:

1. Команда "find_contact" выполняет метод "crm.duplicate.findbycomm" который по номеру телефона ищет контакты (да - может вернутся от 0 до 50 контактов).
2. Команда "get_contact" выполняет получение контакта по идентификатору. В вашем случае по "$contact['CONTACT_ID']"
3. Команда "get_deal" выполняет получение сделки по ее идентификатору. В вашем случае по "$contact['DEAL_ID']".

Как вы можете видеть НИ ОДНА из команд не создает сделку, привязанную к контакту И не привязывает контакт к сделке.

Есть несколько вариантов как выполнить создание сделки привязанной к контакту:

1. Вы знаете ID контакта, поэтому вам нужно создать только сделку.
Вы используете метод crm.deal.add и заполняете поле CONTACT_ID указывая туда ID контакта.

2. Вы знаете ID контакта и ID сделки куда должны его прикрепить.
Вы используете метод "crm.deal.contact.add" передавая в "fields" ключи "CONTACT_ID" и "IS_PRIMARY".

3. Вы НЕ знаете ID контакта - в таком случае нужно сначала найти контакт по мультифилду (например по номеру телефона) используя метод "crm.duplicate.findbycomm", а потом уже в зависимости от того существует сделка или нет использовать методы 1 или 2.
Похожие вопросы