Добавить системное дело crm.activity.add
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Scope:
crmКто может выполнять метод: пользователь с правом на изменение каждого связанного элемента CRM
DEPRECATED
Развитие метода остановлено. Используйте crm.activity.todo.add.
Метод crm.activity.add создает новое системное дело.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
fields* |
Объект значений полей дела (подробное описание). Пример структуры:
Поле
|
Параметр fields
Полный список и описание полей — в crm.activity.fields. Ниже приведены поля и особенности их передачи при создании дела.
Укажите элемент CRM через OWNER_TYPE_ID и OWNER_ID либо передайте корректную связь в COMMUNICATIONS. Для создания дела необходима хотя бы одна связь с элементом CRM.
Связанные элементы CRM должны существовать, а пользователь — иметь право на изменение каждого из них. В примерах замените OWNER_TYPE_ID, OWNER_ID, ENTITY_TYPE_ID и ENTITY_ID на типы и идентификаторы доступных элементов. Если в коммуникации передан VALUE, но не указаны ENTITY_TYPE_ID или ENTITY_ID, метод использует для нее OWNER_TYPE_ID и OWNER_ID.
Обязательные параметры отмечены *
|
Поле |
Описание |
|
OWNER_ID |
Идентификатор элемента CRM |
|
OWNER_TYPE_ID |
|
|
TYPE_ID |
Тип дела. Обязателен, если не указан Чтобы создать дело с типом «задача», используйте метод создания или изменения задачи и укажите элемент CRM в поле |
|
COMMUNICATIONS |
Массив коммуникаций. Обязателен для звонка, встречи и письма; для дела провайдера может отсутствовать. Для звонка и встречи допускается не более одной коммуникации |
|
COMPLETED |
Признак завершения дела: |
|
DEADLINE |
Дата и время срока исполнения дела. Переданное значение игнорируется: срок рассчитывает провайдер дела, а если он срок не установил, используется |
|
DESCRIPTION |
Текстовое описание дела |
|
DESCRIPTION_TYPE |
Тип описания |
|
DIRECTION |
Направление дела: входящее/исходящее. Актуально для звонков и писем, для встреч не используется |
|
END_TIME |
Время завершения дела |
|
FILES |
Добавленные в дело файлы |
|
LOCATION |
Местоположение |
|
NOTIFY_TYPE |
Единица времени напоминания: |
|
NOTIFY_VALUE |
Количество единиц |
|
ORIGINATOR_ID |
Идентификатор источника данных, используется только для привязки к внешнему источнику |
|
ORIGIN_ID |
Идентификатор элемента в источнике данных, используется только для привязки к внешнему источнику |
|
PRIORITY |
Приоритет |
|
PROVIDER_DATA |
Дополнительные данные провайдера |
|
PROVIDER_GROUP_ID |
Идентификатор группы провайдера |
|
PROVIDER_ID |
Идентификатор провайдера |
|
PROVIDER_TYPE_ID |
Идентификатор типа провайдера, статус из справочника |
|
PROVIDER_PARAMS |
Дополнительные параметры провайдера |
|
RESPONSIBLE_ID |
Идентификатор пользователя, ответственного за дело. Если не указан, метод пытается использовать ответственного элемента CRM, затем текущего пользователя |
|
SETTINGS |
Дополнительные настройки |
|
START_TIME |
Время начала выполнения дела |
|
STATUS |
Статус дела |
|
SUBJECT* |
Тема дела. Поле обязательно и не может быть пустым |
|
WEBDAV_ELEMENTS |
Добавленные файлы. Для хранилища Диск поле устарело и сохраняется для совместимости, передавайте файлы в |
Варианты использования значений полей
Для дел типа e-mail:
- если письмо не должно быть отправлено, устанавливайте параметры
DIRECTION=2иCOMPLETED='N' - если письмо нужно пометить как завершенное, вызовите метод crm.activity.update и передайте
COMPLETED='Y'
Примеры кода
Как использовать примеры в документации
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_webhook_here**/crm.activity.add
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
// This snippet is an ES module: top-level await requires type="module" or a bundler.
// $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
import { Text } from '@bitrix24/b24jssdk'
import type { B24Frame } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
try {
const response = await $b24.actions.v2.call.make<number>({
method: 'crm.activity.add',
params: {
fields: {
OWNER_TYPE_ID: 2,
OWNER_ID: 102,
TYPE_ID: 2,
COMMUNICATIONS: [
{ VALUE: '+79832322323', ENTITY_ID: 134, ENTITY_TYPE_ID: 3 },
],
SUBJECT: 'New call',
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: 'Important call',
DESCRIPTION_TYPE: 3,
DIRECTION: 2,
FILES: [
{
fileData: [
'example.jpg',
'base64_encoded_content_here',
],
},
],
},
},
requestId: Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
} else {
const result = response.getData()!.result
console.info('Created activity ID:', result)
}
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
async function addActivity() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
const response = await $b24.actions.v2.call.make({
method: 'crm.activity.add',
params: {
fields: {
OWNER_TYPE_ID: 2,
OWNER_ID: 102,
TYPE_ID: 2,
COMMUNICATIONS: [
{ VALUE: '+79832322323', ENTITY_ID: 134, ENTITY_TYPE_ID: 3 },
],
SUBJECT: 'New call',
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: 'Important call',
DESCRIPTION_TYPE: 3,
DIRECTION: 2,
FILES: [
{
fileData: [
'example.jpg',
'base64_encoded_content_here',
],
},
],
},
},
requestId: B24Js.Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
return
}
const result = response.getData().result
console.info('Created activity ID:', result)
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', addActivity)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.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",
"RESPONSIBLE_ID": 1,
"PRIORITY": 3,
"DESCRIPTION": "Важный звонок",
"DESCRIPTION_TYPE": 3,
"DIRECTION": 2,
"FILES": [
{"fileData": ["example.jpg", "base64_encoded_content_here"]},
],
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
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.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());
}
}
);
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>';
}
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "crm.activity.add", b24.Params{
"fields": b24.Params{
"OWNER_TYPE_ID": 2,
"OWNER_ID": 102,
"TYPE_ID": 2,
"COMMUNICATIONS": []b24.Params{
{
"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": []b24.Params{
{
"fileData": []string{"example.jpg", "base64_encoded_content_here"},
},
},
},
})
if err != nil {
return fmt.Errorf("crm.activity.add: %w", err)
}
var newID b24.ID
if err := json.Unmarshal(res.Result, &newID); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println("идентификатор:", newID)
Обработка ответа
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 |
Идентификатор дела в таймлайне |
|
time |
Информация о времени выполнения запроса |
Обработка ошибок
При создании исходящего завершенного письма (TYPE_ID=4, COMPLETED=Y, DIRECTION=2) метод сначала сохраняет дело, затем отправляет письмо. Если отправка завершается ошибкой Email send error. ..., дело уже создано. Перед повторным вызовом проверьте список дел, чтобы не создать дубликат.
HTTP-статус: 400
{
"error": "",
"error_description": "Access denied."
}
|
Название |
Описание |
|
error |
Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только |
|
error_description |
Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки |
Возможные коды ошибок
|
Статус |
Код |
Описание |
Значение |
|
|
Пустое значение |
|
Не заполнено поле |
|
|
Пустое значение |
|
Не удалось определить ответственного за дело |
|
|
Пустое значение |
|
Поле |
|
|
Пустое значение |
|
Не переданы корректные коммуникации для звонка, встречи или письма |
|
|
Пустое значение |
|
Для звонка или встречи передано более одной коммуникации |
|
|
Пустое значение |
|
Не удалось построить связь с элементом CRM по владельцу и коммуникациям |
|
|
Пустое значение |
|
Тип связанного элемента CRM не поддерживается; |
|
|
Пустое значение |
|
Связанный элемент CRM не найден; |
|
|
Пустое значение |
|
Тип дела не поддерживается; |
|
|
Пустое значение |
|
Не удалось загрузить модуль subscribe |
|
|
Пустое значение |
|
Некорректные данные письма |
|
|
Пустое значение |
|
Указан некорректный адрес электронной почты |
|
|
Пустое значение |
|
Не найден отправитель письма |
|
|
Пустое значение |
|
Не найден получатель письма |
|
|
Пустое значение |
|
Не удалось создать почтовую рассылку; подробности передаются в сообщении ошибки |
|
|
Пустое значение |
|
Не удалось сохранить файл почтовой рассылки; подробности передаются в сообщении ошибки |
|
|
Пустое значение |
|
Не удалось обновить дело при отправке письма |
|
|
Пустое значение |
|
Общая ошибка отправки письма |
|
|
Пустое значение |
|
Для дела провайдера не найден провайдер |
|
|
Пустое значение |
|
Для конфигурируемого дела используйте |
|
|
Пустое значение |
|
Нет прав на изменение связанного элемента CRM |
|
|
Пустое значение |
|
Дело с провайдером приложения можно создать только в контексте приложения |
|
|
|
|
Для выбранного типа уведомления не передано |
Статусы и коды системных ошибок
HTTP-статус: 4xx, 5xx
Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит |
|
|
|
В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука |
|
|
|
Методы вызываются только по протоколу HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — |
|
|
|
Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом |
|
|
|
Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа |
|
|
|
Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на |
|
|
|
Срок действия access-токена истек |
|
|
|
Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Продолжите изучение
- Обновить системное дело crm.activity.update
- Получить информацию о деле по идентификатору crm.activity.get
- Получить список дел crm.activity.list
- Удалить дело crm.activity.delete
- Получить описание коммуникации crm.activity.communication.fields
- Получить список полей дела crm.activity.fields
- Добавить событие календаря для работы с клиентами
- Как отправить письмо клиенту от имени сотрудника