Как создать дело из приложения

Scope: crm

Права проверяются для связанного с делом элемента CRM:

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Установленное приложение может добавить дело в таймлайн карточки CRM.

Когда сотрудник откроет его, Битрикс24 покажет страницу приложения в боковой панели. Так можно работать с приложением прямо из карточки: смотреть связанные данные, выполнять нужные действия или обращаться к внешнему сервису.

Как работает сценарий

В сценарии участвуют пользователь, Битрикс24 и приложение:

  • пользователь — выбирает элемент CRM и работает с созданным делом в таймлайне
  • Битрикс24 — сохраняет дело и передает странице приложения параметры его открытия
  • приложение — создает, изменяет или удаляет дело через REST API

Сначала пользователь выбирает на странице приложения элемент CRM — в этом сценарии лид. Приложение создает для него дело методом crm.activity.add. Дело появляется в таймлайне лида.

Когда пользователь нажимает на это дело, Битрикс24 открывает страницу приложения и передает идентификатор дела в PLACEMENT_OPTIONS. Так приложение понимает, с каким делом нужно работать, и может изменить или удалить его.

В сценарии будем использовать методы:

Дальше соберем страницу приложения по шагам: подготовим файл, определим режим открытия, добавим интерфейс и настроим работу с делом. Для вызова REST-методов и функций интерфейса используем JavaScript-библиотеку BX24.js.

1. Подготовьте приложение

Создайте приложение со scope crm и подготовьте сервер, доступный из внешней сети.

Создайте на сервере файл index.php. В следующих шагах последовательно добавляйте в него блоки кода. После последнего шага получится готовая страница приложения.

2. Определите режим открытия

Одна и та же страница приложения может открываться в двух ситуациях:

  • пользователь запускает приложение в Битрикс24 — на странице он выбирает лид и создает для него дело
  • пользователь нажимает на созданное дело в таймлайне лида — Битрикс24 открывает ту же страницу с действиями для завершения или удаления дела

Чтобы определить ситуацию, приложение проверяет параметры, которые передал Битрикс24. При открытии дела из таймлайна Битрикс24 передает в POST-запросе PLACEMENT_OPTIONS. Значение содержит JSON-строку с двумя параметрами:

  • action — действие, с которым открыта страница. Для дела приложения значение равно view_activity
  • activity_id — числовой идентификатор открытого дела. Передайте его в методы crm.activity.update или crm.activity.delete

Добавьте в начало файла index.php код, который получает и проверяет эти параметры:

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

<?php
        header('Content-Type: text/html; charset=UTF-8');
        
        $placementOptions = [];
        
        if (!empty($_POST['PLACEMENT_OPTIONS']))
        {
            $decodedOptions = json_decode($_POST['PLACEMENT_OPTIONS'], true);
        
            if (is_array($decodedOptions))
            {
                $placementOptions = $decodedOptions;
            }
        }
        
        $activityId = isset($placementOptions['activity_id'])
            ? (int)$placementOptions['activity_id']
            : 0;
        
        $isActivityView = ($placementOptions['action'] ?? '') === 'view_activity'
            && $activityId > 0;
        ?>
        

Если страница открыта из дела, переменная $isActivityView получит значение true, а $activityId — числовой идентификатор дела.

3. Добавьте интерфейс страницы

Сразу после PHP-блока добавьте HTML-разметку. Она покажет нужные кнопки в зависимости от значения $isActivityView:

<!DOCTYPE html>
        <html lang="ru">
        <head>
            <meta charset="UTF-8">
            <title>Дело приложения</title>
        </head>
        <body hidden>
        <script src="//api.bitrix24.tech/api/v1/"></script>
        
        <?php if ($isActivityView): ?>
            <p>Идентификатор дела: <?= $activityId ?></p>
            <button type="button" onclick="updateActivity(<?= $activityId ?>)">
                Завершить дело
            </button>
            <button type="button" onclick="deleteActivity(<?= $activityId ?>)">
                Удалить дело
            </button>
        <?php else: ?>
            <button type="button" onclick="selectCRMEntity()">Выбрать лид</button>
            <span id="selected-entity">Лид не выбран</span>
            <button type="button" onclick="addActivity()">Создать дело</button>
        <?php endif; ?>
        
        <p id="status" role="status"></p>
        

Когда пользователь запускает приложение в Битрикс24, страница показывает кнопки для выбора лида и создания дела. Когда пользователь открывает созданное дело из таймлайна, страница показывает его идентификатор и действия для завершения или удаления.

4. Инициализируйте BX24.js

После HTML-разметки добавьте общие переменные и вспомогательные функции. Замените значение responsibleId на идентификатор сотрудника, ответственного за дело.

Библиотека BX24.js уже подключена в предыдущем блоке. Дождитесь ее инициализации с помощью BX24.init, прежде чем вызывать методы Битрикс24.

<script>
            const responsibleId = 1;
            let selectedEntityId = null;
        
            BX24.init(() => {
                document.body.hidden = false;
            });
        
            function showStatus(message, isError = false)
            {
                const status = document.getElementById('status');
                status.textContent = message;
                status.style.color = isError ? 'red' : 'green';
            }
        
            function showError(result)
            {
                showStatus(
                    `Ошибка: ${result.error()}${result.error_description()}`,
                    true
                );
            }
        </script>
        

