До 10%Рекомендуйте нас и получайте процент за каждого приведённого клиента

REST API в 1С-Битрикс: интеграции, вебхуки и приложения

REST API в 1С-Битрикс: вебхуки, приложения и интеграции интернет-магазина

Рано или поздно любой серьёзный проект на Битриксе перестаёт быть «вещью в себе»: магазин должен отдавать заказы в учётную систему, забирать остатки со склада, синхронизировать каталог, кормить данными мобильное приложение и чат-бота, а CRM — обмениваться сделками с сайтом. Всё это держится на одном инструменте — REST API. Разберём его без мифов: что такое «битрикс rest» на самом деле, чем вебхуки битрикс24 отличаются от приложений, как устроены входящие и исходящие вебхуки и как собрать собственный REST на стороне 1С-Битрикс.

Материал — практическая выжимка из наших проектов по разработке REST API для 1С-Битрикс и интеграциям с внешними системами. Без академизма: только то, что реально нужно, чтобы спроектировать надёжный обмен и не наступить на типовые грабли.

Коротко

  • Две экосистемы. «Готовый» REST с сотнями методов — это Битрикс24; в 1С-Битрикс Управление сайтом свой REST чаще собирают на контроллерах D7.
  • Вебхуки. Входящий — вы дёргаете методы Битрикса; исходящий — Битрикс сам шлёт данные события на ваш URL.
  • Авторизация. Вебхук-код — для внутренних серверных обменов; OAuth 2.0 и приложения — для тиражируемых и публичных решений.
  • Масштаб. Батч до 50 команд в одном запросе, пагинация через start/next, лимиты частоты — проектируйте с ретраями и идемпотентностью.

Что такое REST API в экосистеме Битрикс

REST API (Representational State Transfer) — это способ обмена данными между системами по протоколу HTTP: одна сторона отправляет запрос на определённый адрес с параметрами, другая возвращает структурированный ответ, чаще всего в формате JSON. «Битрикс rest» — это набор таких адресов-методов, через которые внешние программы читают и меняют данные внутри платформы: сделки, заказы, товары, пользователей.

Ключевая мысль, с которой стоит начать: REST в мире Битрикса — это не одна монолитная штука, а два разных инструмента под одним брендом. Есть облачный и коробочный Битрикс24 с его богатым готовым REST, и есть 1С-Битрикс: Управление сайтом — продукт для сайтов и интернет-магазинов, у которого модель REST устроена иначе. Путаница между ними — источник половины недоразумений в задачах на интеграцию, поэтому этому различию посвящён отдельный раздел ниже.

Зачем магазину REST, если есть обмен с 1С

Классический обмен с «1С:Предприятие» через CommerceML закрывает базовый сценарий «каталог и заказы», и о нём у нас есть отдельный разбор — интеграция магазина с 1С. Но как только появляются задачи вне этого протокола — передать заказ в стороннюю CRM, забрать остатки из WMS-склада в реальном времени, отдать данные в мобильное приложение или принять заказ от маркетплейса — нужен универсальный канал. Этим каналом и становится REST: он не привязан к одному формату файла и работает в обе стороны в реальном времени.

Битрикс24 и 1С-Битрикс: где какой REST

Это самый важный раздел для понимания всего дальнейшего. Один вендор — два продукта — две модели REST.

Битрикс24 (облако и коробка) — это платформа для совместной работы и CRM. У неё «из коробки» есть огромный REST API: сотни методов для CRM, задач, чата, календаря, телефонии, дисков. Именно здесь живут привычные crm.deal.add, crm.lead.list, входящие и исходящие вебхуки, OAuth-приложения и Маркет приложений. Когда в задаче звучит «вебхуки битрикс24», «поставить в CRM сделку через API», «чат-бот в портале» — это про Битрикс24.

1С-Битрикс: Управление сайтом (БУС) — это CMS и движок интернет-магазина. Здесь нет облачного REST такого масштаба: единого готового набора «дёргай любой метод» из коробки не поставляется. Вместо этого REST на сайте обычно строят одним из способов: собственные контроллеры на D7 (\Bitrix\Main\Engine\Controller), ajax-действия, или — если задача близка к порталу — модуль rest. То есть в БУС REST чаще делаешь ты сам под конкретный сценарий, а не берёшь готовым.

