Сделать поле обязательным v 3.0 crm.<тип>.field.required.set
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
Scope:
crmКто может выполнять метод: пользователь с правом «Разрешить изменять настройки» в CRM
Метод относится к REST 3.0. Особенности вызова и формат ответа новой версии API описаны в обзоре REST 3.0.
Метод crm.<тип>.field.required.set делает поле обязательным в воронке целиком или на выбранных стадиях и возвращает новую настройку. Тип объекта задает сегмент <тип> в имени метода.
Имя метода для типа объекта
|
Тип объекта |
Метод |
Поля |
|
Сделка |
|
|
|
Лид |
|
|
|
Контакт |
|
|
|
Компания |
|
|
|
Предложение |
|
|
|
Счет |
|
|
|
Смарт-процесс |
|
Для смарт-процесса в имя метода подставляется идентификатор его типа entityTypeId. Идентификаторы типов смарт-процессов возвращает метод crm.type.list в поле entityTypeId. Методы обязательности полей есть у смарт-процесса при любых настройках типа. У моей компании этих методов нет: на crm.mycompany.field.required.set Битрикс24 ответит ошибкой «Метод не найден».
Имя метода пишется в нижнем регистре: crm.smartinvoice.field.required.set, а не crm.smartInvoice.field.required.set. На имя в другом регистре метод отвечает ошибкой «Метод не найден».
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
fieldId* |
Имя поля: стандартного в camelCase, например |
|
categoryId |
Идентификатор воронки. Когда передавать |
|
requiredStageIds |
Стадии, на которых поле обязательно, например |
Параметр categoryId
Битрикс24 хранит обязательность отдельно для каждой воронки. Передавать ли categoryId, зависит от типа объекта:
|
Тип объекта |
categoryId |
|
Сделка, контакт, компания |
Обязателен. Воронку по умолчанию задает |
|
Смарт-процесс |
Обязателен. Идентификатор воронки из метода crm.<тип>.category.list. Если в типе выключены воронки, методов воронок у смарт-процесса нет: идентификатор единственной воронки возвращает метод crm.category.list с |
|
Счет |
Обязателен. Идентификатор воронки счетов возвращает метод crm.category.list с |
|
Лид, предложение |
Не передается |
Если передать categoryId не по таблице, метод вернет ошибку с текстом Invalid category ID.
Параметр requiredStageIds
От параметра зависит режим обязательности:
- не передан — поле обязательно на всех стадиях воронки, режим
all. У лида и предложения — во всем типе объекта - передан непустой массив — поле обязательно только на переданных стадиях, режим
stages - передан пустой массив
[]— метод снимает обязательность, режимnone
Передавайте стадии строками и только из воронки categoryId. Стадии сделки и смарт-процесса возвращает метод crm.<тип>.category.stage.list. Стадии лида, предложения и счета возвращает метод crm.status.list с ENTITY_ID = STATUS, QUOTE_STATUS и SMART_INVOICE_STAGE_<categoryId>. У контакта и компании стадий нет: для них метод делает поле обязательным во всей воронке.
Новая настройка заменяет прежнюю. Чтобы добавить стадию, передайте весь список стадий заново.
Методы элементов REST 3.0 эту обязательность не проверяют. Например, если поле обязательно в режиме all, метод crm.<тип>.add все равно создаст элемент без этого поля, а crm.<тип>.update переведет элемент на обязательную стадию.
Примеры кода
Как использовать примеры в документации
Вызов нового API отличается добавлением параметра /api/ в запросе:
https://{адрес_установки}/rest/api/{id_пользователя}/{токен_вебхука}/crm.smartprocess1038.field.required.set
Примеры делают поле «Номер договора» обязательным на стадии «Согласование» в воронке 69 смарт-процесса с идентификатором типа 1038. Для другого типа объекта замените имя метода по таблице выше.
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fieldId":"UF_CRM_CONTRACT_NUMBER","categoryId":69,"requiredStageIds":["DT1038_69:CLIENT"]}' \
https://**put_your_bitrix24_address**/rest/api/**put_your_user_id_here**/**put_your_webhook_here**/crm.smartprocess1038.field.required.set
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fieldId":"UF_CRM_CONTRACT_NUMBER","categoryId":69,"requiredStageIds":["DT1038_69:CLIENT"],"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/api/crm.smartprocess1038.field.required.set
Методы CRM пока не входят в список методов REST 3.0, который знает $b24.actions.v3.call.make: такой вызов вернет ошибку SDK JSSDK_CORE_METHOD_NOT_SUPPORT_IN_API_V3. Вызывайте метод через HTTP-клиент REST 3.0 — $b24.getHttpClient(ApiVersion.v3).call.
import { ApiVersion, Text } from '@bitrix24/b24jssdk'
import type { B24Frame } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
type RequirementResult = {
item: {
fieldId: string
categoryId: number | null
mode: 'none' | 'all' | 'stages'
requiredStageIds: string[]
globallyRequired: boolean
}
}
try {
const response = await $b24.getHttpClient(ApiVersion.v3).call<RequirementResult>(
'crm.smartprocess1038.field.required.set',
{
fieldId: 'UF_CRM_CONTRACT_NUMBER',
categoryId: 69,
requiredStageIds: ['DT1038_69:CLIENT'],
},
Text.getUuidRfc4122()
)
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
} else {
const result = response.getData()!.result
console.info(result.item.mode, result.item.requiredStageIds)
}
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
Методы CRM пока не входят в список методов REST 3.0, который знает $b24.actions.v3.call.make. Вызывайте метод через HTTP-клиент REST 3.0 — $b24.getHttpClient(B24Js.ApiVersion.v3).call.
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
async function setRequirement() {
try {
const $b24 = await B24Js.initializeB24Frame()
const response = await $b24.getHttpClient(B24Js.ApiVersion.v3).call(
'crm.smartprocess1038.field.required.set',
{
fieldId: 'UF_CRM_CONTRACT_NUMBER',
categoryId: 69,
requiredStageIds: ['DT1038_69:CLIENT'],
},
B24Js.Text.getUuidRfc4122()
)
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
return
}
const result = response.getData().result
console.info(result.item.mode, result.item.requiredStageIds)
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', setRequirement)
</script>
У методов CRM нет готовых оберток в b24pysdk, и SDK отправляет в REST 3.0 только методы из списка Config().api_v3_methods. Добавьте метод в этот список и вызовите его через bitrix_token.call_method с prefer_version=3.
from b24pysdk import Config
from b24pysdk.errors import BitrixSDKException
from b24pysdk.errors.v3 import BitrixAPIError
method = "crm.smartprocess1038.field.required.set"
Config().configure(api_v3_methods=Config().api_v3_methods | {method})
try:
response = bitrix_token.call_method(
api_method=method,
params={
"fieldId": "UF_CRM_CONTRACT_NUMBER",
"categoryId": 69,
"requiredStageIds": ["DT1038_69:CLIENT"],
},
prefer_version=3,
)
result = response["result"]
print(result["item"]["mode"], result["item"]["requiredStageIds"])
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"code: {error.code}",
f"message: {error.error.message}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
SDK пока не поддерживает вызовы по адресу /rest/api/. Используйте прямой HTTP-запрос, например через cURL или fetch.
try {
$response = $b24Service
->core
->call(
'crm.smartprocess1038.field.required.set',
[
'fieldId' => 'UF_CRM_CONTRACT_NUMBER',
'categoryId' => 69,
'requiredStageIds' => ['DT1038_69:CLIENT'],
]
);
$result = $response
->getResponseData()
->getResult();
print_r($result);
} catch (Throwable $e) {
echo $e->getMessage();
}
SDK пока не поддерживает вызовы по адресу /rest/api/. Используйте прямой HTTP-запрос, например через cURL или fetch.
BX24.callMethod(
'crm.smartprocess1038.field.required.set',
{
fieldId: 'UF_CRM_CONTRACT_NUMBER',
categoryId: 69,
requiredStageIds: ['DT1038_69:CLIENT'],
},
result => {
if (result.error())
console.error(result.error());
else
console.dir(result.data());
}
);
SDK пока не поддерживает вызовы по адресу /rest/api/. Используйте прямой HTTP-запрос, например через cURL или fetch.
require_once('crest.php');
$result = CRest::call(
'crm.smartprocess1038.field.required.set',
[
'fieldId' => 'UF_CRM_CONTRACT_NUMBER',
'categoryId' => 69,
'requiredStageIds' => ['DT1038_69:CLIENT'],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "crm.smartprocess1038.field.required.set", b24.Params{
"fieldId": "UF_CRM_CONTRACT_NUMBER",
"categoryId": 69,
"requiredStageIds": []string{"DT1038_69:CLIENT"},
})
if err != nil {
return fmt.Errorf("crm.smartprocess1038.field.required.set: %w", err)
}
var out struct {
Item struct {
FieldID string `json:"fieldId"`
Mode string `json:"mode"`
RequiredStageIDs []string `json:"requiredStageIds"`
} `json:"item"`
}
if err := json.Unmarshal(res.Result, &out); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println(out.Item.Mode, out.Item.RequiredStageIDs)
Обработка ответа
HTTP-статус: 200
{
"result": {
"item": {
"fieldId": "UF_CRM_CONTRACT_NUMBER",
"categoryId": 69,
"mode": "stages",
"requiredStageIds": [
"DT1038_69:CLIENT"
],
"globallyRequired": false
}
},
"time": {
"start": 1793716020,
"finish": 1793716020.266912,
"duration": 0.26691198348999023,
"processing": 0,
"date_start": "2026-11-03T17:27:00+03:00",
"date_finish": "2026-11-03T17:27:00+03:00",
"operating_reset_at": 1793716620,
"operating": 0
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Объект с данными ответа |
|
result.item |
Настройка обязательности поля. Поля настройки |
|
time |
Информация о времени выполнения запроса |
Поля настройки
|
Название |
Описание |
|
fieldId |
Имя поля |
|
categoryId |
Идентификатор воронки. У лида и предложения — |
|
mode |
Режим обязательности. Возможные значения:
|
|
requiredStageIds |
Стадии, на которых поле обязательно. Массив заполнен только при |
|
globallyRequired |
Обязательно ли поле во всех воронках независимо от |
Обработка ошибок
HTTP-статус: 400
{
"error": {
"code": "BITRIX_REST_V3_EXCEPTION_VALIDATION_REQUESTVALIDATIONEXCEPTION",
"message": "Request validation failed.",
"validation": [
{
"message": "A required stage was not found in this context.",
"field": "requiredStageIds"
}
]
}
}
|
Название |
Описание |
|
error.code |
Строковый код ошибки. Используйте для идентификации типа исключения |
|
error.message |
Текстовое описание ошибки |
|
error.validation |
Массив c деталями ошибки. Присутствует только в ошибках валидации данных |
|
error.validation[].field |
Название поля, в котором возникла ошибка валидации |
|
error.validation[].message |
Описание ошибки, связанной с указанным полем |
Возможные коды ошибок
Ошибка «Воронка не найдена» приходит с коротким кодом CONTEXT_NOT_FOUND без префикса BITRIX_REST_V3_. Ее текст и тексты ошибок валидации — на английском языке.
Ошибки валидации запроса
Код ошибки: BITRIX_REST_V3_EXCEPTION_VALIDATION_REQUESTVALIDATIONEXCEPTION
|
Поле |
Описание ошибки |
Как исправить |
|
|
fieldId must be a non-empty string. |
Передайте имя поля строкой, например |
|
|
Invalid category ID. |
Передайте |
|
|
categoryId must be a non-negative integer. |
Передайте идентификатор воронки целым числом не меньше |
|
|
requiredStageIds must be an array of strings. |
Передайте массив строк. Значение |
|
|
Required stage ID must be a non-empty string. |
Передайте идентификаторы стадий строками, например |
|
|
A required stage was not found in this context. |
Передайте стадии воронки из |
|
|
Stage requirements are not supported in this context. |
У контакта и компании стадий нет. Уберите |
|
|
Field requirement is not supported for this field. |
Выберите другое поле: для |
Поле не найдено
Код ошибки: BITRIX_REST_V3_REALISATION_EXCEPTION_FIELDNOTFOUNDEXCEPTION, HTTP-статус 404
|
Поле |
Описание ошибки |
Как исправить |
|
|
Поле |
Проверьте имя поля методом crm.<тип>.field.list. Имена стандартных полей пишутся в camelCase: |
Воронка не найдена
Код ошибки: CONTEXT_NOT_FOUND, HTTP-статус 404
|
Поле |
Описание ошибки |
Как исправить |
|
|
The field requirement context was not found. |
Проверьте |
Ошибка доступа
Код ошибки: BITRIX_REST_V3_EXCEPTION_ACCESSDENIEDEXCEPTION, HTTP-статус 403
|
Поле |
Описание ошибки |
Как исправить |
|
|
Доступ запрещен |
Вызовите метод от имени пользователя с правом «Разрешить изменять настройки» в CRM |
Метод не найден
Код ошибки: BITRIX_REST_V3_EXCEPTION_METHODNOTFOUNDEXCEPTION, HTTP-статус 404
|
Поле |
Описание ошибки |
Как исправить |
|
|
Метод |
Проверьте имя метода: оно пишется в нижнем регистре, например |
Статусы и коды системных ошибок
HTTP-статус: 4xx, 5xx
Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит |
|
|
|
В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука |
|
|
|
Методы вызываются только по протоколу HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — |
|
|
|
Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом |
|
|
|
Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа |
|
|
|
Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на |
|
|
|
Срок действия access-токена истек |
|
|
|
Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |