Обновить пользовательский тип crm.type.update

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

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

Scope: crm

Кто может выполнять метод: любой пользователь с административным доступом к разделу CRM

Метод обновляет существующий смарт-процесс по его идентификатору id.

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

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

Название
тип

Описание

id*
integer

Идентификатор смарт-процесса. Можно получить с помощью методов: crm.type.list, crm.type.add

fields
object

Значения полей (подробное описание приведено ниже) для обновления смарт-процесса

Параметр fields

Название
тип

Описание

title
string

Название смарт-процесса

relations
object

Объект, содержащий в себе связи к другим сущностям CRM. Структура описана объектом type.relations

isUseInUserfieldEnabled
boolean

Включено ли использование смарт-процесса в пользовательском поле

linkedUserFields
object

Набор пользовательских полей в которых должен отображаться данный смарт-процесс. Структура описана объектом type.linkedUserFields

isAutomationEnabled
boolean

Включены ли роботы и триггеры

isBeginCloseDatesEnabled
boolean

Включены ли поля Дата начала и Дата завершения

isBizProcEnabled
boolean

Включено ли использование дизайнера бизнес процессов

isCategoriesEnabled
boolean

Включены ли свои воронки и туннели продаж

isClientEnabled
boolean

Включено ли поле Клиент. При включенной опции у смарт-процесса появляется предустановленная привязка к Контактам и Компаниям

isDocumentsEnabled
boolean

Включена ли печать документов

isLinkWithProductsEnabled
boolean

Включена ли привязка товаров каталога

isMycompanyEnabled
boolean

Включено ли поле Реквизиты вашей компании

isObserversEnabled
boolean

Включено ли поле Наблюдатели

isRecyclebinEnabled
boolean

Включено ли использование корзины

isSetOpenPermissions
boolean

Делать ли новые воронки доступными для всех

isSourceEnabled
boolean

Включены ли поля Источник и Дополнительно об источнике

isStagesEnabled
boolean

Включено ли использование своих стадий и канбана

isExternal
boolean

Является ли смарт-процесс вынесенным из CRM (привязанным к цифровому рабочему месту)

Параметр устарел. Для работы с цифровыми рабочими местами используйте методы crm.automatedsolution.*

customSectionId
integer

Идентификатор цифрового рабочего места

Параметр устарел. Для работы с цифровыми рабочими местами используйте методы crm.automatedsolution.*

customSections
array

Массив цифровых рабочих мест

Параметр устарел. Для работы с цифровыми рабочими местами используйте методы crm.automatedsolution.*

Примечание

Изменение полей настроек смарт-процесса происходит только при передаче изменяемых значений полей.

Например, если у смарт-процесса с id = 128 необходимо отключить функционал печати документов, то передаем следующие параметры:

{
    "id": 128,
    "fields": {
        "isDocumentsEnabled": "N"
    }
}

Связи

  • Настройки необходимо передавать целиком, они полностью перезаписываются.
  • Нельзя изменить настройки предустановленных связей (iPredefined: true). Эти настройки можно не передавать в запросе.
  • Если при попытке сохранить переданные настройки связей возникнет ошибка, она не будет выведена. Настройки просто не сохранятся.