ПризнакБитрикс241С-Битрикс: Управление сайтом
Готовый REST из коробкиДа, сотни методовНет единого облачного REST
Вебхуки (входящие/исходящие)Штатно, из интерфейсаРеализуются под задачу
OAuth и приложенияДа, Маркет приложенийОбычно свой токен/подпись
Типичные методыcrm.*, tasks.*, im.*, user.*Свои действия контроллеров, catalog/sale через D7
Кто пишет эндпоинтыВендор (вы вызываете)Разработчик проекта
Практический вывод: прежде чем оценивать задачу «сделать API», уточните, о какой из двух систем речь. «Интеграция с Битрикс24» и «REST для магазина на 1С-Битрикс» — это разный объём работ, разные инструменты и разная модель авторизации. Про связку сайта и портала у нас есть отдельная статья — интеграция с Битрикс24.

Вебхуки: входящие и исходящие

Вебхук (webhook) — самый быстрый способ подключиться к REST Битрикс24 без написания полноценного приложения. Это «крючок»: специальный URL с секретным кодом, привязанный к правам конкретного пользователя. Вебхуки бывают двух видов, и путать их нельзя, потому что они решают противоположные задачи.

Входящий вебхук (incoming)

Входящий вебхук — это URL, дёрнув который снаружи, вы вызываете методы Битрикса. Данные идут внутрь: вы создаёте сделку, читаете список товаров, обновляете заказ. По сути это готовый «пульт управления» порталом для вашего скрипта. Адрес выглядит так (код условный):

https://your-portal.bitrix24.ru/rest/1/xxxxxxxxxxxx/crm.deal.add.json

Здесь 1 — идентификатор пользователя, от имени которого работает вебхук, xxxxxxxxxxx — секретный код, а crm.deal.add — вызываемый метод. Отправляете POST с параметрами — получаете JSON-ответ. Именно входящие вебхуки закрывают большинство серверных интеграций «наш скрипт дёргает портал».

Исходящий вебхук (outgoing)

Исходящий вебхук работает наоборот: это подписка на событие. Вы указываете список событий (например, «создана сделка», «изменён заказ») и URL-обработчик на вашей стороне. Когда событие происходит внутри Битрикса, платформа сама отправляет HTTP-запрос на ваш URL с данными о том, что случилось. Данные идут наружу, инициатор — Битрикс, а не вы.

Простой мнемонический ориентир: входящий — вы дёргаете Битрикс, исходящий — Битрикс дёргает вас. Из этого сразу следует и разница в надёжности: во входящем ретраями управляете вы, а в исходящем нужно принять и корректно ответить на запрос платформы, иначе доставка события может не состояться.

Вебхуки: направление данных Ваш сервер скрипт интеграции Битрикс24 портал / данные Входящий: вызов метода → ← Исходящий: данные события Ваш обработчик принимает событие Событие в CRM сделка изменена Входящий — вы дёргаете Битрикс. Исходящий — Битрикс дёргает вас.
Схема: входящий вебхук направляет данные в Битрикс (вызов метода), исходящий — из Битрикса наружу (данные события).

Авторизация: вебхук-код и OAuth 2.0

Любой доступ к REST должен быть авторизован — иначе кто угодно читал бы и менял ваши данные. В экосистеме Битрикс есть два основных механизма, и выбор между ними определяет весь характер интеграции.

Авторизация по вебхук-коду

Самый простой способ: секретный код прямо в URL вебхука. Кто знает адрес — тот и имеет доступ в пределах прав того пользователя и того набора разрешений (scope), что заданы при создании вебхука. Плюсы — минимум кода, мгновенный старт, идеально для внутренней серверной интеграции. Минусы — код фактически «вечный» пароль: его нельзя показывать в браузере, коммитить в репозиторий или передавать в клиентское приложение. Утёк код — считайте, отдали ключи от портала.

Авторизация через OAuth 2.0

OAuth 2.0 — механизм для приложений. Здесь нет «вечного пароля»: пользователь один раз разрешает приложению доступ, после чего приложение получает пару токенов — короткоживущий access_token (им подписываются вызовы) и refresh_token (им обновляется access, когда тот истёк). Доступ ограничен явным набором прав (scope), токены можно отзывать, а одно приложение может обслуживать много порталов. Это правильный путь для тиражируемых, публичных и клиентских интеграций.

ПараметрВебхук-кодOAuth 2.0 (приложение)
Сложность стартаМинимальнаяВыше (регистрация, обмен токенов)
Срок жизни доступаПостоянный, пока не отозванКороткий access + обновляемый refresh
Разграничение прав (scope)Есть, задаётся при созданииЕсть, гибче и явнее
Много порталов/клиентовНет, один на одинДа, тиражируемо
Где хранить секретТолько на сервереНа сервере, с ротацией токенов
Когда выбиратьВнутренний серверный обменПродукт, публичное приложение

Приложения и локальные приложения

