Как добавить комментарий в таймлайн смарт-процесса

Scope: crm

Кто может выполнять метод: пользователи с правом на изменение элемента CRM

Если вы разрабатываете интеграции для Битрикс24 с помощью AI-инструментов (Codex, Claude Code, Cursor), подключите MCP-сервер, чтобы ассистент использовал официальную REST-документацию.

Ключевой параметр для добавления комментария в элемент CRM — идентификатор типа объекта. Идентификатор показывает, в какой тип объекта комментарий будет добавлен: в сделку, в лид, в определенный смарт-процесс.
Идентификатор используется в параметрах OWNER_TYPE, OWNER_TYPE_ID и ENTITY_TYPE, ENTITY_TYPE_ID групп методов crm.item.*, crm.timeline.*, crm.activity.*.

В CRM есть два типа идентификаторов объектов:

  • Предустановленные — это идентификаторы лидов, сделок, компаний, контактов, счетов, предложений. Идентификаторы предустановленных объектов есть в документации
  • Динамические — это идентификаторы смарт-процессов. Идентификатор смарт-процесса генерируется в момент создания, он не зависит от названия смарт-процесса

Получить идентификатор смарт-процесса можно двумя методами:

  • crm.enum.ownertype — метод без параметров, возвращает перечисление типов объектов CRM, как предустановленных, так и динамических
  • crm.type.list — метод с фильтром, возвращает только динамические объекты CRM

Для создания комментария в элементе смарт-процесса последовательно выполним два метода:

  1. crm.type.list — получаем смарт-процесс по фильтру
  2. crm.timeline.comment.add — создаем комментарий

1. Получаем идентификатор типа смарт-процесса

Для получения идентификатора типа используем метод crm.type.list с фильтром:

  • title — укажем название смарт-процесса

Как использовать примеры в документации

BX24.callMethod(
            'crm.type.list',
            {
                filter: {
                    "title": "Закупка оборудования"
                }
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'crm.type.list',
            [
                'filter' => [
                    'title' => 'Закупка оборудования'
                ]
            ]
        );
        

В результате получили два значения ID:

  • id: 7 — порядковый номер смарт-процесса в Битрикс
  • entityTypeId: 177 — идентификатор типа смарт-процесса. Параметр, необходимый для следующего запроса
{
            "result": {
                "types": [
                    {
                        "id": 7,
                        "title": "Закупка оборудования",
                        "code": "",
                        "createdBy": 1,
                        "entityTypeId": 177,
                        "customSectionId": null,
                        "isCategoriesEnabled": "Y",
                        "isStagesEnabled": "Y",
                        "isBeginCloseDatesEnabled": "Y",
                        "isClientEnabled": "Y",
                        "isUseInUserfieldEnabled": "Y",
                        "isLinkWithProductsEnabled": "Y",
                        "isMycompanyEnabled": "Y",
                        "isDocumentsEnabled": "Y",
                        "isSourceEnabled": "Y",
                        "isObserversEnabled": "Y",
                        "isRecyclebinEnabled": "Y",
                        "isAutomationEnabled": "Y",
                        "isBizProcEnabled": "Y",
                        "isSetOpenPermissions": "Y",
                        "isPaymentsEnabled": "N",
                        "isCountersEnabled": "N",
                        "createdTime": "2021-11-26T10:52:17+03:00",
                        "updatedTime": "2024-11-12T15:32:39+03:00",
                        "updatedBy": 1
                    }
                ]
            }
        }
        

2. Добавляем комментарий к элементу смарт-процесса

Для добавления комментария используем метод crm.timeline.comment.add с параметрами:

  • ENTITY_ID — ID элемента. Для получения значения ID используйте метод crm.item.list, где entityTypeId фильтра равно значению entityTypeId из crm.type.list
  • ENTITY_TYPE — укажем DYNAMIC_177. Значение состоит из entityTypeId из результата предыдущего метода и префикса динамического объекта DYNAMIC_
  • COMMENT — текстовое значение комментария
BX24.callMethod(
            "crm.timeline.comment.add",
            {
                fields:
                {
                    "ENTITY_ID": 19,
                    "ENTITY_TYPE": "DYNAMIC_177",
                    "COMMENT": "Подтвердить закупку по почте!",
                }
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'crm.timeline.comment.add',
            [
                'fields' => [
                    'ENTITY_ID' => 19,
                    'ENTITY_TYPE' => 'DYNAMIC_177',
                    'COMMENT' => 'Подтвердить закупку по почте!',
                ]
            ]
        );
        

Мы добавили комментарий в таймлайн элемента смарт-процесса и в ответ получили ID записи таймлайна 55771. ID записи можно использовать в методах обновления и удаления комментария.

{
            "result": 55771
        }
        

Пример кода

// Функция для поиска идентификатора смарт-процесса
        function findSPA() {
            // Название смарт-процесса, для получения entityTypeId
            var SPAtitle = 'название_вашего_смарт_процесса';
        
            // Вызываем метод crm.type.list для получения entityTypeId
            BX24.callMethod(
                'crm.type.list',
                {
                    filter: {
                        title: SPAtitle
                    }
                },
                function(result) {
                    if (result.error()) {
                        console.error('Ошибка при поиске смарт-процесса:', result.error());
                    } else {
                        var types = result.data().types;
                        if (Array.isArray(types) && types.length > 0) {
                            var SPAId = types[0].entityTypeId; // Предполагаем, что нужный объект первый в массиве
                            console.log('Смарт-процесс найден', SPAId);
                            createComment(SPAId);
                        } else {
                            console.error('Смарт-процесс не найден или данные пусты');
                        }
                    }
                }
            );
        }
        
        // Функция для создания комментария в элементе смарт-процесса
        function createComment(SPAId) {
            // ID элемента, в который будет добавлен комментарий
            var elementId = 'ваш_ID_элемента';
            // Текст комментария
            var commentText = 'ваш_комментарий';
        
            // Вызываем метод crm.timeline.comment.add для добавления комментария
            BX24.callMethod(
                "crm.timeline.comment.add",
                {
                    fields: {
                        ENTITY_ID: elementId,
                        ENTITY_TYPE: 'DYNAMIC_' + SPAId,
                        COMMENT: commentText
                    }
                },
                function(result) {
                    if (result.error()) {
                        console.error('Ошибка при создании комментария:', result.error());
                    } else {
                        console.log('Комментарий добавлен', result.data());
                    }
                }
            );
        }
        
        // Вызов функции для поиска смарт-процесса и добавления комментария
        findSPA();
        
require_once('crest.php');
        
        // Функция для поиска идентификатора смарт-процесса
        function findSPA() {
            // Название смарт-процесса, для получения entityTypeId
            $SPAtitle = 'название_вашего_смарт_процесса';
        
            // Вызываем метод crm.type.list для получения entityTypeId
            $result = CRest::call(
                'crm.type.list',
                [
                    'filter' => [
                        'title' => $SPAtitle
                    ]
                ]
            );
        
            if (isset($result['error'])) {
                echo 'Ошибка при поиске смарт-процесса: ' . $result['error'];
            } else {
                $types = $result['result']['types'];
                if (is_array($types) && count($types) > 0) {
                    $SPAId = $types[0]['entityTypeId']; // Предполагаем, что нужный объект первый в массиве
                    echo 'Смарт-процесс найден: ' . $SPAId;
                    createComment($SPAId);
                } else {
                    echo 'Смарт-процесс не найден или данные пусты';
                }
            }
        }
        
        // Функция для создания комментария в элементе смарт-процесса
        function createComment($SPAId) {
            // ID элемента, в который будет добавлен комментарий
            $elementId = 'ваш_ID_элемента';
            // Текст комментария
            $commentText = 'ваш_комментарий';
        
            // Вызываем метод crm.timeline.comment.add для добавления комментария
            $result = CRest::call(
                'crm.timeline.comment.add',
                [
                    'fields' => [
                        'ENTITY_ID' => $elementId,
                        'ENTITY_TYPE' => 'DYNAMIC_' . $SPAId,
                        'COMMENT' => $commentText
                    ]
                ]
            );
        
            if (isset($result['error'])) {
                echo 'Ошибка при создании комментария: ' . $result['error'];
            } else {
                echo 'Комментарий добавлен';
            }
        }
        
        // Вызов функции для поиска смарт-процесса и добавления комментария
        findSPA();