Блог Горошко Андрея Bitrix24,PHP Добавить системное дело crm.activity.add

Добавить системное дело crm.activity.add

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Добавить системное дело crm.activity.add», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.

Добавить системное дело crm.activity.add

> Scope: crm
>
> Кто может выполнять метод: пользователь с правом на добавление дела

Метод crm.activity.add продолжает работать, но у него есть более актуальный аналог crm.activity.todo.add.

Метод crm.activity.add создает новое системное дело.

Параметры метода

Название
тип
Описание
fields
array
Массив значений полей дела в виде структуры:

fields:
{
    "OWNER_TYPE_ID": 2, 
    "OWNER_ID": 102, 
    "TYPE_ID": 2, 
    "SUBJECT": "Новый звонок",
}

Имеется дополнительное поле DISABLE_SENDING_MESSAGE_COPY. Оно предназначено для принудительного отключения отправки копии сообщения адресату из MESSAGE_FROM. Если параметр не заполнен или указано любое значение отличное от Y — копия отправлена будет. Пример:

[
    'fields'=> array(
        'SETTINGS'=> array(
            'DISABLE_SENDING_MESSAGE_COPY'=>'Y'
        )
    )
]

Параметр fields {#fields}

Поле типОписание
OWNER_ID
integer
Идентификатор элемента CRM
OWNER_TYPE_ID
integer
Идентификатор типа объекта CRM
TYPE_ID
crm_enum_activitytype
Тип дела. Чтобы получить доступные типы дел, используйте метод crm.enum.activitytype.

Чтобы создать дело с типом «задача», используйте метод создания или изменения задачи и укажите элемент CRM в поле UF_CRM_TASK

ASSOCIATED_ENTITY_ID
integer
Идентификатор связанного с делом элемента
COMMUNICATIONS
crm_activity_communication
Описание коммуникации
DEADLINE
datetime
Дата и время срока исполнения дела. Поле напрямую не устанавливается, значение берётся из START_TIME для звонка и встречи и из END_TIME для задачи
DESCRIPTION
string
Текстовое описание дела
DESCRIPTION_TYPE
crm.enum.contenttype
Тип описания
DIRECTION
crm.enum.activitydirection
Направление дела: входящее/исходящее. Актуально для звонков и писем, для встреч не используется
END_TIME
datetime
Время завершения дела
FILES
diskfile
Добавленные в дело файлы
LOCATION
string
Местоположение
NOTIFY_TYPE
crm.enum.activitynotifytype
Тип уведомления
ORIGINATOR_ID
string
Идентификатор источника данных, используется только для привязки к внешнему источнику
ORIGIN_ID
string
Идентификатор элемента в источнике данных, используется только для привязки к внешнему источнику
ORIGIN_VERSION
string
Оригинальная версия, используется для защиты данных от случайного перетирания внешней системой. Если данные были импортированы и не изменялись во внешней системе, то такие данные могут быть редактированы в CRM без опасения, что следующая выгрузка приведет к перетиранию данных
PRIORITY
crm.enum.activitypriority
Приоритет
PROVIDER_DATA
string
Дополнительные данные провайдера
PROVIDER_GROUP_ID
string
Идентификатор группы провайдера
PROVIDER_ID
string
Идентификатор провайдера
PROVIDER_TYPE_ID
string
Идентификатор типа провайдера, статус из справочника
PROVIDER_PARAMS
object
Дополнительные параметры провайдера
RESPONSIBLE_ID
user
Идентификатор пользователя, ответственного за дело
SETTINGS
object
Дополнительные настройки
START_TIME
datetime
Время начала выполнения дела
STATUS
crm_enum_activitystatus
Статус дела
SUBJECT
string
Дополнительное описание дела
WEBDAV_ELEMENTS
diskfile
Добавленные файлы. Устарел, сохраняется для совместимости
IS_INCOMING_CHANNEL
char
Флаг, говорящий дело создано из входящего канала или нет (Y/N)

Варианты использования значений полей

Для дел типа e-mail:

  • если письмо не должно быть отправлено, устанавливайте параметры DIRECTION=2 и COMPLETED='N';
  • если необходимо пометить письма как завершенные, выполните обновление дел с выставлением флага завершения.

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"OWNER_TYPE_ID":2,"OWNER_ID":102,"TYPE_ID":2,"COMMUNICATIONS":[{"VALUE":"+79832322323","ENTITY_ID":134,"ENTITY_TYPE_ID":3}],"SUBJECT":"Новый звонок","START_TIME":"2023-12-31T12:00:00+00:00","END_TIME":"2023-12-31T12:30:00+00:00","COMPLETED":"N","PRIORITY":3,"RESPONSIBLE_ID":1,"DESCRIPTION":"Важный звонок","DESCRIPTION_TYPE":3,"DIRECTION":2,"FILES":[{"fileData":["example.jpg","base64_encoded_content_here"]}]} }' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/crm.activity.add
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"fields":{"OWNER_TYPE_ID":2,"OWNER_ID":102,"TYPE_ID":2,"COMMUNICATIONS":[{"VALUE":"+79832322323","ENTITY_ID":134,"ENTITY_TYPE_ID":3}],"SUBJECT":"Новый звонок","START_TIME":"2023-12-31T12:00:00+00:00","END_TIME":"2023-12-31T12:30:00+00:00","COMPLETED":"N","PRIORITY":3,"RESPONSIBLE_ID":1,"DESCRIPTION":"Важный звонок","DESCRIPTION_TYPE":3,"DIRECTION":2,"FILES":[{"fileData":["example.jpg","base64_encoded_content_here"]}]},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/crm.activity.add
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		"crm.activity.add",
    		{
    			fields: {
    				"OWNER_TYPE_ID": 2,
    				"OWNER_ID": 102,
    				"TYPE_ID": 2,
    				"COMMUNICATIONS": [
    					{ VALUE: "+79832322323", ENTITY_ID: 134, ENTITY_TYPE_ID: 3 }
    				],
    				"SUBJECT": "Новый звонок",
    				"START_TIME": "2023-12-31T12:00:00+00:00", // Пример даты и времени
    				"END_TIME": "2023-12-31T12:30:00+00:00", // Пример даты и времени
    				"COMPLETED": "N",
    				"PRIORITY": 3,
    				"RESPONSIBLE_ID": 1,
    				"DESCRIPTION": "Важный звонок",
    				"DESCRIPTION_TYPE": 3,
    				"DIRECTION": 2,
    				"FILES": [
    					{
    						fileData: [
    							"example.jpg", // Имя файла
    							"base64_encoded_content_here" // Контент файла в формате base64
    						]
    					}
    				]
    			}
    		}
    	);
    	
    	const result = response.getData().result;
    	console.dir(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'crm.activity.add',
                [
                    'fields' => [
                        'OWNER_TYPE_ID'    => 2,
                        'OWNER_ID'         => 102,
                        'TYPE_ID'          => 2,
                        'COMMUNICATIONS'   => [
                            ['VALUE' => '+79832322323', 'ENTITY_ID' => 134, 'ENTITY_TYPE_ID' => 3]
                        ],
                        'SUBJECT'          => 'Новый звонок',
                        'START_TIME'       => '2023-12-31T12:00:00+00:00',
                        'END_TIME'         => '2023-12-31T12:30:00+00:00',
                        'COMPLETED'        => 'N',
                        'PRIORITY'         => 3,
                        'RESPONSIBLE_ID'   => 1,
                        'DESCRIPTION'      => 'Важный звонок',
                        'DESCRIPTION_TYPE' => 3,
                        'DIRECTION'        => 2,
                        'FILES'            => [
                            [
                                'fileData' => [
                                    'example.jpg',
                                    'base64_encoded_content_here'
                                ]
                            ]
                        ]
                    ]
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
        // Нужная вам логика обработки данных
        processData($result);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error adding activity: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        "crm.activity.add",
        {
            fields: {
                "OWNER_TYPE_ID": 2,
                "OWNER_ID": 102,
                "TYPE_ID": 2,
                "COMMUNICATIONS": [
                    { VALUE: "+79832322323", ENTITY_ID: 134, ENTITY_TYPE_ID: 3 }
                ],
                "SUBJECT": "Новый звонок",
                "START_TIME": "2023-12-31T12:00:00+00:00", // Пример даты и времени
                "END_TIME": "2023-12-31T12:30:00+00:00", // Пример даты и времени
                "COMPLETED": "N",
                "PRIORITY": 3,
                "RESPONSIBLE_ID": 1,
                "DESCRIPTION": "Важный звонок",
                "DESCRIPTION_TYPE": 3,
                "DIRECTION": 2,
                "FILES": [
                    {
                        fileData: [
                            "example.jpg", // Имя файла
                            "base64_encoded_content_here" // Контент файла в формате base64
                        ]
                    }
                ]
            }
        },
        result => {
            if (result.error()) {
                console.error(result.error());
            } else {
                console.dir(result.data());
            }
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'crm.activity.add',
        [
            'fields' => [
                'OWNER_TYPE_ID' => 2,
                'OWNER_ID' => 102,
                'TYPE_ID' => 2,
                'COMMUNICATIONS' => [
                    [
                        'VALUE' => '+79832322323',
                        'ENTITY_ID' => 134,
                        'ENTITY_TYPE_ID' => 3
                    ]
                ],
                'SUBJECT' => 'Новый звонок',
                'START_TIME' => '2023-12-31T12:00:00+00:00', // Пример даты и времени
                'END_TIME' => '2023-12-31T12:30:00+00:00', // Пример даты и времени
                'COMPLETED' => 'N',
                'PRIORITY' => 3,
                'RESPONSIBLE_ID' => 1,
                'DESCRIPTION' => 'Важный звонок',
                'DESCRIPTION_TYPE' => 3,
                'DIRECTION' => 2,
                'FILES' => [
                    [
                        'fileData' => [
                            'example.jpg', // Имя файла
                            'base64_encoded_content_here' // Контент файла в формате base64
                        ]
                    ]
                ]
            ]
        ]
    );

    if (isset($result['error'])) {
        echo 'Ошибка: ' . $result['error_description'];
    } else {
        echo '<PRE>';
        print_r($result['result']);
        echo '</PRE>';
    }

Обработка ответа

HTTP-статус: 200

{
    "result": 999,
    "time": {
        "start": 1712132792.910734,
        "finish": 1712132793.530359,
        "duration": 0.6196250915527344,
        "processing": 0.032338857650756836,
        "date_start": "2024-04-03T10:26:32+02:00",
        "date_finish": "2024-04-03T10:26:33+02:00",
        "operating_reset_at": 1705765533,
        "operating": 3.3076241016387939
    }
}

Возвращаемые данные

Название
тип
Описание
result
boolean
Результат операции. Возвращает идентификатор дела в таймлайне в случае успеха, иначе — false
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
    "error": "",
    "error_description": "Access denied."
}

Возможные коды ошибок

КодОписание
The field SUBJECT is not defined or emptyПоле SUBJECT не установлено
The field RESPONSIBLE_ID is not defined or invalidПоле RESPONSIBLE_ID не установлено
The field TYPE_ID is not defined or invalidПоле TYPE_ID не установлено
The field COMMUNICATIONS is not defined or invalidПоле COMMUNICATIONS не установлено
The only one communication is allowed for activity of specified typeКоличество контактов более 1
Could not build binding. Please ensure that owner info and communications are defined correctlyСвязи для дела не указаны
— Email send error. Failed to load module "subscribe"
— Email send error. Invalid data
— Email send error. Invalid email is specified
— Email send error. "From" is not found
— Email send error. "To" is not found
— Email send error. Failed to add posting. Please see details below
— Email send error. Failed to save posting file. Please see details below
— Email send error. Failed to update activity
— Email send error. General error
Ошибки «почтовых» дел
The custom activity without provider is not supported in current contextТип дела не поддерживается в заданном контексте
Use crm.activity.configurable.add for this activity providerНекорректный вызов метода для конфигурируемого дела
Access deniedОтсутствуют права на добавление сущности в CRM
Application context requiredНекорректный параметр PROVIDER_ID для дела, созданного в контексте приложения
  • [](./crm-activity-update)
  • [](./crm-activity-delete)
  • [](./crm-activity-get)
  • [](./crm-activity-list)
  • [](./crm-activity-communication-fields)
  • [](./crm-activity-fields)
  • [](../../../../../tutorials/crm/how-to-add-crm-objects/how-to-add-activity-to-contact)
  • [](../../../../../tutorials/crm/how-to-add-crm-objects/how-to-send-email)

💡 Экспертное мнение и рекомендации

Ключевые выводы по теме «Добавить системное дело crm.activity.add»:

Использование современных стандартов D7 при работе с crm.activity.add позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Типы полейТипы полей

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Типы полей». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции. Типы полей Доступные

Удалить сервис ai.engine.unregisterУдалить сервис ai.engine.unregister

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Удалить сервис ai.engine.unregister». Вы узнаете экспертные методики работы с ai.engine.unregister и научитесь избегать

Получить список групп соцсети sonet_group.getПолучить список групп соцсети sonet_group.get

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить список групп соцсети sonet_group.get», проанализируем лучшие практики