Если вебхук — это «ключ для своего скрипта», то приложение — это полноценный «жилец» портала, который работает по OAuth и может иметь интерфейс. Приложения бывают трёх типовых видов.

Поток OAuth для приложения на верхнем уровне выглядит так: приложение отправляет пользователя на страницу авторизации портала, пользователь подтверждает доступ, портал возвращает код, приложение меняет код на пару токенов, а дальше вызывает REST с access_token и по мере необходимости обновляет его через refresh_token.

OAuth 2.0: как приложение получает доступ Приложение Пользователь даёт согласие Портал 1. запрос доступа 2. подтверждение 3. код авторизации 4. код → access_token + refresh_token access — вызовы, refresh — обновление доступа 5. вызовы REST с access_token scope ограничивает доступные методы
Схема: приложение получает согласие пользователя, обменивает код на пару токенов и дальше вызывает REST с access_token, обновляя его по refresh_token.

Вебхук или приложение: сравнение

На старте почти каждой интеграции стоит развилка: обойтись вебхуком или писать приложение. Правильный выбор экономит недели работы, а ошибочный — приводит к переделке. Ориентируйтесь на таблицу.

КритерийВебхукПриложение (OAuth)
Кому подходитВнутренняя серверная интеграцияТиражируемое или публичное решение
Скорость запускаМинутыДни (регистрация, OAuth, тесты)
Число порталовОдинМного
Интерфейс в порталеНетДа, встраиваемые страницы
Управление доступомОдин код на весь доступТокены, отзыв, ротация
Риск при утечке секретаВысокий (постоянный код)Ниже (короткий access-токен)
Обновления событийИсходящие вебхукиСобытийные подписки приложения

Практическое правило: если это разовый серверный обмен между вашими же системами — берите вебхук и не усложняйте. Если вы делаете продукт, который поставите нескольким клиентам, или нужен интерфейс в портале — сразу закладывайте приложение на OAuth. Промежуточный вариант «внутреннее решение с интерфейсом, но без Маркета» отлично закрывается локальным приложением.

Основные группы методов REST

Методы REST в Битрикс24 сгруппированы по модулям, и имя метода почти всегда читается как «модуль.сущность.действие». Знание основных групп помогает быстро находить нужное и оценивать объём интеграции. Для интернет-магазина особенно важны группы каталога и заказов.

ГруппаЗа что отвечаетПримеры методов
crm.*Сделки, лиды, контакты, компании CRMcrm.deal.add, crm.lead.list, crm.contact.get
catalog.*Товары, разделы, цены торгового каталогаcatalog.product.list, catalog.section.get
sale.*Заказы, корзина, свойства, статусыsale.order.list, sale.basketitem.add
lists.*Универсальные списки и их элементыlists.element.add, lists.get
user.*Пользователи портала и их данныеuser.get, user.current, user.add
im.* / imbot.*Чат, сообщения, чат-ботыimbot.register, im.message.add
tasks.*Задачи и проектыtasks.task.add, tasks.task.list

Отдельно отметим группы catalog.* и sale.* — это «магазинная» часть REST. Через них забирают и обновляют товары, читают и меняют заказы, работают с ценами и складами. Если задача звучит как «синхронизировать каталог» или «отдать заказы» — заглядывать нужно именно сюда. У каждого метода есть парные «сёстры»: *.add (создать), *.update (изменить), *.get (прочитать одну сущность), *.list (список с фильтром и пагинацией), *.delete (удалить).

Совет: прежде чем писать код, соберите точный список методов под сценарий и проверьте права (scope) вебхука или приложения на каждый из них. Частая ошибка — вебхук создан без нужного scope (например, без catalog), и половина вызовов возвращает ошибку доступа уже на боевом обмене.

Формат запроса и ответа

Запрос к REST — это HTTP-обращение к URL метода с параметрами. Параметры можно передавать в строке запроса (GET) или в теле (POST) — для операций записи всегда используют POST. Ответ приходит в JSON и, помимо самих данных в поле result, содержит служебную информацию о времени выполнения и, при постраничном чтении, указатель следующей страницы.

Пример вызова через входящий вебхук — создание сделки в CRM (значения условные):

POST /rest/1/xxxxxxxx/crm.deal.add.json

fields[TITLE]=Заказ с сайта №10245
fields[TYPE_ID]=SALE
fields[STAGE_ID]=NEW
fields[CURRENCY_ID]=RUB
fields[OPPORTUNITY]=15990

Успешный ответ в упрощённом виде:

{
  "result": 234,
  "time": {
    "start": 1751360000.12,
    "finish": 1751360000.34,
    "duration": 0.22
  }
}

Здесь result — идентификатор созданной сделки, а блок time показывает длительность операции. При ошибке структура иная — вместо result приходит описание проблемы:

{
  "error": "INVALID_CREDENTIALS",
  "error_description": "Invalid request credentials"
}

Правило: всегда проверяйте наличие поля error в ответе, а не только HTTP-код. REST может вернуть код 200 и при этом сообщить об ошибке в теле — например, о нехватке прав или неверном параметре. Разбор ответа без проверки error — источник «тихих» багов, когда интеграция считает несозданную сущность созданной.

Пагинация: start и next

Методы списка (*.list) не отдают тысячи записей за один вызов — они возвращают их страницами, обычно по 50 элементов. Управляет постраничным чтением параметр start и поле ответа next.

Логика такая: первый запрос идёт со start=0. В ответе, помимо данных, приходит поле next со значением смещения для следующей страницы и поле total с общим числом записей. Пока в ответе есть next, вы повторяете запрос, подставляя его значение в start, пока страницы не закончатся.

GET /rest/1/xxxxxxxx/crm.deal.list.json?start=0
→ { "result": [ ... 50 сделок ... ], "next": 50, "total": 173 }

GET /rest/1/xxxxxxxx/crm.deal.list.json?start=50
→ { "result": [ ... 50 сделок ... ], "next": 100, "total": 173 }

GET /rest/1/xxxxxxxx/crm.deal.list.json?start=100
→ { "result": [ ... 50 сделок ... ], "next": 150, "total": 173 }

GET /rest/1/xxxxxxxx/crm.deal.list.json?start=150
→ { "result": [ ... 23 сделки ... ] }   // next отсутствует — конец
Тонкость производительности: на больших выборках дешёвая на первый взгляд пагинация становится дорогой — offset-подход заставляет базу пропускать всё большее число строк. Для тяжёлых обходов используйте фильтрацию по идентификатору (читать записи с ID больше последнего обработанного) и отключение подсчёта общего количества там, где total не нужен. Это стандартный приём ускорения массовой выгрузки.

Батч-запросы: 50 команд в одном

Каждый сетевой запрос стоит времени: установка соединения, задержка сети, ожидание ответа. Когда команд много, эти издержки складываются в секунды. Решение — батч (метод batch): он упаковывает до 50 команд REST в один HTTP-запрос и возвращает результаты всех команд разом.

Батч не только экономит сетевые обходы, но и умеет связывать команды между собой: результат одной команды можно подставить в параметры следующей через ссылку вида $result[имя_команды]. Это позволяет, например, создать сделку и тут же привязать к ней товарные позиции в одном запросе, не дожидаясь ответа между шагами.

POST /rest/1/xxxxxxxx/batch.json

halt=0
cmd[new_deal]=crm.deal.add?fields[TITLE]=Заказ №10245&fields[OPPORTUNITY]=15990
cmd[set_rows]=crm.deal.productrows.set?id=$result[new_deal]&rows[0][PRODUCT_NAME]=Товар&rows[0][PRICE]=15990

Разберём ключевые параметры батча:

Ответ батча содержит результаты и ошибки по каждой команде отдельно, поэтому разбирать его нужно покомандно, а не как единый success/fail. Батч — главный инструмент масштабирования: если ваша интеграция шлёт сотни одиночных вызовов, почти всегда их можно свернуть в пачки по 50 и снизить и время, и давление на лимиты.

Батч: до 50 команд в одном запросе Без батча — много обходов POST deal.add → ответ POST deal.add → ответ POST deal.add → ответ … ещё десятки обходов Медленно, давит на лимиты С батчем — один обход POST batch.json cmd[0] … cmd[49] $result[...] связи → 50 результатов разом Быстро, экономит лимиты
Схема: вместо десятков одиночных обращений батч отправляет до 50 команд в одном запросе и возвращает все результаты сразу.

Ограничения частоты запросов

REST — общий ресурс, и чтобы одна интеграция не «положила» портал, действует ограничение частоты обращений. Если слать запросы слишком часто, часть из них начнёт отклоняться с ошибкой превышения лимита. Дополнительно у операций есть «стоимость»: тяжёлые методы расходуют больше «бюджета», чем лёгкие, и это учитывается механизмом контроля нагрузки.

Мы намеренно не называем конкретных «магических» чисел: точные пороги зависят от тарифа, версии и режима работы платформы и со временем меняются. Проектировать надёжную интеграцию нужно не под конкретную цифру, а под сам факт наличия лимитов:

Важно: лимиты — это не «баг платформы», а защита от перегруза, в том числе от ваших же ошибок вроде бесконечного цикла. Интеграция, которая корректно реагирует на лимит и умеет притормозить, надёжнее той, что пытается его «пробить» и в итоге получает блокировку.

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

В распределённом обмене ошибки — норма, а не исключение: сеть моргнула, приёмник перезагрузился, сработал лимит, истёк токен. Разница между хрупкой и надёжной интеграцией — в том, как она реагирует на эти ситуации. Ошибки делятся на две категории, и обрабатывать их нужно по-разному.

Тип ошибкиПримерыКак реагировать
Временная (retryable)Таймаут, превышение лимита, 5xx, недоступность приёмникаПовторить с нарастающей задержкой
Постоянная (non-retryable)Неверные права, невалидный параметр, несуществующий методНе повторять, залогировать и разобраться
АвторизационнаяИстёк access_tokenОбновить токен по refresh и повторить

Правильная стратегия ретраев — экспоненциальная задержка с ограничением попыток: первый повтор через секунду, второй через две-четыре, дальше больше, но не бесконечно. После исчерпания попыток запрос уходит в «мёртвую очередь» на ручной разбор, а не молча теряется. Обязателен и журнал обмена: что отправили, что получили, сколько было попыток — без него отладка боевой интеграции превращается в гадание.

  1. Классифицируйте ответ. По коду и полю error определите, ошибка временная или постоянная.
  2. Для временных — ретрай с backoff. Увеличивайте паузу между попытками, ограничьте их число (например, 5–7).
  3. Для авторизационных — обновите токен. Получите новый access по refresh и повторите исходный вызов один раз.
  4. Для постоянных — не повторяйте. Зафиксируйте в журнале и уведомьте ответственного: повтор ничего не изменит.
  5. Ведите журнал. Сохраняйте запрос, ответ, число попыток и статус, чтобы обмен был прозрачным.

Идемпотентность обмена

Идемпотентность — свойство операции, при котором повторное выполнение даёт тот же результат, что и однократное. В контексте REST это значит: если вы дважды отправили «создать заказ №10245», в системе должен появиться один заказ, а не два. Без идемпотентности любые ретраи опасны — они плодят дубли.

Почему это критично именно в обмене? Потому что вы никогда не уверены, дошёл ли запрос. Приёмник мог создать сущность и не успеть ответить — соединение оборвалось. Ретрай отправит запрос снова, и если защиты нет, появится дубль. Классические симптомы отсутствия идемпотентности — «задвоенные заказы», «две одинаковые сделки», «товар добавился дважды».

Как обеспечивают идемпотентность на практике:

Правило: проектируйте обмен так, будто каждый запрос может прийти дважды. Идемпотентность и ретраи — две стороны одной медали: ретраи дают надёжность доставки, идемпотентность защищает от дублей, которые эти ретраи иначе создали бы.

Свой REST на 1С-Битрикс: контроллеры D7

Вернёмся к 1С-Битрикс: Управление сайтом. Когда магазину нужен собственный API — чтобы кормить мобильное приложение, принимать заказы от внешней системы или отдавать данные партнёру — его собирают на штатном механизме ядра D7: контроллерах \Bitrix\Main\Engine\Controller и ajax-действиях. Это «свой REST» без сторонних библиотек и без разворачивания OAuth-сервера.

Идея простая: вы описываете класс-контроллер с методами-действиями (actions), объявляете для них правила доступа, и получаете JSON-эндпоинт, который вызывается по стандартному ajax-роутингу Битрикса. Схематично контроллер выглядит так (код упрощён и приведён как иллюстрация структуры):

namespace Vendor\Shop\Controller;

use Bitrix\Main\Engine\Controller;
use Bitrix\Main\Engine\ActionFilter;

class Orders extends Controller
{
    // Правила доступа для действий: например, требуем авторизацию/подпись
    public function configureActions()
    {
        return [
            'list' => [
                'prefilters' => [ new ActionFilter\HttpMethod(['GET']) ],
            ],
        ];
    }

    // GET .../ajax.php?c=vendor:shop.orders&action=list
    public function listAction($since = null)
    {
        // выбрать новые заказы через D7 (\Bitrix\Sale\Order)
        // вернуть массив — ядро само отдаст его как JSON
        return [
            'orders' => [
                ['id' => 10245, 'sum' => 15990, 'status' => 'N'],
            ],
        ];
    }
}

Что здесь важно с точки зрения архитектуры REST на сайте:

Для авторизации такого API не нужен полноценный OAuth: достаточно проверять токен в заголовке или подпись запроса в префильтре и работать строго по HTTPS. Это тот случай, когда «свой REST» решает задачу проще и прозрачнее, чем попытка натянуть на сайт модель Битрикс24. Такие вещи мы делаем в рамках highload-проектов на Битрикс, где нагрузка и объёмы требуют аккуратной архитектуры API.

Свой REST на 1С-Битрикс: путь запроса Внешняя система Префильтр токен · подпись HTTPS · метод Action (D7) Sale · Catalog ORM инфоблоков JSON-ответ result / error Контроллер \Bitrix\Main\Engine\Controller: доступ в префильтре, данные — через штатный D7.
Схема: внешняя система бьёт в ajax-контроллер, префильтр проверяет доступ, действие берёт данные через D7 и возвращает JSON.

Типовые сценарии интернет-магазина

Теория оживает на конкретных задачах. Разберём пять самых частых сценариев, ради которых магазину на Битриксе нужен REST, и подскажем, какой инструмент под каждый брать.

1. Передать заказ в стороннюю систему

Магазин оформил заказ — его нужно отдать в CRM, ERP или службу доставки. Два подхода: исходящий вебхук/событие «создан заказ», которое шлёт данные наружу, либо собственный REST-эндпоинт, который внешняя система опрашивает. На практике комбинируют: событие-триггер уведомляет «есть новый заказ», а защищённый метод отдаёт детали. Обязательны идемпотентность по номеру заказа и ретраи, чтобы заказ не задвоился и не потерялся.

2. Забрать остатки со склада

Актуальные остатки часто живут во внешней складской системе (WMS). Магазин периодически запрашивает их по REST и обновляет наличие товаров. Здесь важны пагинация (остатков могут быть десятки тысяч), батчи для массового обновления и разумная частота, чтобы не упереться в лимиты. Обновление наличия лучше делать дельтой (только изменившееся), а не полной перезаписью каждый раз.

3. Синхронизировать каталог

Если каталог ведётся во внешней PIM-системе, его нужно регулярно подтягивать: новые товары, изменения цен, характеристик, статусов. Через REST это делают инкрементально — забирают только то, что изменилось с прошлой синхронизации (по метке времени или версии). Массовые операции сворачивают в батчи и планируют на часы низкой нагрузки. Базовый обмен ассортиментом с учётной системой при этом остаётся на CommerceML — про него отдельно в статье об интеграции магазина с 1С.

4. Кормить данными мобильное приложение

Мобильное приложение магазина — классический потребитель REST. Ему нужны каталог, карточки товаров, корзина, оформление заказа, личный кабинет. Здесь почти всегда делают собственный REST на стороне 1С-Битрикс (контроллеры D7): приложение ходит в ваши эндпоинты по токену, а вы контролируете формат, версионирование и права. Публичный REST для клиентского приложения обязан работать по HTTPS и с короткоживущими токенами.

5. Подключить чат-бота

Чат-бот (в чате портала или во внешнем мессенджере) обменивается сообщениями через REST и события: принимает входящие сообщения через исходящие вебхуки/события, отвечает через методы отправки сообщений. Для ботов Битрикс24 это группа imbot.*; для внешних мессенджеров — свой слой на стороне сайта. Ключевое требование — быстрый ответ на событие, иначе платформа сочтёт обработчик недоступным.

СценарийРекомендуемый инструментНа что обратить внимание
Заказ во внешнюю системуИсходящий вебхук + метод отдачи деталейИдемпотентность, ретраи, подпись
Остатки со складаВходящий вебхук / свой REST + батчПагинация, дельта, частота
Синхронизация каталогаREST + батч, инкрементальноМетка изменений, часы низкой нагрузки
Мобильное приложениеСвой REST на D7HTTPS, токены, версионирование
Чат-ботimbot.* / события + свой слойБыстрый ответ на событие

Магазин как хаб интеграций

Когда сценариев становится много, магазин на Битриксе превращается в центральный хаб: он и отдаёт данные наружу, и принимает их, и оркестрирует обмен между внешними системами. Держать в голове эту картину полезно — она подсказывает, где заложить общие механизмы (журнал, очередь, ретраи), а не изобретать их заново для каждой интеграции.

В центре — магазин (заказы, каталог, пользователи). Вокруг — CRM, учётная система 1С, склад, платёжные и доставочные сервисы, маркетплейсы, мобильное приложение, чат-бот. REST — это «шина», по которой они общаются. Чем больше спиц у такого колеса, тем важнее единые правила: общий формат ошибок, единый журнал обмена, централизованная обработка лимитов и ретраев.