Примеры кода

  1. У смарт-процесса с id = 20:

    • Отключить следующие настройки:
      • Роботы и триггеры
      • Поля Дата начала и Дата завершения
      • Поле Клиент
      • Поле Наблюдатели
    • Включить следующие настройки:
      • Поля Источник и Дополнительно об источнике
      • Использование своих стадий и канбана
    • Включить отображение смарт-процесса в поле Задачи
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":20,"fields":{"isAutomationEnabled":"N","isBeginCloseDatesEnabled":"N","isClientEnabled":"N","isObserversEnabled":"N","isSourceEnabled":"Y","isStagesEnabled":"Y","isUseInUserfieldEnabled":"Y","linkedUserFields":{"TASKS_TASK|UF_CRM_TASK":"true"}}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.type.update
    
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":20,"fields":{"isAutomationEnabled":"N","isBeginCloseDatesEnabled":"N","isClientEnabled":"N","isObserversEnabled":"N","isSourceEnabled":"Y","isStagesEnabled":"Y","isUseInUserfieldEnabled":"Y","linkedUserFields":{"TASKS_TASK|UF_CRM_TASK":"true"}},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/crm.type.update
    
    // 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
    
    type SmartProcessType = {
      id: number
      title: string
      entityTypeId: number
    }
    
    // Shape of the payload returned in result (match the "response handling" section of the page)
    type TypeUpdateResult = {
      type: SmartProcessType
    }
    
    try {
      const response = await $b24.actions.v2.call.make<TypeUpdateResult>({
        method: 'crm.type.update',
        params: {
          id: 20,
          fields: {
            isAutomationEnabled: 'N',
            isBeginCloseDatesEnabled: 'N',
            isClientEnabled: 'N',
            isObserversEnabled: 'N',
            isSourceEnabled: 'Y',
            isStagesEnabled: 'Y',
            isUseInUserfieldEnabled: 'Y',
            linkedUserFields: {
              'TASKS_TASK|UF_CRM_TASK': 'true',
            },
          },
        },
        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(`Updated smart process #${result.type.id} (${result.type.title})`)
      }
    } 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 updateSmartProcessSettings() {
        try {
          // Initialize the SDK inside a Bitrix24 frame
          const $b24 = await B24Js.initializeB24Frame()
    
          const response = await $b24.actions.v2.call.make({
            method: 'crm.type.update',
            params: {
              id: 20,
              fields: {
                isAutomationEnabled: 'N',
                isBeginCloseDatesEnabled: 'N',
                isClientEnabled: 'N',
                isObserversEnabled: 'N',
                isSourceEnabled: 'Y',
                isStagesEnabled: 'Y',
                isUseInUserfieldEnabled: 'Y',
                linkedUserFields: {
                  'TASKS_TASK|UF_CRM_TASK': 'true',
                },
              },
            },
            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(`Updated smart process #${result.type.id} (${result.type.title})`)
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
      }
    
      document.addEventListener('DOMContentLoaded', updateSmartProcessSettings)
    </script>
    
    from b24pysdk.errors import BitrixAPIError, BitrixSDKException
    
    try:
        bitrix_response = client.crm.type.update(
            bitrix_id=20,
            fields={
                "relations": {
                    "parent": [],
                    "child": [
                        {
                            "entityTypeId": 1,
                            "isChildrenListEnabled": "true",
                        },
                        {
                            "entityTypeId": 2,
                            "isChildrenListEnabled": "false",
                        },
                    ],
                },
            },
        ).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}")
    
    require_once('crest.php');
    
    $result = CRest::call(
        'crm.type.update',
        [
            'id' => 20,
            'fields' => [
                'isAutomationEnabled' => "N",
                'isBeginCloseDatesEnabled' => "N",
                'isClientEnabled' => "N",
                'isObserversEnabled' => "N",
                'isSourceEnabled' => "Y",
                'isStagesEnabled' => "Y",
                'isUseInUserfieldEnabled' => "Y",
                'linkedUserFields' => [
                    "TASKS_TASK|UF_CRM_TASK" => "true",
                ],
            ]
        ]
    );
    
    echo '<PRE>';
    print_r($result);
    echo '</PRE>';
    
    // client и ctx уже созданы — см. раздел «SDK для Go»
    res, err := client.Core().Call(ctx, "crm.type.update", b24.Params{
    	"id": 20,
    	"fields": b24.Params{
    		"isAutomationEnabled":      "N",
    		"isBeginCloseDatesEnabled": "N",
    		"isClientEnabled":          "N",
    		"isObserversEnabled":       "N",
    		"isSourceEnabled":          "Y",
    		"isStagesEnabled":          "Y",
    		"isUseInUserfieldEnabled":  "Y",
    		"linkedUserFields": b24.Params{
    			"TASKS_TASK|UF_CRM_TASK": "true",
    		},
    	},
    })
    if err != nil {
    	return fmt.Errorf("crm.type.update: %w", err)
    }
    
    // Ответ приходит как json.RawMessage — разберите его
    // в структуру под форму ответа, показанную ниже на этой странице.
    fmt.Printf("%s\n", res.Result)
    
  2. Допустим, у смарт-процесса с id = 20 необходимо

    • Удалить все привязанные к смарт-процессу сущности (relations.parent)
    • Включить «показ в карточке» для Лидов, к которым привязан смарт-процесс

    Исходные relations в смарт-процессе:

    {
        "relations": {
            "parent": [
                {
                    "entityTypeId": 31,
                    "isChildrenListEnabled": "N",
                    "isPredefined": "N"
                }
            ],
            "child": [
                {
                    "entityTypeId": 1,
                    "isChildrenListEnabled": "N",
                    "isPredefined": "N"
                },
                {
                    "entityTypeId": 2,
                    "isChildrenListEnabled": "N",
                    "isPredefined": "N"
                }
            ]
        }
    }
    

    Итоговый запрос:

    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":20,"fields":{"relations":{"parent":[],"child":[{"entityTypeId":1,"isChildrenListEnabled":"true"},{"entityTypeId":2,"isChildrenListEnabled":"false"}]}}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.type.update
    
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":20,"fields":{"relations":{"parent":[],"child":[{"entityTypeId":1,"isChildrenListEnabled":"true"},{"entityTypeId":2,"isChildrenListEnabled":"false"}]}},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/crm.type.update
    
    // 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
    
    type SmartProcessType = {
      id: number
      title: string
      entityTypeId: number
    }
    
    // Shape of the payload returned in result (match the "response handling" section of the page)
    type TypeUpdateResult = {
      type: SmartProcessType
    }
    
    try {
      const response = await $b24.actions.v2.call.make<TypeUpdateResult>({
        method: 'crm.type.update',
        params: {
          id: 20,
          fields: {
            relations: {
              parent: [],
              child: [
                {
                  entityTypeId: 1,
                  isChildrenListEnabled: 'true',
                },
                {
                  entityTypeId: 2,
                  isChildrenListEnabled: 'false',
                },
              ],
            },
          },
        },
        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(`Updated smart process #${result.type.id} (${result.type.title})`)
      }
    } 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 updateSmartProcessRelations() {
        try {
          // Initialize the SDK inside a Bitrix24 frame
          const $b24 = await B24Js.initializeB24Frame()
    
          const response = await $b24.actions.v2.call.make({
            method: 'crm.type.update',
            params: {
              id: 20,
              fields: {
                relations: {
                  parent: [],
                  child: [
                    {
                      entityTypeId: 1,
                      isChildrenListEnabled: 'true',
                    },
                    {
                      entityTypeId: 2,
                      isChildrenListEnabled: 'false',
                    },
                  ],
                },
              },
            },
            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(`Updated smart process #${result.type.id} (${result.type.title})`)
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
      }
    
      document.addEventListener('DOMContentLoaded', updateSmartProcessRelations)
    </script>
    
    from b24pysdk.errors import BitrixAPIError, BitrixSDKException
    
    try:
        bitrix_response = client.crm.type.update(
            bitrix_id=20,
            fields={
                "relations": {
                    "parent": [],
                    "child": [
                        {
                            "entityTypeId": 1,
                            "isChildrenListEnabled": "true",
                        },
                        {
                            "entityTypeId": 2,
                            "isChildrenListEnabled": "false",
                        },
                    ],
                },
            },
        ).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}")
    
    require_once('crest.php');
    
    $result = CRest::call(
        'crm.type.update',
        [
            'id' => 20,
            'fields' => [
                'relations' => [
                    'parent' => [],
                    'child' => [
                        [
                            "entityTypeId" => 1,
                            "isChildrenListEnabled" => "true",
                        ],
                        [
                            "entityTypeId" => 2,
                            "isChildrenListEnabled" => "false",
                        ]
                    ],
                ],
            ]
        ]
    );
    
    echo '<PRE>';
    print_r($result);
    echo '</PRE>';
    
    // client и ctx уже созданы — см. раздел «SDK для Go»
    res, err := client.Core().Call(ctx, "crm.type.update", b24.Params{
    	"id": 20,
    	"fields": b24.Params{
    		"relations": b24.Params{
    			"parent": []any{},
    			"child": []b24.Params{
    				{
    					"entityTypeId":          1,
    					"isChildrenListEnabled": "true",
    				},
    				{
    					"entityTypeId":          2,
    					"isChildrenListEnabled": "false",
    				},
    			},
    		},
    	},
    })
    if err != nil {
    	return fmt.Errorf("crm.type.update: %w", err)
    }
    
    // Метод заворачивает ответ в объект с ключом "type".
    raw, ok := b24.Unwrap(res.Result, "type")
    if !ok {
    	return fmt.Errorf("в ответе нет ключа type")
    }
    
    var item struct {
    	ID                  b24.ID `json:"id"`
    	Title               string `json:"title"`
    	Code                string `json:"code"`
    	CreatedBy           int    `json:"createdBy"`
    	EntityTypeID        b24.ID `json:"entityTypeId"`
    	IsCategoriesEnabled string `json:"isCategoriesEnabled"`
    }
    if err := json.Unmarshal(raw, &item); err != nil {
    	return fmt.Errorf("разбор ответа: %w", err)
    }
    fmt.Println(item.ID, item.Title)
    

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

HTTP-статус: 200

{
    "result": {
        "type": {
            "id": 20,
            "title": "Смарт-процесс #3",
            "code": "",
            "createdBy": 1,
            "entityTypeId": 1222,
            "customSectionId": null,
            "isCategoriesEnabled": "Y",
            "isStagesEnabled": "Y",
            "isBeginCloseDatesEnabled": "N",
            "isClientEnabled": "N",
            "isUseInUserfieldEnabled": "Y",
            "isLinkWithProductsEnabled": "N",
            "isMycompanyEnabled": "Y",
            "isDocumentsEnabled": "N",
            "isSourceEnabled": "Y",
            "isObserversEnabled": "N",
            "isRecyclebinEnabled": "N",
            "isAutomationEnabled": "N",
            "isBizProcEnabled": "N",
            "isSetOpenPermissions": "Y",
            "isPaymentsEnabled": "N",
            "isCountersEnabled": "N",
            "createdTime": "2024-07-08T17:24:47+02:00",
            "updatedTime": "2024-07-09T20:55:37+02:00",
            "updatedBy": 1,
            "relations": {
                "parent": [],
                "child": [
                    {
                        "entityTypeId": 1,
                        "isChildrenListEnabled": "Y",
                        "isPredefined": "N"
                    },
                    {
                        "entityTypeId": 2,
                        "isChildrenListEnabled": "Y",
                        "isPredefined": "N"
                    }
                ]
            },
            "linkedUserFields": {
                "CALENDAR_EVENT|UF_CRM_CAL_EVENT": "N",
                "TASKS_TASK|UF_CRM_TASK": "Y",
                "TASKS_TASK_TEMPLATE|UF_CRM_TASK": "N"
            },
            "customSections": []
        }
    },
    "time": {
        "start": 1720551426.116454,
        "finish": 1720551426.816224,
        "duration": 0.6997702121734619,
        "processing": 0.20451998710632324,
        "date_start": "2024-07-09T20:57:06+02:00",
        "date_finish": "2024-07-09T20:57:06+02:00",
        "operating": 0.2044668197631836
    }
}

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

Название
тип

Описание

result
object

Корневой элемент ответа. Содержит единственный ключ type

type
type

Информация об обновленном смарт-процессе

time
time

Информация о времени выполнения запроса

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

HTTP-статус: 400

{
    "error": 0,
    "error_description": "Смарт-процесс не найден"
}

Название
тип

Описание

error
string

Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только error_description

error_description
string

Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки

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

Статус

Код

Описание

Значение

400

ACCESS_DENIED

Доступ запрещен

Возникает, если у пользователя нет административных прав CRM

403

allowed_only_intranet_user

Действие разрешено только интранет-пользователям

Возникает, если пользователь не является интранет-пользователем

400

UPDATE_DYNAMIC_TYPE_RESTRICTED

Вы не можете изменить настройки смарт-процесса из-за ограничений вашего тарифа

Смарт-процессы не доступны на вашем тарифе

400

0

Выберите рабочее место, в котором будет находиться смарт-процесс

При передаче isExternal = 'true', но пустом customSectionId

Статусы и коды системных ошибок

HTTP-статус: 4xx, 5xx

Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит

401

NO_AUTH_FOUND
Wrong authorization data

В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука

401

INVALID_REQUEST
Https required

Методы вызываются только по протоколу HTTPS

401

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24

401

ACCESS_DENIED
REST is available only on commercial plans

REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — REST is available only by subscription

401

INVALID_CREDENTIALS
Invalid request credentials

Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом

404

ERROR_METHOD_NOT_FOUND
Method not found!

Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа

401

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на provided by the access token

401

expired_token
The access token provided has expired

Срок действия access-токена истек

401

user_access_error
The user does not have access to the application

Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям

403

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение