Как связать элемент Activity таймлайна с произвольным CRM объектом в Битрикс24, используя методы ядра D7?

Как привязать звонок из истории взаимодействий с Лидом/Сделкой/Контактом/Компанией к определенному этапу в смарт-процессе?
  • 20 февраля 2024 г. 12:59
Ответы на вопрос 2
Для связывания элемента Activity таймлайна с произвольным CRM объектом в Битрикс24 с помощью методов ядра D7, можно использовать следующий код:

1. Получаем ID элемента Activity:

```php
$activityId = 123; // здесь указываем ID элемента Activity
```

2. Создаем связь с CRM объектом (например, Лидом):

```php
$entityTypeId = \CCrmOwnerType::Lead;
$entityId = 456; // здесь указываем ID объекта (например, ID Лида)

$linkData = [
    'ACTIVITY_ID' => $activityId,
    'OWNER_TYPE_ID' => $entityTypeId,
    'OWNER_ID' => $entityId
];

\Bitrix\Crm\ActivityBindingTable::add($linkData);
```

Теперь элемент Activity будет связан с указанным CRM объектом. 

Для привязки звонка из истории взаимодействий с Лидом/Сделкой/Контактом/Компанией к определенному этапу в смарт-процессе вам необходимо использовать хуки и события Битрикс24.

1. Добавьте обработчик события на создание нового звонка в файле init.php:

```php
use Bitrix\Crm\EntityManageFacility;

AddEventHandler('voximplant','onCallAdded',
    array('\MyProject\MyClass', 'onCallAddedHandler'));
```

2. В обработчике события проверьте, к какому объекту (Лиду/Сделке/Контакту/Компании) привязан звонок и добавьте логику привязки к этапу в смарт-процессе:

```php
namespace MyProject;

class MyClass
{
    public static function onCallAddedHandler($callId, $params)
    {
        $entityType = $params['ENTITY_TYPE'];
        $entityId = $params['ENTITY_ID'];
        $callType = $params['CALL_TYPE'];

        if($entityType == 'LEAD'){
            // привязываем звонок к этапу в смарт-процессе для Лида
            $entity = new EntityManageFacility(\CCrmOwnerType::Lead, $entityId);
            $entity->GrantStageAcquirement('NEW_STAGE');
        }
        // далее проводите аналогичные действия для других объектов (Сделка, Контакт, Компания)
    }
}
```

Таким образом, вы сможете привязывать звонки из истории взаимодействий с CRM объектами к определенным этапам в смарт-процессе в Битрикс24.
CCrmActivity::GetBindings - получает текущие привязки дела 
CCrmActivity::SaveBindings - удаляет все старые и делает новые привязки.

\Bitrix\Main\Loader::requireModule('crm');

// Замените на ID своего дела
$activityId = 1;

$arBindings = \CCrmActivity::GetBindings($activityId);

// Добавьте свои привязки
$arBindings[] = [
	"OWNER_ID"      => 10,
	"OWNER_TYPE_ID" => 2,
];

\CCrmActivity::SaveBindings($activityId, $arBindings, false, false, true);
Похожие вопросы