Магазин как хаб интеграций через REST Магазин на 1С-Битрикс CRM Учётная 1С Склад / WMS Мобильное прил. Доставка / оплата Маркетплейсы
Схема: магазин в центре обменивается данными с CRM, 1С, складом, доставкой, маркетплейсами и приложением — REST выступает единой шиной интеграций.

Безопасность REST-интеграций

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

Мини-правило безопасности: относитесь к каждому REST-эндпоинту как к публичной двери, даже если «о нём никто не знает». Через безопасность-через-неизвестность интеграции взламывают чаще всего. Проверка подписи, HTTPS и минимальные права важнее «секретности» URL.

Подключение первой интеграции по шагам

Сведём всё в практический маршрут. Возьмём типовую задачу «передавать заказы с сайта во внешнюю систему» и пройдём её от постановки до боевого запуска.

  1. Определите систему и модель. Битрикс24 или 1С-Битрикс? Вебхук, приложение или свой REST? От этого зависит всё остальное. Для внутреннего серверного обмена чаще берут вебхук или свой эндпоинт на D7.
  2. Составьте список методов и прав. Выпишите конкретные методы под сценарий и требуемый scope. Создайте вебхук/приложение ровно с этими правами.
  3. Настройте канал. Для «толчка наружу» — исходящий вебхук/событие на нужное действие; для «забирают у нас» — защищённый метод отдачи данных. Пропишите HTTPS и проверку подписи.
  4. Заложите идемпотентность. Передавайте внешний ключ (номер заказа) и на приёмнике делайте upsert, чтобы повтор не создавал дубль.
  5. Добавьте ретраи и очередь. Отправляйте не в момент действия пользователя, а фоново из очереди, с экспоненциальными повторами и лимитом попыток.
  6. Сверните массовое в батчи. Если операций много — группируйте до 50 команд в один запрос и выдерживайте паузы под лимиты.
  7. Включите журнал обмена. Логируйте запросы, ответы, попытки и статусы — это ваш главный инструмент отладки на бою.
  8. Протестируйте на реальных данных и краевых случаях. Проверьте недоступность приёмника, истёкший токен, превышение лимита, повторную доставку — интеграция должна их пережить без потерь и дублей.

Частые ошибки

Грабли, на которые чаще всего наступают в REST-интеграциях Битрикса:

Чек-лист REST-интеграции

Короткий список для приёмки интеграции перед запуском:

Вывод

REST API в Битриксе — это не одна технология, а набор инструментов под разные задачи, и половина успеха интеграции закладывается ещё до кода: нужно правильно выбрать систему (Битрикс24 или 1С-Битрикс) и модель доступа (вебхук, приложение или свой REST на контроллерах D7). Входящий вебхук — чтобы дёргать методы; исходящий — чтобы принимать события; OAuth и приложения — для тиражируемых решений; собственный REST на D7 — когда сайту нужен свой API под мобильное приложение, чат-бот или обмен с внешней системой.

Дальше всё решает инженерная аккуратность: батчи вместо потока одиночных вызовов, пагинация до конца списка, уважение к лимитам, ретраи с задержкой, идемпотентность против дублей и журнал обмена для прозрачности. Сделайте эти вещи системно — и REST превратит магазин на 1С-Битрикс в надёжный хаб интеграций, который спокойно переживает и пики нагрузки, и временную недоступность соседних систем. А если нужна помощь с проектированием и разработкой такого API — это как раз наша услуга по REST для 1С-Битрикс, смежные материалы ищите в рубрике разработка и архитектура.

Частые вопросы

Чем REST API в Битрикс24 отличается от REST в 1С-Битрикс Управление сайтом?

Это две разные экосистемы одного вендора. В Битрикс24 REST API — готовый и очень широкий: сотни методов crm.*, tasks.*, im.*, вебхуки и приложения из коробки, авторизация через webhook-код или OAuth 2.0. В 1С-Битрикс Управление сайтом (продукт для сайтов и интернет-магазинов) единого «облачного» REST такого масштаба нет: там свой REST чаще всего собирают сами на контроллерах D7 (\Bitrix\Main\Engine\Controller) или используют модуль «Веб-сервисы»/rest, если он установлен. Когда говорят «битрикс rest» и «вебхуки битрикс24» — почти всегда речь про Битрикс24, а когда «отдать заказы магазина наружу по API» — часто про собственный REST на стороне сайта.

Чем входящий вебхук отличается от исходящего?