После выполнения BX24.init страница станет видимой. Функции showStatus и showError будут выводить результат REST-вызовов.

5. Добавьте создание дела

Чтобы создать дело приложения, вызовите метод crm.activity.add с полем PROVIDER_ID=REST_APP. Дело с PROVIDER_ID=REST_APP можно создать только из установленного приложения. Изменить или удалить его может только приложение, которое его создало.
При вызове через вебхук Битрикс24 вернет ошибку Application context required., а при вызове из другого приложения — Access denied.

Метод crm.activity.add помечен как устаревший, но в этом сценарии заменить его на crm.activity.todo.add нельзя: метод не принимает поле PROVIDER_ID.

В примере пользователь выбирает лид через BX24.selectCRM. Для лида функция возвращает идентификатор с префиксом, например L_123. Приложение удаляет префикс L_ и передает числовую часть в OWNER_ID метода crm.activity.add.

Для другого объекта CRM измените entityType, префикс идентификатора и OWNER_TYPE_ID.

Основные поля для создания дела:

Обязательные параметры отмечены *

  • OWNER_TYPE_ID* — числовой идентификатор типа объекта CRM. Для лида передайте 1
  • OWNER_ID* — числовой идентификатор выбранного лида
  • PROVIDER_ID* — идентификатор провайдера. Для дела приложения передайте REST_APP
  • PROVIDER_TYPE_ID — тип дела приложения. Если поле не передано, Битрикс24 использует значение LINK
  • SUBJECT* — название дела в таймлайне
  • RESPONSIBLE_ID* — идентификатор сотрудника, ответственного за дело

Поле TYPE_ID обычно обязательно для crm.activity.add. Для REST_APP его можно не передавать: метод автоматически устанавливает тип дела «Провайдер».

Добавьте после предыдущего блока функции для выбора лида и создания дела:

<script>
            function selectCRMEntity()
            {
                BX24.selectCRM(
                    { entityType: ['lead'] },
                    (selected) => {
                        const lead = selected.lead && selected.lead[0];
        
                        if (!lead)
                        {
                            return;
                        }
        
                        const id = Number(lead.id.replace(/^L_/, ''));
        
                        if (!Number.isInteger(id) || id <= 0)
                        {
                            showStatus('Не удалось определить идентификатор лида', true);
                            return;
                        }
        
                        selectedEntityId = id;
                        document.getElementById('selected-entity').textContent = lead.title;
                        showStatus(`Выбран лид с идентификатором ${id}`);
                    }
                );
            }
        
            function addActivity()
            {
                if (!selectedEntityId)
                {
                    showStatus('Сначала выберите лид', true);
                    return;
                }
        
                BX24.callMethod(
                    'crm.activity.add',
                    {
                        fields: {
                            OWNER_TYPE_ID: 1,
                            OWNER_ID: selectedEntityId,
                            PROVIDER_ID: 'REST_APP',
                            PROVIDER_TYPE_ID: 'LINK',
                            SUBJECT: 'Новое дело приложения',
                            COMPLETED: 'N',
                            RESPONSIBLE_ID: responsibleId,
                            DESCRIPTION: 'Описание нового дела'
                        }
                    },
                    (result) => {
                        if (result.error())
                        {
                            showError(result);
                            return;
                        }
        
                        showStatus(`Дело создано. Идентификатор: ${result.data()}`);
                    }
                );
            }
        </script>
        

После успешного вызова crm.activity.add страница покажет числовой идентификатор созданного дела.

6. Добавьте изменение и удаление дела

Чтобы завершить дело, передайте его идентификатор в метод crm.activity.update и установите поле COMPLETED=Y.

Чтобы удалить дело, передайте тот же идентификатор в метод crm.activity.delete.

Добавьте после функций создания дела следующий блок. Он также закрывает элементы body и html, поэтому разместите его в конце файла:

<script>
            function updateActivity(id)
            {
                BX24.callMethod(
                    'crm.activity.update',
                    {
                        id,
                        fields: {
                            COMPLETED: 'Y',
                            SUBJECT: 'Дело выполнено',
                            DESCRIPTION: 'Описание выполненного дела'
                        }
                    },
                    (result) => {
                        if (result.error())
                        {
                            showError(result);
                            return;
                        }
        
                        showStatus('Дело изменено');
                    }
                );
            }
        
            function deleteActivity(id)
            {
                if (!window.confirm('Удалить дело?'))
                {
                    return;
                }
        
                BX24.callMethod(
                    'crm.activity.delete',
                    { id },
                    (result) => {
                        if (result.error())
                        {
                            showError(result);
                            return;
                        }
        
                        showStatus('Дело удалено');
                    }
                );
            }
        </script>
        </body>
        </html>
        

Методы вернут true после успешного изменения или удаления дела. Страница выведет сообщение о выполненном действии.

7. Разместите и проверьте приложение

Сохраните index.php и разместите его на сервере, доступном из внешней сети. Полученный URL укажите как адрес основной страницы приложения, затем установите приложение в Битрикс24.

Проверьте сценарий:

  1. Откройте приложение, выберите лид и создайте дело
  2. Проверьте, что приложение показало числовой идентификатор нового дела
  3. Откройте карточку выбранного лида и найдите дело в таймлайне
  4. Нажмите на дело и проверьте, что Битрикс24 открыл приложение с тем же идентификатором
  5. Завершите или удалите дело и проверьте результат в таймлайне