Направлением данных. Входящий (incoming) вебхук — это URL с секретным кодом, дёрнув который снаружи, вы вызываете методы Битрикса: создаёте сделку, читаете каталог, меняете заказ. Данные идут внутрь Битрикса. Исходящий (outgoing) вебхук — это подписка на событие: когда внутри Битрикса что-то происходит (создана сделка, изменён заказ), платформа сама шлёт HTTP-запрос на ваш URL с данными события. Данные идут наружу. Простой ориентир: входящий — вы дёргаете Битрикс; исходящий — Битрикс дёргает вас.

Что безопаснее для интеграции — вебхук или приложение?

Вебхук проще и подходит для внутренних, серверных интеграций «один на один»: его код даёт фиксированный набор прав и живёт, пока его не отозвали. Приложение (в том числе локальное) использует OAuth 2.0 с access- и refresh-токенами, разграничением прав (scope) и возможностью выдавать доступ многим порталам — это правильный путь для тиражируемых решений и публичных интеграций. С точки зрения безопасности вебхук нельзя «светить» в клиентском коде и репозиториях, а приложение безопаснее за счёт коротких токенов и явных scope. Для разового серверного обмена берут вебхук, для продукта — приложение.

Что такое батч-запрос и зачем он нужен?

Батч (batch) — это способ упаковать до 50 команд REST в один HTTP-запрос. Вместо 50 отдельных обращений по сети вы отправляете один вызов метода batch с массивом команд, а в ответ получаете результаты каждой. Это резко снижает число сетевых круговых обходов и нагрузку на лимиты. Дополнительно батч поддерживает подстановку результата одной команды в параметры следующей (ссылки вида $result[...]), что позволяет, например, создать сделку и тут же добавить к ней товарные позиции в одном запросе.

Какие лимиты частоты запросов есть у REST Битрикса?

У облачного REST есть ограничение частоты обращений: слишком частые запросы начинают отклоняться с ошибкой превышения лимита, а у операций есть «стоимость», которая учитывается методом контроля нагрузки. Точные числа зависят от тарифа и версии платформы, поэтому опираться на конкретную «магическую» цифру не стоит — правильнее проектировать интеграцию так, чтобы она была устойчива к лимитам: группировать вызовы в батчи, выдерживать паузы, обрабатывать ответ о превышении лимита и повторять запрос с нарастающей задержкой.

Как отдать заказы магазина во внешнюю систему через REST?

Есть два пути. Первый — исходящий вебхук на событие оформления/изменения заказа: Битрикс сам пришлёт данные на ваш URL, а внешняя система их примет. Второй — собственный REST-эндпоинт на стороне 1С-Битрикс Управление сайтом (контроллер D7 или ajax-действие), который внешняя система опрашивает и забирает новые заказы. На практике часто комбинируют: событие-триггер «есть новый заказ» плюс защищённый метод, отдающий детали. Важно предусмотреть идемпотентность (по номеру заказа), ретраи и подпись запроса, чтобы данные не задваивались и не подделывались.

Нужен ли для своего REST на 1С-Битрикс отдельный модуль?

Не обязательно. Начиная с ядра D7 в 1С-Битрикс есть штатный механизм контроллеров \Bitrix\Main\Engine\Controller и ajax-действий: вы описываете класс с действиями (actions), объявляете правила доступа (configureActions, префильтры) и получаете JSON-эндпоинт без сторонних библиотек. Это и есть «свой REST» для сайта: удобно для мобильного приложения, чат-бота или обмена с внешней системой. Полноценный OAuth-сервер как в Битрикс24 для этого не нужен — достаточно токена/подписи и HTTPS.

Как не потерять данные, если внешняя система недоступна?

Проектируйте обмен асинхронно и с гарантией доставки. Исходящие события складывайте в очередь и отправляйте фоновым процессом (агент, cron, очередь заданий), а не прямо в момент действия пользователя. На каждый вызов предусмотрите ретраи с экспоненциальной задержкой и ограничением числа попыток, а также журнал обмена, чтобы видеть, что ушло и что упало. Ключевой принцип — идемпотентность: повторная доставка одного и того же события не должна создавать дубликат. Тогда временная недоступность приёмника не приводит к потере данных — они просто отправятся позже.

Поделиться:

Нужна надёжная REST-интеграция для магазина?

Спроектируем и разработаем API и обмен по REST: вебхуки, приложения, свой эндпоинт на D7, обмен заказами и остатками, синхронизацию каталога — с авторизацией, лимитами, ретраями и журналом.

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает интеграции и REST API для интернет-магазинов и корпоративных сайтов на 1С-Битрикс: вебхуки, приложения Битрикс24, обмен с 1С, CRM, складами и маркетплейсами для среднего и крупного бизнеса.

← Все статьи блога